【发布时间】:2019-06-06 04:58:42
【问题描述】:
【问题讨论】:
标签: mysql sql json relational-database database-normalization
【问题讨论】:
标签: mysql sql json relational-database database-normalization
这取决于数据在 rdbms 中的使用方式,而不仅仅是数据类型本身,是否有任何数据(不仅仅是 json)违反 1NF。但是,数据类型会影响数据类型以违反 1NF 的方式存储数据的频率。 Json 是一种具有内在结构的复杂数据类型,很可能以违反 1NF 的方式使用。
让我稍微扩展一下我在这个问题中使用数据作为决定性因素的意思。
关于 1NF 的维基百科文章有一个 section on atomicity,描述了对原子性解释的歧义:
原子性的概念没有绝对的意义”:[10] 一个值可能是 出于某些目的被认为是原子的,但可以被认为是 为其他目的组合更基本的元素。
这意味着如果特定的 json 字段在数据库层以原子方式处理而不考虑其内部结构,则不会违反 1NF。
但是,如果数据库必须知道特定 json 字段的内部结构(例如在其中搜索),那么它就违反了 1NF。
为了提供一个类比,存储在 varchar 字段中的字符串将被大多数用户(除了 zelous 理论家)认为是原子的。但是,如果您存储分隔值(或 json 或 xml)并且您的数据库层必须了解此类字段的内部结构,那么即使是 varchar 字段也可能违反 1NF。
【讨论】:
是的,它违反了 1NF 和 2NF(也许其他 Normal 形式也是如此,但我永远无法理解它们)。
但是关系型 DBMS 是存储小块数据的非常有用的地方——即使是不透明的 blob。它提供了控制并发访问、授权、复制、注释的机制......
由于 JSON 只是一个具有特殊格式的字符串,几乎所有 DBMS 都会支持它,MySQL 只是为检查 BLOB 的内容提供了有限的范围。
【讨论】: