【问题标题】:Is it a good practise to have circular reference in two DB tables在两个数据库表中进行循环引用是一种好习惯吗
【发布时间】:2011-05-20 20:36:31
【问题描述】:

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

将 B_id 作为表 A 中的外键并将 A_id 作为表 B 中的外键是否被认为是一种好习惯。这将允许我们在表中建立多对多关系。

另一种方法是使用仅包含两列 A_id 和 B_id 的第三个桥接表。

你认为哪个是好的做法?

【问题讨论】:

  • 多对多关系在我们的场景中并不常见,但需要得到支持。这就是为什么我们不确定桥接表对于可能很少存在的场景是否会过度杀伤

标签: sql sql-server database database-design


【解决方案1】:

我认为桥接表是实现两个表之间多对多关系的理想选择。在表之间进行循环引用并不是一个好习惯。

【讨论】:

    【解决方案2】:

    考虑以下场景

    TableA  TableB
    A       1
    B       2
    

    如果您想将其交叉链接,在不创建第三个表的情况下至少需要复制两个表之一中的每一行。我怀疑您会发现许多 DBA 愿意为他们的表建模。

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

    第三张桥牌桌确实是您唯一的好选择。

    【讨论】:

      【解决方案3】:

      这取决于A和B之间的关系,是一对一、一对多还是多对多。不过,一般来说,循环引用是不好的,因为它们增加了您为使两个表保持同步而必须做的维护工作量。

      【讨论】:

      • 感谢您的回答。大多数记录将具有一对多的关系。但在少数情况下,可能存在多对多关系并需要支持。
      【解决方案4】:

      正如 wizzardz 提到的,尤其是 DBMS,我会尽量避免循环引用。

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 2018-11-17
          • 2014-11-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多