sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLの他の外部キーを参照する外部キー

    外部キー制約は、参照されている列が別の列自体を参照しているかどうかを気にしません。ただし、参照される列は必須 一意であること。それがエラーメッセージからわかることです(非常に明確です)。

    不足しているのは、外部キーです。制約は複数の列に基づくことができます 。これは機能するはずです:

    FOREIGN KEY (num, user_id, assignment_id) REFERENCES submission
    

    交換:

    FOREIGN KEY (num) REFERENCES submission(num),
    FOREIGN KEY (user_id) REFERENCES submission(user_id),
    FOREIGN KEY (assignment_id) REFERENCES submission(assignment_id)

    構文の短い形式(REFERENCES submission )デフォルトである主キーを参照しているため、可能です。

    さらに、単純化することができます:make submission.num sinlge-column主キー、冗長列user_idを削除します およびassignment_id correctionから fk制約を(num)だけに減らします -@Timの回答 で説明されているように 。

    複数列のfk制約がある限り、NOT NULLを検討してください。 参照する各列の制約(@joopによるコメント付き)。それ以外の場合、参照列の1つ以上のNULL値を使用すると、デフォルトのMATCH SIMPLEを使用してfk制約をエスケープできます。 行動。これは意図されている場合と意図されていない場合があり、通常は ではありません。
    または、MATCH FULLを検討してください 複数列のfk制約の場合、すべての場合にのみ許可します。 参照列がNULLです。詳細:



    1. Ubuntu9.10でColdfusion9をMySql5に接続する

    2. 既存のテーブルに動的列を追加する方法

    3. DelphiのMySQLのRand()関数の構文エラー

    4. SQLServerのPRINTステートメントの概要