类表继承 vs. 非规范化设计

8
我正在尝试建模一个专业化/泛化的设计,倾向于使用类表继承(参见这个答案)。
然而,我的同事担心维护和性能问题,因为将有许多(50+)重叠的同一张表的专业化。他的建议是创建一个具有以下列的表:
  • 指向通用表的引用
  • 指向维护专业化类型的表的引用
  • 指向维护属性值的表的引用
这样,所有属性都在一个表中维护,并且可以通过专业化列进行过滤。我不知道这种设计叫什么,但我担心它与EAV有关...
我的主要关注点是修改异常,但除此之外,我没有看到任何理由认为这是一个坏主意。哪个解决方案明显优于另一个,或者我们应该选择一个并继续?
1个回答

7
设计表格时,我通常会考虑一个问题:使用情况。我会根据数据的写入和查询方式以及性能、重复性等因素来偏向于读取或写入设计。
由于您的问题没有说明使用情况,所以我在这里给出的所有建议都是完全猜测的。如果您每天插入20k行,则设计将与每天插入5行不同。此外,如果您需要每天对任何类型的任何列运行20k次搜索,或者每天运行5次,则这些都会影响您设置表格的方式。
总体而言,一种常见的方法可能是这样的:创建1个主要通用表格和大约5个其他通用表格,其中您可能会稍微涉及“单表继承”(即可能有几列不适用于每种类型,但包含在内以覆盖尽可能多的类型的列)。然后,采用EAV类似的方法来处理其余列。

刚从会议回来,结果我们得到的方案非常相似。事实证明,大多数专业化只是信息性的,因此我们对它们采用了通用数据模型方法。对于那些需要良好性能/我们计划频繁查询的少数专业化,我们使用了类表继承。所以谢谢,非常好的答案! - user285498

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接