1

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

查看下一个模型

在此处输入图像描述

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

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

4

1 回答 1

1

如果您的首要任务是避免链接表的扩散,您可以使用继承(又名类别、子类化、泛化层次结构):

在此处输入图像描述

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

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

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

于 2012-06-06T10:16:54.820 回答