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