我有以下数据库:
CREATE TABLE ContentNodes
(
Id UNIQUEIDENTIFIER NOT NULL,
Revision INT IDENTITY(1,1) NOT NULL,
ParentId UNIQUEIDENTIFIER NULL
PRIMARY KEY (Id, Revision)
)
如何限制ParentId仅包含Id列中的值。试图让ParentId成为外键给我:
PRINT 'FK_ContentNodes_ParentId_ContentNodes';
ALTER TABLE ContentNodes
ADD CONSTRAINT FK_ContentNodes_ParentId_ContentNodes FOREIGN KEY (ParentId) REFERENCES ContentNodes(Id);
GO
错误:
引用的表中没有主键或候选键 'ContentNodes'匹配 在外国引用列列表 键 'FK_ContentNodes_ParentId_ContentNodes'。
答案 0 :(得分:4)
由于(Id, Revision)
上有复合主键ContentNodes
,因此您必须在外键关系中使用两列。
您不能仅引用主键的部分内容 - 根本无法完成。
你必须在你的表中引入一个代理主键,这只是一个简单的INT IDENTITY
然后你可以自引用那个单独的PK列,或者你可以(如果你的数据模型中可能的话)放入要引用的那一列上的UNIQUE INDEX
:
CREATE UNIQUE NONCLUSTERED INDEX UIX_ID
ON ContentNodes(Id)
在该列上有UNIQUE INDEX
然后后,您可以将其用作FK参考。