【问题标题】:SQL Foreign Key RedundancySQL 外键冗余
【发布时间】:2013-07-20 07:21:49
【问题描述】:
这是关于外键冗余的问题
redundant foreign key?
一般:
表 C 中的 外键 引用 表 B
中的 主键
外键来自 表 C 引用 主键 来自 表 A
表 B 中的 外键 引用 表 A 中的 主键
由于 C 通过 B 连接到 A,因此 C -> A 的外键是否必要?
具体:3张桌子
供应商信息表A
供应商 ID - PK
人员联系信息(供应商)表 B
第 # 部分 - PK
收到日期 - PK
供应商 ID - FK
部分 Rprt 表 C
第 # 部分 - PK & FK
日期 - PK & FK
供应商 ID - FK
谢谢 - 也欢迎对所有表格提出修改建议
【问题讨论】:
标签:
sql
sql-server
optimization
foreign-keys
primary-key
【解决方案1】:
如果您假设一个人的供应商始终是零件所代表的供应商,那么从技术上讲,该密钥将是多余的。请记住,事情会随着时间而改变。据推测,供应商可能会合并,人们可能会更改与他们关联的供应商,并且与零件关联的供应商可能会发生变化。
但是,数据结构看起来没有正确规范化。我认为您会想要一个 person 表,其中仅包含有关此人的信息。我不明白零件和人之间的关系。
所以,我认为你应该重新设计你的数据结构。我建议您从您确定的实体开始——供应商、人员和零件。如有必要,然后为它们创建关联表。很有可能每个人都应该只有一个SupplierId,而每个部分都应该有一个SupplierId,这对关系进行建模。如果零件和人物之间存在关系,那么您也许可以通过零件中的PersonId 字段来满足这一点。