如何避免多个表格表关系M:M?

时间:2012-06-06 05:20:42

标签: database-design

如何避免多个表格表关系M:M?

查看下一个模型

enter image description here

从每个多项选择可以看出,我创建了几个表,我一直都很好,但现在我有很多情况会发生这种情况。有一个解决方案,而不必创建那么多的表?

注意:显然我们必须记住,解决方案不会使将来的查询复杂化,选择,排序和查询报告时混合的多个表

1 个答案:

答案 0 :(得分:1)

如果您的优先级是避免链接表的扩散,您可以使用继承(也就是类别,子类,泛化层次结构):

enter image description here

无论Item个子实体有多少,您始终只需要一个链接表(PersonItem)。

不幸的是,今天的DBMS通常不直接支持继承,因此您必须使用“{3}}中的”一个表中的所有类“或”每个表的类“手动表示它(”每个表的具体类别“仍然会扩大链接表。”这会增加某些情况下的复杂性,因此如果您的优先级是保持查询简单,那么您可能最好坚持使用当前设计(尽管这取决于您打算运行的查询类型 - 有些实际上可能更简单的继承)

顺便说一句,上面的模型不会让不同的HobbyThing共享相同的Id。我猜这对你来说并不重要,但如果是的话,这是没有继承的模型的参数(你需要在Item中包含类型的PK)。