在MySQL中违反1NF

时间:2017-03-04 21:11:04

标签: mysql sql json relational-database

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

2 个答案:

答案 0 :(得分:3)

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

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

关于1NF的维基百科文章有section on atomicity,它描述了解释原子性的模糊性:

  

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

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

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

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

答案 1 :(得分:1)

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

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

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