【问题标题】:link two database tables链接两个数据库表
【发布时间】:2012-06-14 12:49:13
【问题描述】:

一个非常快速的问题。是否有一个主要功能是持有两个外键的表的术语?例如,如果我有两个表,user 和 group,那么包含 user_id 和 group_id 的“membership”表是否有官方术语?

【问题讨论】:

  • 没有官方术语 - 交叉点、交叉引用 (xref)、链接、地图等。所有这些都是同义词...... 2009 年或 2010 年有一个关于此的 SO 问题。
  • 谢谢,我想也许一个官方术语会让我的表名更容易阅读。

标签: sql database


【解决方案1】:

这是一个支持多对多关系的交集表。

【讨论】:

  • 您能否将表命名为 user_group_intersection?
  • 我通常不会在名称中包含交集。像 user_group 这样的东西会很好。甚至是用户分组,具体取决于您的数据库命名约定
  • 刚刚注意到你打败了我,我应该在绘制 ERD 之前发布一个快速答案哈哈
  • 我不需要 ERD :) 我认为这个概念非常普遍且易于理解。
  • 就命名约定而言,我绝对发现在该表作为交集表的表上使用 2 个名称是最有用的。它使事情变得简单。有些人喜欢在您的情况下使用像 UserGrouping 这样的名称或成员资格 - 但我觉得这些命名约定会掩盖底层架构并且是不必要的。
【解决方案2】:

解决多对多的链接/交叉表。例如,如果一辆汽车可以有多个司机,而一个司机可以有多个汽车,您将使用链接表来解决多对多关系。我在 OmniGraffle 中画了一个示例 ERD 作为说明:

【讨论】:

  • 名称 table1_table2 可能会出现几个问题,尤其是当组成复合词的表名本身就有意义时。我更喜欢使用外部参照或链接之类的名称来消除歧义。这就是我的问题的重点。应该更好地说明这一点。
  • 是的,您当然需要选择适合您的约定。我展示了我最常看到的标准约定,但我肯定也看到过其他的。
【解决方案3】:

正如 Stefan 已经回答的那样:这种情况有链接/插入表。他们将映射多对多关系,因为数据库中没有其他可能性。您只需创建一个表“UserGroup”和两列用于特定 id 的主键和外键。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-14
    • 1970-01-01
    相关资源
    最近更新 更多