61

有人告诉我,在数据模型中有循环是糟糕的设计。我之前听过几次,但没有太在意。例如,您有实体用户、项目、活动。项目归用户所有,因此我们在用户和项目之间存在一对多的关系。一个活动可以分配给一个用户,另一个从用户到活动的一对多关系。当然,一个项目是由一组活动定义的,另一种从项目到活动的一对多关系。这样就形成了一个循环。

我问这个人为什么它的设计不好,但他告诉我他也不知道,他也被告知,猴子学习是最好的。

我尝试搜索,但我想我没有使用正确的词,但是在我看来,这对于尝试设计数据库的人来说应该是基本的。

那么,任何人都可以向我指出一些关于 er/db 图中的循环/循环的有用信息,应该避免它们吗?

4

1 回答 1

63

本文的第 3 章( archive.org )对关系循环进行了很好的处理。

然而,一般来说,循环最常见的问题是冗余信息的一致性。

考虑父母有很多孩子的情况(来自论文);每个孩子都上一所学校。父母与学校之间存在第三种关系(“父母在学校有孩子”)。但是:您不想明确地为第三关系建模;它完全可以从其他两个推导出来。如果您确实明确捕获它,则需要确保循环始终保持一致。

因此,在这种情况下,您需要避免循环。然而:循环并不是普遍的坏事。再次以上面的例子为例,考虑对父母是学校州长的情况进行建模。这也会创建一个循环。在这种情况下,尽管它是有效的:不可能从其他两个关系中推导出“父母是学校的州长”关系。

总而言之:当一种关系完全可以从其他关系的组合中推导出来时,不要对循环进行建模。但是当它们不可推导时创建循环是可以的。

不过会推荐这篇论文;它给出的描述比我在这里给出的要好得多。

于 2011-11-14T21:08:02.180 回答