我是设置关系数据库的新手。
我正在尝试在MySQL中创建两个表,一个USER表和一个COMPANY表。两者都应该能够有多个与之相关联的电话号码,因此我创建了一个PHONE表,并希望从COMPANY到PHONE以及从USER到PHONE都有一对多的关系。
我想要做的事情似乎只有两个选择:
在PHONE中保留两个外键,一个引用COMPANY,另一个引用USER。它们都默认为NULL,每个都在PHONE中创建一个新行,我只会填写我需要的那个。
有两个不同的表,USER_PHONE和COMPANY_PHONE。
这两种选择对我来说都不是最佳选择。选项1似乎很容易出现冗余问题。选项二似乎非常重复且不必要。我倾向于认为选项2是“官方”的做事方式(开始怀疑这是否是我听到有关MySQL的负面信息的原因)。
任何?谢谢,
-Matt
答案 0 :(得分:2)
我想建议以下设计(很像你的设计):
首先,我们将有三个表
USER -- UserId, other fields
COMPANY -- CompanyId, other fields
PHONE -- PhoneId, PhoneNumber
然后有两个用于存储关系的表
COMPANY_PHONE -- CompanyId, PhoneId
USER_PHONE -- UserId, PhoneId
答案 1 :(得分:1)
有两个不同的电话号码表会引发一些问题。
相反,请使用supertype/subtype schema。 (链接的答案包括用于实现架构的示例SQL。)这种架构认识到用户和公司并不完全相同,但它们并没有完全不同。