MySQL的多个外键(MySQL multiple foreign keys)

2019-09-27 14:23发布

我是新来建立关系型数据库。

我想在MySQL中,用户表和公司表中创建两个表。 双方应该能够具有与其相关的多个电话号码,所以我创建了一个电话表,并希望有来自公司PHONE一个一对多的关系,从用户到手机。

目前似乎只有两个选择什么,我试图做的:

  1. 请PHONE两个外键,一个引用的公司,一个引用用户。 他们既会默认为空并且每个都在电话中创建一个新行的时候,我只会填补了一个我需要的。

  2. 有两个不同的表,USER_PHONE和COMPANY_PHONE。

无论选择似乎最适合于我。 选项1似乎哈克,容易出现冗余的问题。 方案二似乎很重复和不必要的。 我倾向于认为,选择2是做事情的“官方”的方式(开始不知道这是为什么,我听到关于MySQL负面的东西)。

任何人? 谢谢,

-Matt

Answer 1:

我不喜欢提出了如下设计(就像你):

首先,我们将有三个表

USER -- UserId, other fields
COMPANY -- CompanyId, other fields
PHONE -- PhoneId, PhoneNumber

然后有两个表用于存储的关系

COMPANY_PHONE -- CompanyId, PhoneId
USER_PHONE -- UserId, PhoneId


Answer 2:

有两个不同的表,电话号码引起了一些问题。

  • 你有一个以上的地方去寻找一个电话号码。
  • 如果一个人,一个公司共用一个电话号码,该电话号码的变化,你可能会忘记所有的表进行更新。
  • 它违反了正交设计的原则 ,这意味着宽松“不要有其表的含义重叠”。

相反,使用超/子模式 。 (链接的答案包括例如SQL执行模式)这种模式的认识到,用户和公司都没有完全一样的,但他们不是完全不同。



文章来源: MySQL multiple foreign keys