在与Mongodb和Solr/Lucene合作之后,我开始想知道为什么关系数据库的多值字段(通常)被认为是个坏主意?
我知道关系数据库和规范化的理论基础.然而,在实践中,我遇到了许多用例,我最终使用键值对的元表来补充主表,例如在标记的情况下,我希望我不必进行多个连接查找数据.或者需求突然从支持单个作者变为每篇文章的多个作者.
那么,拥有多值字段有什么缺点,或者供应商选择不支持它,因为它不是SQL标准的一部分?
主要缺点是查询偏差.这种数据库倾向于考虑到一种特定类型的查询而设计的现象,并且当需要编写其他查询时变得难以处理.
假设您有学生和课程,并且您对所有这些进行建模,以便您可以在单个表中的单行中说"John Doe采用{法语,代数,关系理论}"和"Jane Doe采用{德语,功能计算,关系理论}".
这样可以很容易地查询"所有课程后面是什么......",但试着想象一下,为"所有遵循关系理论的学生"做出答案需要做些什么.
尝试并想象系统本身应该做的所有事情来提供这样的查询(如果可以写它)任何合理执行的机会......