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