我有一个包含4个表的数据库(还有更多,但只有4个导致问题)。规则是:模型具有1到多个任务。任务具有一对多集。 SuperSet具有一对多集合,而Model具有一对多SuperSet。 SuperSet基本上只是一组集合。该设计导致了一个循环外观依赖图,如下所示:
Models <--------------------------- SuperSets
^ ^
| |
| |
Tasks <---------------------------- Sets
我读过这个http://www.codeproject.com/Articles/38655/Prevent-Circular-References-in-Database-Design,但是我无法摆脱任何表格,第二个例子是与我不同的情况。我已经读过,循环关系是不可取的,但我真的没有看到任何解决这个问题的方法。这甚至是一个问题,如果是这样,我该如何解决?请帮我!
如前所述,您的模型中没有循环引用。箭头不会围成一圈。
也许你担心Sets
可以通过两个不同的父母到达它的祖父母Models
。这是一个合理的问题,可以通过确保Models
的主键是其他三个表的主键的一部分来解决。
使用外键,这可以确保Sets
中的每一行都属于一个模型。
所以设计如下:
Model
表有ModelId
的主键。Tasks
表有ModelId
的主键和其他东西,比如TaskNumber
。 ModelId
也是Models
的外键。SuperSets
表有ModelId
的主键和其他东西,比如SuperSetNumber
。 ModelId
也是Models
的外键。Sets
有ModelId
,TaskNumber
和SuperSetNumber
的主键。它的外键是Tasks
和SuperSets
。在此设计中,因为单列Sets.ModelId
是两个外键的一部分,所以强制执行数据完整性。
你的设计不是循环的。
在顶层有Models
有2张儿童桌Tasks
和Supersets
。然后是最低级别的Sets
。没有级别返回到更高级别的表。
这很好,不会造成任何问题。