【问题标题】:Join Table vs Foreign Key/Ref连接表与外键/参考
【发布时间】:2014-07-14 14:00:17
【问题描述】:

假设我有两个表,它们具有一对多的关系。最好有一个存储关系的连接表,还是在这些表之一中发出外键?看看这两种情况:

Situation A:
Table 1: CreditCard
Table 2: Person

在我看来,将 creditCard_id 作为 Person 表的一部分很有意义

Situation B:
Table 1: Order
Table 2: Person

这次我想我会把order_id和person_id放在一个Join表里?

我在上面犯了错误吗?是否有标准/更好的方法来确定这一点?

【问题讨论】:

  • 这些例子不是一对一的关系。一个人可以拥有不止一张信用卡。而且一个人可以有多个订单
  • 是的,你说得对,非常糟糕的例子。将我的 Q 修改为 1 到很多,因为问题仍然相同。谢谢。
  • 一个“连接表”也会有一个外键。

标签: sql database


【解决方案1】:

对于 1 to Many 关系,人们通常将外键放入较重的表或“Many”表中。 因此,在您的示例中,都使用 CreditCard 和 Order 表,这样做您将删除重复数据。

想象一下你哪个更好:

  • FK 转到“Many”表
    餐桌人:
    身份证名称
    1个
    2 乙

    餐桌信用卡:
    ID PEOPLE_ID
    1 1
    2 1

  • FK 转到“1”表:
    餐桌人:
    ID NAME CreditCard_ID
    1 A 1
    1 A 2
    2 B 3

    餐桌信用卡:
    身份证
    1
    2
    3

注意:在第二个示例中查看 ID 和名称如何重复(ID=1,NAME=A),如果您将 FK 放在错误的表中,则会发生这种情况。

【讨论】:

  • 嗨,谢谢。那么,您是不是建议不要使用 Join 表?
  • 一点也不,如果你的意思是加入表是创建一个保存两个 FK 的表。这是多对多关系的正确选择。
【解决方案2】:

我会做三张桌子;一个包含所有信息(姓名、地址等)的人员表,一个包含所有信息(到期日期、安全号码?等)的信用卡表,然后另一个表将它们与 PersonID 和 CreditCardID 连接起来。但是我知道什么,我还在上学,所以请等待其他人回答您。

【讨论】:

  • 还在上学可能意味着你还没有养成任何坏习惯。话虽如此,您正在描述多对多关系。仅当一个人可以拥有多个卡时才有效,这可能是真的,如果一张卡可以拥有多个人,这可能不是真的。
猜你喜欢
  • 1970-01-01
  • 2022-01-24
  • 2012-11-30
  • 1970-01-01
  • 2018-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多