8 database-design relational-database specialization
我正在尝试建模专业化/泛化,倾向于使用类表继承(请参阅此答案).
但是,我的同事有维护和性能方面的问题,因为同一个表中会有很多(50+)个重叠的特化.他的建议是创建一个包含以下列的表:
这样,所有属性都保存在一个表中,并且可以通过特化列进行过滤.我不知道这个设计叫什么,但我担心它与EAV有某种关系......
我主要担心的是修改异常现象,但除此之外,我没有看到任何理由这是一个坏主意.一种解决方案明显优于另一种解决方案,还是我们应该选择一种并继续前进?
在设计表格时,我通常会考虑一件事:使用.
我将如何在那里写入数据以及如何查询数据.我将设计偏向于读取或写入,这对于性能,重复性等更重要.
你的问题并没有真正解释你的用法,所以我在这里的答案中的所有建议都是完整的推测.如果每天插入20k行,则设计将与每天插入5行不同.此外,如果您需要在任何类型的任何列上每天运行20k次搜索,或者如果您每天运行5次.这些会影响您设置表格的方式.
话虽如此,一般的方法可能是做这样的事情:
50多个重叠的特化表将是编写查询的噩梦.我会尝试提出一个主要的通用表,也许还有5个左右的其他通用表,你可能会稍微介绍一下"单表继承"(你可能有几个列不适用于每种类型,但包括在内)从尽可能多的类型中覆盖尽可能多的列.从那里覆盖剩余的列与EAV类似的方法.