联系人的数据库设计

时间:2018-08-20 14:22:14

标签: sql sql-server database-design

所以我有3个主要实体。机场,客户和供应商。

每个人都会有多个与我相关的联系人。

所以他们以目前的方式设置它。

我有下表。

  • Airport
  • Customer
  • Vendor

然后我有一个Contacts表和一个外部参照,分别用于机场,客户,供应商...

我对此表示怀疑,并且正在考虑每个人的联系人表。

  • 机场和机场联系人
  • 客户和客户联系人
  • 供应商和供应商联系人

这两种设计都有缺点吗?

2 个答案:

答案 0 :(得分:0)

对我来说,决定性因素是实体与“真相的一个版本”的复制。如果单个现实世界中的人可以是多个其他实体中的一个联系人,则您不想将该单个人存储在多个联系人表中,因为这样一来,您必须在以下位置保留对其属性的任何更改:多个地方。

如果您在AirportContactsVendorContacts中都放置了相同的“乔·史密斯”,那么一天中您看到他的城市的地方是一个表中的“丹佛”,另一个表中的“波士顿” ,您认为哪一个是事实?

但是正如评论中提到的那样,如果一个联系人只能与其他三个实体之一(您称其为“类型”)相关联,那么将它们放在单独的表中是最有意义的。

还有第三种情况。说“乔史密斯”可以是机场和供应商的联系人。但是要说他有一些属性,例如性别和年龄,无论考虑的是哪种“类型”,这些属性都是相同的,但是可能有一些属性,例如电话号码或职位/职位,这取决于方式”。也许他以机场供应商的身份使用一部电话,而以供应商联系人的身份使用另一部电话。此外,也许有些属性适用于一种类型的联系人,而不适用于其他类型。在这些情况下,我将研究一种混合方法,在该方法中,您将公用属性保留在单个Contact表中,而“类型”特定的属性保留在它们自己与类型相关的表中。这些与类型相关的表将是具有FK的桥接表,这些FK返回到Contact表以及与它们相关的“类型”(供应商,客户或机场)的主要实体表。

答案 1 :(得分:0)

到目前为止我所拥有的...不要介意某些数据类型..只是放置了快速占位符.. enter image description here