【发布时间】:2019-06-05 20:58:43
【问题描述】:
我正在考虑为我的表(由两个字段,字段 A 和 B)组成一个复合键。但是,字段 B 依赖于字段 A。这个复合键会违反任何数据库设计原则吗?
【问题讨论】:
-
依赖?你的意思是 B 是以某种方式从 A 计算出来的,还是你的意思是别的?计算列可以用作键,仅供参考。
-
在这种情况下,代理主键(例如标识列)可能更可取。
-
这只是一个例子,但这里有一个和我类似的情况。假设您有一个汽车制造商列和一个汽车型号列。数据库看起来有以下列(汽车制造商、型号)。由于有许多汽车型号属于同一汽车制造商,因此必须将汽车制造商和型号结合起来才能有唯一的索引。型号取决于制造商,因此它符合我原帖的 A 和 B 模式。像这样结构的表(surrogate_prime、automaker、model)不合适,(在下一条评论中继续)
-
因为模型仍然依赖于汽车制造商,这不是主键。
-
如果models是唯一的,这意味着两个不同的品牌不能有相同的model,那么model应该是你的主键,而make应该是一个引用汽车制造商表的外键。
标签: sql composite-key