在关系数据库中存储 XML 如何违反规范化原则?

How would storing XML in a relational database violate Normalization Principles?

本书中:Regina Obe & Leo Hsu,PostgreSQL Up & 运行,p. 101。它是作为对 PostgreSQL XML data-type:

的介绍而写的

The XML data type, similar to JSON, is “controversial” in a relational database because it violates principles of normalization.

无需进一步解释。有人可以详细说明什么是规范化原则以及为什么 XML 确实违反了其中一些原则。

关系型数据库规范化的教程在书上和网上都有很多。参见示例 https://en.wikipedia.org/wiki/Database_normalization

第一范式表示一列应仅包含 "atomic" 或 "indivisible" 值 - 如果您过度严格地解释它意味着您甚至不允许存储日期。将 XML 文档存储在一个列中肯定违反了该原则。这并不意味着这样做一定是件坏事,只是您需要了解后果(这通常意味着更新数据库并保持一致将变得更加困难)。

关系模型是一阶逻辑模型,这意味着我们的谓词中的变量只能包含值。值之间的任何结构/关联都应记录为关系,以便规范化和其他关系特征(如查询和约束)可以对它们进行操作。

将像 XML 或 JSON 这样的复杂值存储为不透明值不是问题,但是当我们将这些解释为数据结构时,我们有一个更高阶的模型(谓词随谓词而变化) .一般而言,此类模型处理起来要复杂得多(尽管一开始看起来更自然)。例如,它需要额外的运算符来遍历、连接、操作、比较和约束(部分)层次结构。

目前关于 1NF 的主流想法是,从形式上讲,它是不可定义的(原因是通常定义所依赖的 "atomicity" 的概念本身是不可正式定义的——作为一个例子,我需要Michael Kay 只是指出,他将术语 "atomic" 和 "undivisible" 放在引号中)。因此,评估某事是否构成违反 1NF 并不能客观地判定。

结果是,纯粹从形式上讲,"there is no problem" - 正如 rb 所述。但这仅意味着很难用数学术语准确地确定该方法的实际缺点是什么,而不是说没有这样的缺点。

编辑

很好的阅读:

https://www.simple-talk.com/sql/learn-sql-server/facts-and-fallacies-about-first-normal-form/

条件是 1NF 应该被理解为 "what the original 1NF intended to address, at least in spirit"。

并特别注意它的结论在很大程度上也适用于您的场景:

违反 1NF 的影响有时被认为是无害的,尽管它们中的大多数都会损害架构的结构稳健性和完整性。如果您尝试使用解析和转换值的复杂例程或依赖外部应用程序来强制执行足够的完整性来“修补”问题,那么您只会给数据库的整体稳定性增加额外的负担。简而言之,任何认为您通过避免 1NF 实现了设计简单性的看法都只是一种错觉。另一方面,简单地将其作为数据管理中最基本的完整性格言,可以获得很多好处。