引用同一个表中的不同列

时间:2013-12-20 02:57:08

标签: sql-server

是否可以让表中的列引用同一个表中的不同列?这是我的情况:

我正在尝试在我的表中创建一个数据库来存储注释。我的部分专栏是CommentIDUserIDParentIDContent

CommentIDIDENTITY PRIMARY KEYUserID引用User表。 ParentID基本上将构成评论的层次结构。它应该引用CommentID。有没有办法引用CommentID或确保ParentID的值等于匹配的记录?

数据

Comment ID     ParentID     Content
-----------------------------------------
1              NULL         Love It!
2              1            That's a stupid comment.
3              2            No, you left the stupid comment.
4              1            Wow, much thanks!
5              4            Seriously?

我还有一个时间戳列,它将进一步对注释进行排序。我甚至不确定是否需要添加任何特殊键,我只是不想在路上遇到麻烦。谢谢!

1 个答案:

答案 0 :(得分:1)

是的,您可以在表中引用一个列,在同一个表中引用另一个列。在您的情况下,从ParentID到CommentID创建外键约束是完全可以的。

CREATE TABLE Comments (
   CommentID INT PRIMARY KEY,
   ParentID INT,
   Comment VARCHAR(MAX),
   FOREIGN KEY (ParentID) REFERENCES Comments(CommentID)
)

INSERT INTO Comments (CommentID, ParentID, Comment) VALUES (1, NULL, 'First Comment')

INSERT INTO Comments (CommentID, ParentID, Comment) VALUES (2, NULL, 'Second Comment')

INSERT INTO Comments (CommentID, ParentID, Comment) VALUES (3, 1, 'Sub Comment')

INSERT INTO Comments (CommentID, ParentID, Comment) VALUES (4, 3, 'Sub Sub Comment')

-- The following will fail with constraint violation
INSERT INTO Comments (CommentID, ParentID, Comment) VALUES (5, 10, 'Invalid Sub Comment 2')