【问题标题】:Why is multi-value field a bad idea in relational databases为什么多值字段在关系数据库中是个坏主意
【发布时间】:2011-11-26 23:45:39
【问题描述】:

一直在使用 Mongodb 和 Solr/Lucene,我开始想知道为什么关系数据库的多值字段(通常)被认为是一个坏主意?

我知道关系数据库的理论基础和normalization。然而,在实践中,我遇到了许多用例,我最终使用键值对的元表来补充主表,例如在标记的情况下,我希望我不必进行多个连接查找数据。或者要求突然从必须支持单个作者变为每篇文章的多个作者。

那么,多值字段有哪些缺点,或者供应商选择不支持它,因为它不是 SQL 标准的一部分?

【问题讨论】:

    标签: mongodb solr relational-database nosql


    【解决方案1】:

    主要缺点是查询偏差。此类数据库在设计时往往考虑到一种特定类型的查询,而当需要编写其他查询时会变得难以处理。

    假设您有学生和课程,并且您对所有这些进行建模,以便您可以在单个表的一行中说“John Doe 学习 {French, Algebra, Relational Theory}”和“Jane Doe 学习 {德语,函数计算,关系理论}"。

    这样可以很容易地查询“...所遵循的所有课程是什么”,但请尝试想象一下要产生“遵循关系理论的所有学​​生是什么”的答案需要什么。

    试着想象系统本身应该做的所有事情,以使这样的查询(如果可以编写的话)有机会合理执行......

    【讨论】:

      【解决方案2】:

      查询偏差假设 SQL 始终是一种很好的查询语言。事实上,它有时是一种出色的查询语言,但它从来都不是一刀切的。多值数据库允许您打包多个值并处理“替代透视”查询。 MVDB 示例:UniData http://u2.rocketsoftware.com/products/u2-unidata、OpenInsight http://www.revelation.com/、Reality http://www.northgate-is.com/。还有很多其他的。 他们的查询语言支持您要执行的操作。

      【讨论】:

        【解决方案3】:

        我认为这源于一个事实,即在关系世界中没有简单、标准的方法将 集合 映射到列。多字段值基本上是一个简单的集合(在大多数用例中是 stringsarray),很难表示为 column。一些 RDBMS 通过使用分隔符来支持这一点,但话说回来,即使 DB 驱动程序允许您在关系数据库中使用多值字段,它也开始感觉像是一种反模式。像 MongoDB 这样的数据库依赖于类似 JSON 的结构来定义数据,其中的集合很容易映射和检索。

        【讨论】:

        • 关系理论完美地允许任何属性为任何类型,包括数组类型、元组类型或关系类型。
        • 同意,理论上确实如此。
        猜你喜欢
        • 2017-08-31
        • 2011-11-24
        • 2011-02-23
        • 1970-01-01
        • 2018-10-17
        • 1970-01-01
        • 1970-01-01
        • 2014-06-04
        相关资源
        最近更新 更多