8

我正在尝试对专业化/泛化进行建模,倾向于使用类表继承(请参阅此答案)。

但是,我的同事有维护和性能方面的问题,因为同一张表会有很多(50 多个)重叠的专业化。他的建议是创建一个包含以下列的表格:

  • 参考总表
  • 对维护特化类型的表的引用
  • 对维护属性值的表的引用

这样,所有属性都保存在一个表中,并且可以通过专业化列进行过滤。我不知道这个设计叫什么,但我担心它与EAV有某种关系......

我主要关心的是修改异常,但除此之外我没有看到任何理由这是一个坏主意。一种解决方案明显优于另一种解决方案,还是我们应该选择一个并继续前进?

4

1 回答 1

7

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

我将如何在那里写入数据以及我将如何查询它。我将设计偏向于读取或写入,基于哪个对性能更重要,重复性如何等。

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

话虽如此,一般的方法可能是做这样的事情:

50 多个重叠的专业化表将是编写查询的噩梦。我会尝试提出 1 个主要的通用表,也许还有 5 个左右的其他通用表,您可能会在其中稍微了解一下“单表继承”(您可能有几列不适用于每种类型,但包括在内)您涵盖了尽可能多的类型的尽可能多的列)。从那里用类似 EAV 的方法覆盖剩余的列。

于 2010-04-12T18:14:41.580 回答