在为数据库设计关系时,为什么要避免循环?

时间:2011-11-13 23:45:03

标签: database database-design loops data-modeling entity-relationship-model

有人告诉我,在数据模型中设置循环是不好的设计。我曾经多次听过这个,但没注意到。例如,您有实体User,Project,Activity。项目由用户拥有,因此我们拥有从用户到项目的一对多关系。可以将活动分配给单个用户,这是从用户到活动的另一个一对多关系。当然,项目由一组活动定义,这是从项目到活动的另一个一对多关系。这样就形成了一个循环。

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

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

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

1 个答案:

答案 0 :(得分:45)

this paper的第3章中,关系循环有一个非常好的处理方法。

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

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

所以在这种情况下你想要避免循环。但是:循环不是普遍的坏。再次考虑上面的例子,考虑对父母是学校的州长的案例进行建模。那也会创造一个循环。在这种情况下虽然它是有效的:但是不可能从其他两个关系中推导出“父母是学校的州长”关系。

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

虽然会推荐这篇论文,但它提供了比我在这里给出的更好的描述。

第h