外键引用的强制行具有相同的不同外键

时间:2017-07-16 07:29:09

标签: sql postgresql

我有两张桌子,文章和评论。评论架构如下:

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中表达这个约束?

1 个答案:

答案 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 )
);