如何避免多个表表到关系M:M?
查看下一个模型
从每个多项选择可以看出,我创建了几个表,我一直工作得很好,但现在我有很多情况会发生这种情况。有没有无需创建那么多表的解决方案?
注意:显然我们必须牢记,该解决方案不会使将来的查询复杂化,选择、排序和查询在报告时混合的多个表
如何避免多个表表到关系M:M?
查看下一个模型
从每个多项选择可以看出,我创建了几个表,我一直工作得很好,但现在我有很多情况会发生这种情况。有没有无需创建那么多表的解决方案?
注意:显然我们必须牢记,该解决方案不会使将来的查询复杂化,选择、排序和查询在报告时混合的多个表
如果您的首要任务是避免链接表的扩散,您可以使用继承(又名类别、子类化、泛化层次结构):
无论有多少子实体Item
,您总是只需要一个链接表(PersonItem
)。
不幸的是,今天的 DBMS 通常不直接支持继承,因此您必须使用这 3 种策略的“一个表中的所有类”或“每个表的类”手动表示它(“每个表的具体类”仍然会激增链接表)。在某些情况下,这会增加复杂性,因此如果您的首要任务是保持查询简单,您可能最好坚持当前的设计(尽管这取决于您打算运行的查询类型 - 有些实际上可能通过继承更简单) .
顺便说一句,上面的模型不会让不同Hobby
和Thing
共享相同Id
。我猜这对你来说并不重要,但如果是这样,这是没有继承的模型的参数(或者你需要在Item
PK 中包含类型)。