SQL - 联系人、公司数据库设计

SQL - Contacts, Companies DB Design

我正在开发一个数据库来管理小型 company.The 的客户数据,客户是公司和机构(学校等),当然还有 people/contacts。会有更多的范围及时添加,但现在我正在寻找关于核心设计本身的任何输入,如果有任何我在这里遗漏的东西可能会导致问题。该图像不包括诸如以下项目的附加查找表;国家、电话打字机等我有点担心我过度规范化了它,从长远来看,这会使查询变得更加复杂。任何意见表示赞赏。

更新 - 2016 年 12 月 13 日

从那以后,我在我的结构中创建了一个名为实体的超类,它帮助我将所有 3 个合并为一个。我仍在处理其余部分,因为它今天已经成长了很多,所以再次感谢任何意见。

您需要电话、电子邮件和位置的桥接表吗?如果不需要多个站点、电子邮件或电话号码;您可以将属性添加到主要实体。

我看图表的第一印象是您过度规范化了数据(除非那是您的目标)。

考虑您创建的公司 <-> 电话phone 关系:-

创建这样的关系如下:

  • A Company can have one to many Telephone Numbers
  • A Telephone Number can belong to one to many Companies

评估一下;在您的结构中,一个 telephone 号码是否可能被不止一家公司共享? (现实世界表明它不会)

在此基础上进行扩展,我相信您可能已经开始学习这门课程的主要原因是允许同一个电话phone号码应用于一个或多个联系人以及一家公司?

就我个人而言,根据我的经验,我建议从开发角度来看,重复数据(电话phone 号码)可能更易于维护和管理。这将使您的数据结构和应用程序逻辑不那么复杂,并且应该减少搜索对系统的负担。

然而,这也意味着您最终可能会得到陈旧的数据,例如,如果您的所有联系人都使用公司 phone 号码并且公司号码已更新,那么所有联系人数据现在都会也需要更新。

从应用程序的角度来看,一种解决方法是显示公司编号和公司联系人,这样您就不需要重复数据。

这是这种关系的非规范化视图的示例:

您也可以将此应用于电子邮件地址,其中适用相同的概念。