数据库设计中的循环关系

问题描述 投票:2回答:2

我有一个包含4个表的数据库(还有更多,但只有4个导致问题)。规则是:模型具有1到多个任务。任务具有一对多集。 SuperSet具有一对多集合,而Model具有一对多SuperSet。 SuperSet基本上只是一组集合。该设计导致了一个循环外观依赖图,如下所示:

Models <--------------------------- SuperSets
   ^                                    ^
   |                                    |
   |                                    |
Tasks  <---------------------------- Sets

我读过这个http://www.codeproject.com/Articles/38655/Prevent-Circular-References-in-Database-Design,但是我无法摆脱任何表格,第二个例子是与我不同的情况。我已经读过,循环关系是不可取的,但我真的没有看到任何解决这个问题的方法。这甚至是一个问题,如果是这样,我该如何解决?请帮我!

database-design
2个回答
6
投票

如前所述,您的模型中没有循环引用。箭头不会围成一圈。

也许你担心Sets可以通过两个不同的父母到达它的祖父母Models。这是一个合理的问题,可以通过确保Models的主键是其他三个表的主键的一部分来解决。

使用外键,这可以确保Sets中的每一行都属于一个模型。

所以设计如下:

  • Model表有ModelId的主键。
  • Tasks表有ModelId的主键和其他东西,比如TaskNumberModelId也是Models的外键。
  • SuperSets表有ModelId的主键和其他东西,比如SuperSetNumberModelId也是Models的外键。
  • SetsModelIdTaskNumberSuperSetNumber的主键。它的外键是TasksSuperSets

在此设计中,因为单列Sets.ModelId是两个外键的一部分,所以强制执行数据完整性。


6
投票

你的设计不是循环的。

在顶层有Models有2张儿童桌TasksSupersets。然后是最低级别的Sets。没有级别返回到更高级别的表。

这很好,不会造成任何问题。

© www.soinside.com 2019 - 2024. All rights reserved.