2017-03-04 70 views

回答

1

是的,它违反了1NF和2NF(也许其他的正常形式,但我永远不能把我的头围绕他们)。

但是,关系数据库管理系统是一个非常有用的地方来存储小块数据 - 即使是不透明的斑点。它提供了控制并发访问,授权,复制,注释的机制......因为JSON只是一个特殊格式的字符串,几乎所有的DBMS都会支持它,MySQL只是提供有限的范围来检查BLOB的内容。

3

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

让我扩大一点,我的意思是使用数据作为这个问题的决定性因素。

上1NF维基百科的文章有一个section on atomicity描述围绕原子的解释含糊:

原子的概念,没有绝对意义“:[10]的数值可能是 认为是原子的一些的目的,但可被认为是 组合用于其它目的更基本的要素。

这意味着,如果所述特定的JSON字段在数据库层无视其内部结构的原子的方式进行处理,然后它不会违反1NF。但是,如果数据库必须知道特定json字段的内部结构(例如,在其内搜索),那么它违反了1NF。

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

+0

热心理论家会说“[atomic](http://stackoverflow.com/a/24038895/3404097)”是一种无益的毫无意义的模糊化,而“1NF”并不好,因为它用来表示许多不同的东西,包括一些在“原子”方面;否则他们会同意你的观点,即任何你想量化的数据库状态都应该是一个属性。 PS该维基文章是一团糟。 – philipxy