MySQL 中违反 1NF

Chi*_*a B 4 mysql sql json relational-database database-normalization

MySQL支持JSON 数据类型。它是否违反了字段原子性的1NF 规则?如果不是,那么它的合理性如何?

Sha*_*dow 5

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

让我稍微扩展一下我所说的使用数据作为这个问题的决定性因素的含义。

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

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

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

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

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