4

我意识到这些类型问题的答案通常是“视情况而定”,但我仍然想知道普遍的共识可能是什么。

我正在处理多个实体,例如

  1. 公司
  2. 慈善机构
  3. 审计师
  4. 盘点员

等等等等……

其中都有联系信息,如电子邮件、电话和地址。

我想存储联系信息的两种设计方法是

方法1)在联系表与公司、慈善机构、审计师和股票持有人之间创建角色表。

  • dbo.Company -> dbo.CompanyAddress <- dbo.Address
  • dbo.Company -> dbo.Companytelephone <- dbo.telephone
  • dbo.Company -> dbo.Companyaddress <- dbo.email

  • dbo.Auditor-> dbo.AuditorAddress <- dbo.Address

  • dbo.Auditor-> dbo.Auditortelephone <- dbo.telephone
  • dbo.Auditor-> dbo.Auditoraddress <- dbo.email

优点,数据库中只需要一个地址,电话和电子邮件表,并且每种实体类型的所有电话号码,地址和电子邮件都存储在一个地方缺点是它创建了很多关联表

方法 2) 为每个公司、慈善机构、审计师和股票持有人创建单独的联系表

  • dbo.Company -> dbo.CompanyContactAddress
  • dbo.Company -> dbo.CompanyContacttelephone
  • dbo.Company -> dbo.CompanyContactaddress

  • dbo.Auditor -> dbo.AuditorContactAddress

  • dbo.Auditor -> dbo.AuditorContacttelephone
  • dbo.Auditor -> dbo.AuditorContactaddress

这样做的优点是更易于实施和维护 缺点是联系人详细信息存储在数据库中的多个位置。

如果有人有任何其他想法,将不胜感激。

非常感谢

4

3 回答 3

1

当您说“这取决于”时,您是正确的。这取决于您的数据将用于 OLTP,您将查看规范化设计,以及您希望使用与其他数据组件内联的联系信息对数据进行非规范化的报告系统。

在规范化的数据库中,规范化的水平也可以争论。有些人会说要像在第一个场景中那样拥有详细的联系信息。我喜欢走“路中间”,我会将所有联系信息放在一张表中,其中包括地址、电话和电子邮件。

Contact
ID, Address, Address2, City, State, Zip, Phone, Email

然后用单独的表创建关系

CompanyContact
ID, CompanyID, ContactID

这也可以集成到公司表中,只需在公司表中添加一个ContactID并避免单独的关系和连接。

您还可以使用ContactTypes.

ContactType 
ID, ContactType
1, Company
2, Charity
3, Auditor
....

然后您可以在CompanyContact表中指定它并消除对关系的需要。尽管它适合每种类型 1 个联系人的场景,但它并没有留下增长空间。

于 2010-09-03T13:26:23.133 回答
0

我更喜欢你的方法2,但它似乎仍然太多工作。为什么不只是有一个电话号码、地址等......存储所有地址、电话号码等的表格,然后从公司、审计员等处引用这些......?我可能会这样做。

于 2010-09-03T13:23:09.847 回答
0

您可以对所有使用单个表并使用如下数据类型。 替代文字

于 2010-09-03T13:23:50.667 回答