在这本书中: Regina Obe& Leo Hsu ,PostgreSQL Up&跑步,p。 101 。它是作为PostgreSQL XML数据类型的介绍编写的:
类似于JSON的XML数据类型在关系中是“有争议的” 数据库,因为它违反了规范化原则。
没有进一步解释。有人可以详细说明什么是规范化原则以及为什么XML违反了其中一些原则。
答案 0 :(得分:5)
关系模型是一阶逻辑模型,意味着我们的谓词中的变量只能包含值。值之间的任何结构/关联都应记录为关系,以便规范化和其他关系特征(如查询和约束)可以对它们进行操作。
将复杂值(如XML或JSON)存储为不透明值不是问题,但是当我们将这些值解释为数据结构时,我们有一个更高阶的模型(谓词随谓词而变化)。一般来说,这些模型处理起来要复杂得多(尽管一开始看起来更自然)。例如,它需要额外的运算符来遍历,连接,操作,比较和约束(部分)层次结构。
答案 1 :(得分:3)
目前关于1NF的主流思想是,它是不可定义的,正式的说法(原因是通常定义所依赖的“原子性”概念本身不能正式定义 - 作为一个例子,我需要指出的不多于迈克尔凯(Michael Kay)将“原子”和“不可分割”这两个术语置于恐慌引号中。因此,评估某些内容是否构成违反1NF的行为是客观上无法确定的。
结果是,纯粹正式地说,“没有问题” - 正如rb所说。但这仅仅意味着用数学术语精确地确定方法的实际缺点,而不是没有这样的缺点,这是非常困难的。
修改
好读:
https://www.simple-talk.com/sql/learn-sql-server/facts-and-fallacies-about-first-normal-form/
附带条件是1NF应被视为“原始1NF打算解决的问题,至少在精神上”。
并特别注意其结论主要适用于您的场景:
违反1NF的影响有时被认为是无害的,尽管大多数影响了架构的结构健全性和完整性。如果您尝试通过使用解析和透视值的复杂例程或依赖外部应用程序来强制执行足够的完整性来“修补”问题,那么您将只会对数据库的整体稳定性施加额外的负担。简而言之,任何通过避开1NF而实现设计简洁的观念仅仅是一种幻觉。另一方面,通过简单地将其视为数据管理中最基本的完整性格言,可以获得很多收益。
答案 2 :(得分:2)
在书籍和网络上有很多关于关系数据库规范化的教程。请参阅示例https://en.wikipedia.org/wiki/Database_normalization
第一个普通形式表示列应仅包含“原子”或“不可分割”值 - 如果您过度严格地解释它,则意味着您甚至不允许存储日期。在列中存储XML文档肯定违背了该原则。这并不意味着它必然是一件坏事,只是你需要意识到后果(这通常意味着更新数据库并使其保持一致会变得更加困难)。