在两个DB表中使用循环引用是一种好习惯

时间:2010-12-06 08:46:40

标签: sql sql-server database database-design

在我们的数据库中,我们有两个表A,B,主键为A_id和B_id。

将表A和A_id中的B_id作为外键作为表B中的外键是一种良好的做法。这将允许我们在表中具有多对多关系。

另一种方法是让第三个桥表只包含两列A_id和B_id。

您认为哪一个是好习惯?

5 个答案:

答案 0 :(得分:7)

我认为桥表非常适合在两个表之间实现多对多的关系。在表之间有一个循环引用并不是一个好习惯。

答案 1 :(得分:3)

考虑以下方案

TableA  TableB
A       1
B       2

如果你想交换它,你至少需要做而不创建第三个表是复制两个表之一的每一行。我怀疑你会发现许多DBA愿意像这样建模他们的桌子。

TableA
A, 1  
A, 2   
B, 1
B, 2

TableB
1
2   

第三个桥牌桌真的是你唯一的好选择。

答案 2 :(得分:1)

它取决于A和B之间的关系,无论是一对一,一对多还是多对多。但是,一般情况下,循环引用很糟糕,因为它们增加了维护两个表同步所需的维护量。

答案 3 :(得分:1)

正如wizzardz提到的并且特别是DBMS,我会尽量避免使用循环引用。

它有可能给你带来很多问题。此外,如果其他人将使用该设计,你将不得不确定它的文档,因为他们可能最终绕圈试图解决它。

答案 4 :(得分:0)

您所谓的桥接表是连接依赖关系的规范化,并且它得到了良好理论的支持。您不应该在多个位置记录相同的事实。