IndPregnancy フィールドで「はい」または「いいえ」のみを受け入れる制約を作成する必要があります。ただし、これはフィールド セックスが「F」の場合にのみ適用されます。
私はこれを持っています:
ALTER TABLE CONTROLPACIENT ADD CONSTRAINT controlpacient_c3
CHECK IndPregnancy IN (‘Yes’, ‘No’)
では、性別が別のテーブルにあるため、どうすれば別の制約を設定できますか。ありがとう。
IndPregnancy フィールドで「はい」または「いいえ」のみを受け入れる制約を作成する必要があります。ただし、これはフィールド セックスが「F」の場合にのみ適用されます。
私はこれを持っています:
ALTER TABLE CONTROLPACIENT ADD CONSTRAINT controlpacient_c3
CHECK IndPregnancy IN (‘Yes’, ‘No’)
では、性別が別のテーブルにあるため、どうすれば別の制約を設定できますか。ありがとう。
それがorsex
のみであり、それがいつであると仮定するとM
F
indPregnancy
NULL
sex
M
CHECK( (sex = 'F' and indPregnancy IN ('Yes', 'No')) or
(sex = 'M' and indPregnancy IS NULL ) );
が別のテーブルの列である場合sex
、現実的には、このルールを強制する制約を作成することはできません。本当に決心した場合は、2 つのテーブルを結合し、それに制約を作成する高速更新可能なマテリアライズド ビューを作成できます。または、90% の解決策を受け入れる場合は、ControlPacient
そのクエリに対してトリガーを作成しPacient
、ルールに違反した場合に例外を発生させることができます。しかし、このようなトリガーは、多くの追加のシリアル化を実装しない限り、複数のセッションが同時にデータを変更することによって作成された問題を検出できません。これが、100% のソリューションではなく 90% のソリューションである理由です。