【发布时间】:2011-12-20 00:10:10
【问题描述】:
我的数据库的一部分的设计方式我有三个表:
合作伙伴
- 合作伙伴 ID
XYZ 程序
- XYZProgramId
合作伙伴XYZ程序
- 合作伙伴 ID
- XYZProgramId
每个合作伙伴可以有零个或一个 XYZProgram。 PartnerXYZPrograms 表将合作伙伴与 XYZProgram 关联起来。所以我在 PartnerXYZPrograms 表中有以下关系/约束:
PartnerId 和 XYZProgramId 是外键; PartnerId 是唯一的,XYZProgramId 也是唯一的。
现在这似乎有味道。 6 年后我将回到 DB 设计,所以我不能立即说出这违反了哪些规范化规则,但我怀疑它正在破坏某些东西。 PartnerXYZPrograms 表很可能是多余的,XYZPrograms 表应该可能包含 PartnerId。
所以我的问题是,在设计表明数据库规范化可能搞砸的表时,气味是什么。
【问题讨论】:
-
您的示例是教科书的多对多设计 - 没有“气味”。
PartnerXYZPrograms中的两列都应该是主键... -
一个程序可以与多个合作伙伴相关吗?如果是这样,那么这就是 OMG Ponies 所说的标准多对多关系。
-
你确定它是多对多的设计吗?每个合作伙伴可以有零个或一个计划。
-
每个合作伙伴都有一个独特的计划或根本没有。
-
@OMG 小马。让我换一种说法。重构数据库设计时,哪些事情会引发危险信号?
标签: sql database-design data-modeling normalization