テーブルに制約を作成する必要があります。 制約は、文字列と論理の2つのフィールドの一意性を検証する必要があります。 ただし、追加の要件があります。 文字列と値がTRUEのエントリは1つのみ許可されます。 同時に、特定の文字列で複数のレコードが許可されますが、値はFALSEです。 たとえば、{"abc"、false}が複数ある場合もありますが、{"abc"、true}は1行のみです。
さて、このタスクの重要性は何ですか? これは、 PostgreSQLの柔軟性を利用した非常に良い例です。PostgreSQLには、部分インデックスのメカニズムが備わっています。 ソリューションはシンプルでエレガントです:
CREATE TABLE foo(bar TEXT 、bing BOOLEAN );
foobar(bar、bing)でのユニーク インデックス baz_indexの作成WHERE bing = 't' ;
foobarの値に 挿入 ( '1' 、 't' );
foobarの値に 挿入 ( '2' 、 't' );
foobarの値に 挿入 ( '1' 、 'f' );
foobarの値に 挿入 ( '1' 、 'f' );
foobarの値に 挿入 ( '1' 、 't' );
エラー:キー値の重複が一意制約「baz_index」に違反しています
独創的なものはすべてシンプルです。 それだけです!