我有两张桌子,文章和评论。评论架构如下:
CREATE TABLE comments (
id SERIAL PRIMARY KEY,
in_response_to INTEGER REFERENCES comments(id),
article_id INTEGER NOT NULL REFERENCES articles(id),
// etc
);
我想创建一个限制,说明:回复旧评论的新评论必须分享旧评论的article_id
。
我如何在SQL中表达这个约束?
答案 0 :(得分:4)
使用多列外键约束:
CREATE TABLE comments (
id SERIAL PRIMARY KEY,
in_response_to INTEGER ,
article_id INTEGER NOT NULL REFERENCES articles(id),
CONSTRAINT xx UNIQUE( id, article_id ),
CONSTRAINT response_must_have_the_same_article_id
FOREIGN KEY ( in_response_to, article_id )
REFERENCES comments( id, article_id )
);