你没有做错......很多。;)
在设计中没有实现您可以将一个人分配到多个公司的要求。为了包括这一点,请company_id
从联系人中删除并添加:
company_contacts (company_id PK/FK, contact_id PK/FK)
在contact_phones
中,我会将company_phones_id
列重命名为phone_id
,以与设计其余部分中使用的命名约定保持一致。
一家公司只能拥有一部电话和一个电子邮件,除了通过联系人之外,这是否正确?companies
如果不是,请检查和company_emails
/之间关系的基数指标company_phones
。如果它是正确的,你可以(我不是说应该)用公司中的和列替换company_emails
和company_phones
表。email_id
phone_id
除了这些问题之外,模式看起来还可以接受。
我可能会考虑进一步调整。为公司和联系人添加超类型(我们可以称它们为party)将允许您组合company_phones
andcontact_phones
表以及company_emails
andcontact_emails
表:
parties (id PK)
contacts (party_id PK/FK, name, surname)
companies (party_id PK/FK, company_name, ...)
party_phones (party_id PK/FK, phone_id PK/FK)
party_emails (party_id PK/FK, email_id PK/FK)
但是,在这种情况下,您无法对数据库中的公司和联系人电话/电子邮件强制执行不同的基数。