我是新来建立关系型数据库。
我想在MySQL中,用户表和公司表中创建两个表。 双方应该能够具有与其相关的多个电话号码,所以我创建了一个电话表,并希望有来自公司PHONE一个一对多的关系,从用户到手机。
目前似乎只有两个选择什么,我试图做的:
请PHONE两个外键,一个引用的公司,一个引用用户。 他们既会默认为空并且每个都在电话中创建一个新行的时候,我只会填补了一个我需要的。
有两个不同的表,USER_PHONE和COMPANY_PHONE。
无论选择似乎最适合于我。 选项1似乎哈克,容易出现冗余的问题。 方案二似乎很重复和不必要的。 我倾向于认为,选择2是做事情的“官方”的方式(开始不知道这是为什么,我听到关于MySQL负面的东西)。
任何人? 谢谢,
-Matt
我不喜欢提出了如下设计(就像你):
首先,我们将有三个表
USER -- UserId, other fields
COMPANY -- CompanyId, other fields
PHONE -- PhoneId, PhoneNumber
然后有两个表用于存储的关系
COMPANY_PHONE -- CompanyId, PhoneId
USER_PHONE -- UserId, PhoneId
有两个不同的表,电话号码引起了一些问题。
- 你有一个以上的地方去寻找一个电话号码。
- 如果一个人,一个公司共用一个电话号码,该电话号码的变化,你可能会忘记所有的表进行更新。
- 它违反了正交设计的原则 ,这意味着宽松“不要有其表的含义重叠”。
相反,使用超/子模式 。 (链接的答案包括例如SQL执行模式)这种模式的认识到,用户和公司都没有完全一样的,但他们不是完全不同。