首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL表规范化与非规范化

SQL表规范化与非规范化
EN

Stack Overflow用户
提问于 2013-01-17 04:26:38
回答 4查看 2.9K关注 0票数 4

我使用的是MS Server 2012。我有两张桌子,一张是医生的,另一张是外科中心的。每个表当前包含列,描述他们(医生和外科中心)应该如何接收报告(电子邮件、传真.)两个表中保存此数据的列是相同的。我正在考虑从每个表中提取传递方法列,并创建一个通用的传递方法表,但是我需要为每一行的医生和外科中心都提供外键。这很麻烦,因为分娩方法和医生之间有一对一的关系。同样的关系也存在于外科中心的桌子上。

问题:

  1. 有一个带有两个外键的表,其中一个永远是空的,这是很好的做法吗?
  2. 处理这类案件的最佳策略是什么。

我之所以想从医生和外科中心的表格中提取分娩方法的信息,是为了减少表格的整体大小。此外,这将更好地规范我的数据。我感谢所有的帮助和指导。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-01-17 05:57:53

您的关系从交付方法到dr/中心,而不是从dr/中心到交付方法。

如果您逆转了这种关系,您不仅不需要有一个可能未被处理的列的表,还可以共享多个drs和中心的交付方法。你说有1到1的关系,但如果没有一条商业规则阻止dr或中心拥有与任何其他dr或cent相同的交付方法,那么实际上您拥有的是多到1的关系(许多dr/中心可以有相同的交付方法),即使在实践中它是独一无二的。

票数 0
EN

Stack Overflow用户

发布于 2013-01-17 04:42:52

一个想法是有一个单一的DeliveryMethod表。此表中的每个记录都将有一个ID (可能是代理项--例如标识或序列)。然后,医生表将有一个DeliveryMethodID外键,同样,SurgeryCenter表将有一个DeliveryMethodID外键。

在典型的数据库设计中,您不需要两个相同的表。如果表大小成为一个问题,有多种方法来处理这个问题,包括将它变成一个partitioned table

票数 1
EN

Stack Overflow用户

发布于 2013-01-17 04:41:29

一种选择是有两个中间表将DeliveryMethod表的PKs链接到DoctorsSurgeryCenter表,因此,例如,DoctorDeliveryMethod有两列:Doctor.idDeliveryMethod.id

但是,这需要您连接三个表来获取每个表的方法。另一个方法是将DeliveryMethod.id链接到Doctor表中的一个列,称为DeliveryMethodID。无论哪种方式,你都得做簿记

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14372210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档