【问题标题】:Violation of 1NF in MySQLMySQL中违反1NF
【发布时间】:2019-06-06 04:58:42
【问题描述】:

MySQL supports JSON 数据类型。 字段的原子性是否违反1NF rule?如果不是,那它的合理性如何?

【问题讨论】:

    标签: mysql sql json relational-database database-normalization


    【解决方案1】:

    这取决于数据在 rdbms 中的使用方式,而不仅仅是数据类型本身,是否有任何数据(不仅仅是 json)违反 1NF。但是,数据类型会影响数据类型以违反 1NF 的方式存储数据的频率。 Json 是一种具有内在结构的复杂数据类型,很可能以违反 1NF 的方式使用。

    让我稍微扩展一下我在这个问题中使用数据作为决定性因素的意思。

    关于 1NF 的维基百科文章有一个 section on atomicity,描述了对原子性解释的歧义:

    原子性的概念没有绝对的意义”:[10] 一个值可能是 出于某些目的被认为是原子的,但可以被认为是 为其他目的组合更基本的元素。

    这意味着如果特定的 json 字段在数据库层以原子方式处理而不考虑其内部结构,则不会违反 1NF。

    但是,如果数据库必须知道特定 json 字段的内部结构(例如在其中搜索),那么它就违反了 1NF。

    为了提供一个类比,存储在 varchar 字段中的字符串将被大多数用户(除了 zelous 理论家)认为是原子的。但是,如果您存储分隔值(或 json 或 xml)并且您的数据库层必须了解此类字段的内部结构,那么即使是 varchar 字段也可能违反 1NF。

    【讨论】:

    • 热心的理论家会说“atomic”是无用的无意义的模糊化,而“1NF”也好不了多少,因为它用于表示许多不同的东西,包括一些“原子”;否则他们会同意你的观点,即你想要量化的数据库状态的任何部分都应该是一个属性。 PS 那篇维基文章是一团糟。
    【解决方案2】:

    是的,它违反了 1NF 和 2NF(也许其他 Normal 形式也是如此,但我永远无法理解它们)。

    但是关系型 DBMS 是存储小块数据的非常有用的地方——即使是不透明的 blob。它提供了控制并发访问、授权、复制、注释的机制......

    由于 JSON 只是一个具有特殊格式的字符串,几乎所有 DBMS 都会支持它,MySQL 只是为检查 BLOB 的内容提供了有限的范围。

    【讨论】:

      猜你喜欢
      • 2017-07-24
      • 2017-04-24
      • 2012-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-07
      相关资源
      最近更新 更多