在我的工作中,我们具有伪标准,即创建一个表以保存实体的“标准”信息,并创建另一个表(如“ TableNameDetails”),该表包含可选数据元素。平均而言,主表中的每一行将有大约8-10条明细行。
我的问题是:与将这些详细信息添加为主表中的其他可空列相比,这会对性能产生什么样的影响?
最佳答案
您要描述的是一个Entity-Attribute-Value设计。它们在世界上占有一席之地,但是除非绝对必要,否则应像瘟疫一样避免它们。我经常给出的类比是,它们就像毒品:在少量和特定情况下,它们可能是有益的。太多会杀死你。它们的性能将很糟糕,并且无法扩展,并且由于这些值都存储为字符串,因此您将无法获得任何类型的数据完整性。
因此,这是您问题的简短答案:如果您既不需要查询特定的值,也不需要对给定实体的属性进行列式报告,也不需要关心数据完整性,也不需要为吐出大量数据而做任何其他事情。实体列为列表,它们很好。但是,如果您需要实际使用它们,则您编写的任何查询都不会有效。
关于sql-server - 明细表的效率如何?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2480623/