PostgreSQL 外部キー制約の失敗: 一意制約の問題
この記事では、PostgreSQL 9.1 の一般的な外部キー制約エラー「エラー: 参照テーブル "bar" に指定されたキーに一致する一意の制約がありません」について説明します。 原因を分析し、解決策を提供いたします。
このシナリオには、「foo」、「bar」、「baz」の 3 つのテーブルが含まれます。 「foo」には主キー (「name」) があります。 「bar」は「foo_fk」を介して「foo」を参照し、独自の主キー (「pkey」) と (「foo_fk」、「name」) に対する一意の制約を持ちます。 「baz」は「bar_fk」を使用して「bar」を参照します。
このエラー メッセージは、「bar」の複数の行が「foo_fk」と「name」の同じ値を共有する可能性があるため、「baz」の外部キー制約を強制できないことを示します。 「baz」の外部キーは「bar」の対応する行を一意に識別できないため、これは参照整合性に違反します。
この問題は、「bar」の一意の制約に起因します。 「foo_fk」と「name」の組み合わせ全体では一意ですが、「bar」内の「name」が独立して一意であることは保証されません。 したがって、「bar」内の複数の行が同じ「name」で異なる「foo_fk」値で存在する可能性があります。
解決策:
これを解決するには、「bar」テーブルの「name」列に一意制約を追加します。これにより、各「name」値が一意であることが保証され、「baz」の外部キー制約が正しく機能できるようになります。 この一意制約を実装すると、外部キー関係が適切に適用され、エラーが防止され、意図したデータベース構造が確立されます。
以上がPostgreSQL の外部キー参照が「エラー: 参照テーブル 'bar' に指定されたキーに一致する一意の制約がありません」というメッセージで失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。