2017-07-16 8 views
2

私は2つのテーブル、記事、コメントを持っています。次のようにコメントスキーマは次のとおりです。外部キーによって同じ外部キーが参照される強制的な行

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で表現できますか?

答えて

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) 
); 
+0

ありがとうございます!参照のために、 'CONSTRAINT xx UNIQUE(id、article_id)'という制約が必要です。そうでなければ、Postgresは '参照されたテーブルの" comments " –

関連する問題