我正在尝试建模一个专业化/泛化的设计,倾向于使用类表继承(参见这个答案)。然而,我的同事担心维护和性能问题,因为将有许多(50+)重叠的同一张表的专业化。他的建议是创建一个具有以下列的表: 指向通用表的引用 指向维护专业化类型的表的引用 指向维护属性值的表的引用 这样,所有属性都在一个表中维护,并且可以通过专业化列进行过滤。我不知道这种设计叫什么,但我担心它与EAV有关...我的主要关注点是修改异常,但除此之外,我没有看到任何理由认为这是一个坏主意。哪个解决方案明显优于另一个,或者我们应该选择一个并继续?
设计表格时,我通常会考虑一个问题:使用情况。我会根据数据的写入和查询方式以及性能、重复性等因素来偏向于读取或写入设计。由于您的问题没有说明使用情况,所以我在这里给出的所有建议都是完全猜测的。如果您每天插入20k行,则设计将与每天插入5行不同。此外,如果您需要每天对任何类型的任何列运行20k次搜索,或者每天运行5次,则这些都会影响您设置表格的方式。总体而言,一种常见的方法可能是这样的:创建1个主要通用表格和大约5个其他通用表格,其中您可能会稍微涉及“单表继承”(即可能有几列不适用于每种类型,但包含在内以覆盖尽可能多的类型的列)。然后,采用EAV类似的方法来处理其余列。