Database design 类表继承与非规范化

Database design 类表继承与非规范化,database-design,relational-database,specialization,Database Design,Relational Database,Specialization,我试图对专门化/泛化进行建模,倾向于使用类表继承(请参阅) 但是,我的同事有维护和性能方面的顾虑,因为同一个表中有许多(50+)重叠的专门化。他的建议是创建一个包含以下列的表: 参考总表 对维护专门化类型的表的引用 对维护属性值的表的引用 这样,所有属性都保存在一个表中,并且可以通过专门化列进行过滤。我不知道这个设计叫什么,但我担心它与 我主要担心的是,但除此之外,我不认为这是个坏主意。是一种解决方案明显优于另一种解决方案,还是我们应该选择一种解决方案继续前进?在设计表时,我通常会考虑一件事

我试图对专门化/泛化进行建模,倾向于使用类表继承(请参阅)

但是,我的同事有维护和性能方面的顾虑,因为同一个表中有许多(50+)重叠的专门化。他的建议是创建一个包含以下列的表:

  • 参考总表
  • 对维护专门化类型的表的引用
  • 对维护属性值的表的引用
这样,所有属性都保存在一个表中,并且可以通过专门化列进行过滤。我不知道这个设计叫什么,但我担心它与


我主要担心的是,但除此之外,我不认为这是个坏主意。是一种解决方案明显优于另一种解决方案,还是我们应该选择一种解决方案继续前进?

在设计表时,我通常会考虑一件事:用法

我将如何在那里写入数据,以及如何查询数据。我倾向于读写设计,因为读写对性能、重复性等更重要

你的问题并不能真正解释你的用法,所以我在这里回答的所有建议都是完全的推测。如果每天插入20k行,设计将不同于每天插入5行。此外,如果您需要每天在任何类型的任何列上运行20k搜索,或者如果您每天运行5次搜索,也可以这样做。这些会影响您如何设置表格

话虽如此,一般做法可能是这样做:


50多个重叠的专门化表将是编写查询的噩梦。我会尝试提出1个主要的通用表,可能还有5个左右的其他通用表,在这些表中,您可能会稍微研究一下“单表继承”(在这里,您可能有几个列不适用于每种类型,但包含了这些列,以便尽可能多地覆盖各种类型中的列)。从这里开始,用类似EAV的方法来覆盖其余的专栏。

刚从一次会议回来,这与我们最终的结果非常相似。事实证明,绝大多数专门化只是信息性的,所以我们对它们使用了通用数据模型方法。对于需要良好性能/我们计划大量查询的两个专门化,我们使用了类表继承。谢谢,回答得很好!