Postgresqlにテーブルがある場合:
create table Education (
id integer references Profiles(id),
finished YearValue not null,
started YearValue,
qualification text,
schoolName text,
studiedAt integer references Organizations(id),
primary key (id)
);
schoolName
またはstudiedAt
のいずれかがnullにならないように制約を作成する必要があります(そのうちの1つに情報が含まれている必要があります)。
どうすればよいですか?
チェック制約 を使用できます。例:.
constraint chk_education check (schoolName is not null or studiedAt is not null)
マニュアルから:
チェック制約は、最も一般的な制約タイプです。これにより、特定の列の値がブール(真理値)式を満たす必要があることを指定できます。
編集:Pithylessの解釈に準拠するための代替手段:
constraint chk_education check ((schoolName is not null and studiedAt is null) or (schoolName is null and studiedAt is not null))
更新および挿入時にトリガーを使用して、データをテーブルに許可する前にルールが守られていることを確認することもできます。通常、チェック制約がより複雑なロジックを必要とする場合は、このタイプのアプローチを使用します。