Database design 数据库设计中的循环关系
我有一个包含4个表的数据库(还有更多的表,但只有4个表导致了问题)。规则是:一个模型有1到多个任务。一个任务有一对多个集合。超集有一对多集,模型有一对多超集。超集基本上只是一组集合的列表。该设计产生了一个圆形依赖关系图,如下所示:Database design 数据库设计中的循环关系,database-design,Database Design,我有一个包含4个表的数据库(还有更多的表,但只有4个表导致了问题)。规则是:一个模型有1到多个任务。一个任务有一对多个集合。超集有一对多集,模型有一对多超集。超集基本上只是一组集合的列表。该设计产生了一个圆形依赖关系图,如下所示: Models <--------------------------- SuperSets ^ ^ | |
Models <--------------------------- SuperSets
^ ^
| |
| |
Tasks <---------------------------- Sets
模型您的设计不是圆形的
顶层有模型
,有两个子表任务
和超集
。然后在最底层有集合
。所有级别都不会返回到更高级别的表
这很好,不会引起任何问题。如前所述,您的模型中没有循环引用。这些箭头不是绕着一圈的
也许你担心set
可以通过两个不同的父母接触到它的祖父母Models
。这是一个合理的问题,可以通过确保模型的主键是其他三个表的主键的一部分来解决
外键就位后,这将确保集合中的每一行只属于一个模型
因此,设计如下:
Model
表的主键为ModelId
Tasks
表有一个主键ModelId
和其他一些东西,比如TaskNumber
ModelId
也是Models
的外键
SuperSets
表有一个主键ModelId
,还有其他一些东西,比如说SuperSetNumber
ModelId
也是Models
的外键
Sets
的主键为ModelId
、TaskNumber
和SuperSetNumber
。它的外键可以是任务
和超集
在这种设计中,由于单列集合.ModelId
是两个外键的一部分,因此数据完整性得到加强。假设在示例图中放置了正确的方向箭头,我看不到任何循环。模型有任务和超集,任务有集,超集有集。根据我发布的链接,这种设计很糟糕。我想投票,看看共识是什么谢谢,我选择了这个作为接受的建议,以确保模型pk是其他三个表pk的一部分。