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

pgp*_*lla 52 database database-design loops data-modeling entity-relationship-model

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

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

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

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

sfi*_*nie 50

本文的第3章中,关系循环有一个非常好的处理方法.

但是,通常,循环最常见的问题是冗余信息的一致性.

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

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

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

不过会推荐这篇论文,它给出了比我在这里给出的更好的描述.

心连心.

  • @Erwin:如果你已经知道你应该在循环中保持警惕 - 正如你明确的那样 - 那么论文将告诉你什么新内容.然而OP特别说他被告知'循环是坏的'并且不知道为什么.本文提供了从第一原理解释情况的具体例子.因此,如果你从那里开始是合适的.如果你不是,那就不是. (3认同)