0

我可能做错了,但它就在这里。

我正在尝试构建非常基本的 CRM 之类的东西。我知道它们有很多,但实际上我想学习一些东西。我试图为这个特定场景找到现成的例子,但我发现的只是理论和简单的例子,我无法使用。

我可以让这个图表更简单,但在这种情况下我会有空单元格,所以基本上我在循环中:)

要求:

  • 有些公司以前从未联系过。这就是为什么我创建了两个额外的表contact_emails, company_emails, contact_phones, company_phones

  • 被联系的公司可能已经指定了联系人(人)。

  • 人可以有电话和电子邮件。

  • 一个人可以分配到多个公司

  • 一家公司可以有多人

图表:

图表]

问题:

  • 我在正确的轨道上吗?
  • 可以改进什么以及如何改进?
4

1 回答 1

0

你没有做错......很多。;)

在设计中没有实现您可以将一个人分配到多个公司的要求。为了包括这一点,请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_emailscompany_phones表。email_idphone_id

除了这些问题之外,模式看起来还可以接受。

我可能会考虑进一步调整。为公司和联系人添加超类型(我们可以称它们为party)将允许您组合company_phonesandcontact_phones表以及company_emailsandcontact_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)

但是,在这种情况下,您无法对数据库中的公司和联系人电话/电子邮件强制执行不同的基数。

于 2015-07-31T21:18:04.403 回答