数据库设计 - 需要指导

时间:2015-07-31 08:17:32

标签: database-design data-modeling database-diagram

我可能做错了,但现在好了。

我正在努力构建像非常基本的CRM这样的东西。我知道它们很多,但我想要实际学到一些东西。我试图为这个特定场景找到现成的例子,但我发现的只是理论和简单的例子,我不能使用。

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

要求:

  • 以前从未联系过一些公司。这就是为什么我创建了两个额外的表格contact_emailscompany_emailscontact_phonescompany_phones

  • 联系公司可能已指定联系人(人)。

  • 人可以有手机和电子邮件。

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

  • 一家公司可以有多人

图:

Diagram]

问题:

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

1 个答案:

答案 0 :(得分:0)

你没有做错......太多了。 ;)

您在设计中没有实现您可以将一个人分配到多个公司的要求。要包含此内容,请从联系人中删除company_id并添加:

company_contacts (company_id PK/FK, contact_id PK/FK)

contact_phones中,我会将company_phones_id列重命名为phone_id,以与设计其余部分中使用的命名约定保持一致。

除了通过联系人,公司只能拥有一部电话和电子邮件是否正确?如果没有,请检查companiescompany_emails / company_phones之间关系的基数指标。如果它是正确的,您可以(我不应该说)用公司中的company_emailscompany_phones列替换email_idphone_id表。

除了这些问题,架构看起来还可以接受。

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

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