Mongodb 为什么多值字段在关系数据库中是个坏主意

Mongodb 为什么多值字段在关系数据库中是个坏主意,mongodb,solr,relational-database,nosql,Mongodb,Solr,Relational Database,Nosql,在与Mongodb和Solr/Lucene合作之后,我开始怀疑为什么关系数据库的多值字段(通常)被认为是一个坏主意 我知道关系数据库的理论基础。然而,在实践中,我遇到了许多用例,在这些用例中,我最终使用键值对的元表来补充主表,例如在标记的情况下,我希望不必进行多个联接来查找数据。或者需求突然从必须支持一个作者转变为每篇文章支持多个作者 那么,拥有多值字段有哪些缺点呢?或者供应商是否选择不支持它,因为它不是SQL标准的一部分 我认为这是因为在关系世界中,没有简单、标准的方法将集合映射到列。多字段值

在与Mongodb和Solr/Lucene合作之后,我开始怀疑为什么关系数据库的多值字段(通常)被认为是一个坏主意

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


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

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

主要缺点是查询偏差。这种数据库在设计时往往只考虑一种特定的查询,当需要编写其他查询时,很难处理

假设你有学生和课程,你对所有这些进行建模,这样你就可以在一个表格的一行中说,“约翰·多伊学习{法语,代数,关系理论}”和“简·多伊学习{德语,函数计算,关系理论}”

这使得我们很容易质疑“所有遵循关系理论的课程都是什么……”,但试着想象一下,要回答“所有遵循关系理论的学生都是什么”需要什么


试着想象一下,为了给这样一个查询(如果有可能编写它的话)提供合理执行的机会,系统本身应该做的所有事情…

查询偏差是假设SQL始终是一种好的查询语言。事实上,它有时是一种优秀的查询语言,但它从来不是万能的。多值数据库允许您打包多个值并处理“备用透视”查询。 MVDB的示例:UniData、OpenInsight、Reality。还有很多其他的。
他们的查询语言支持您所期望的操作。

关系理论完美地允许任何属性属于任何类型,包括数组类型、元组类型或关系类型。同意,理论上它肯定是这样的。