如何创建引用复合主键中一列的外键

时间:2011-03-16 10:20:41

标签: sql-server sql-server-2008 composite-primary-key

我有两个表Catalog和CatalogIndex

目录包含以下列

DN
PID
PURL
Desc

其中两列DN,PID是此表的复合主键的一部分。

CatalogIndex具有以下列

PID
PItem
PVal

PID和PItem是CatalogIndex表的复合主键的一部分。

我想在PID列上为CatalogIndex添加一个foriegn键,该列引用Catalog表中的PID。

我正在使用SQL Server 2008

谢谢

2 个答案:

答案 0 :(得分:7)

不能仅引用复合主键的一部分(复合PK的许多缺点之一 - 引用它们会非常混乱)。

你需要引用密钥,整个密钥以及密钥(所以请帮助你Codd :-))。

唯一的另一个选择是在你想引用的那些列上创建一个新的UNIQUE INDEX(如果它们确实是唯一的),然后使用该唯一索引来引用该列的子集。 / p>

答案 1 :(得分:0)

您可能需要一个更规范化的架构,其中一个单独的表在PID列上具有PK。您的请求是一种气味,表明数据库设计不完善。