0

IndPregnancy フィールドで「はい」または「いいえ」のみを受け入れる制約を作成する必要があります。ただし、これはフィールド セックスが「F」の場合にのみ適用されます。

私はこれを持っています:

ALTER TABLE CONTROLPACIENT ADD CONSTRAINT controlpacient_c3
CHECK IndPregnancy IN (‘Yes’, ‘No’)

では、性別が別のテーブルにあるため、どうすれば別の制約を設定できますか。ありがとう。

4

1 に答える 1

1

それがorsexのみであり、それがいつであると仮定するとMFindPregnancyNULLsexM

CHECK( (sex = 'F' and indPregnancy IN ('Yes', 'No')) or
       (sex = 'M' and indPregnancy IS NULL ) );

が別のテーブルの列である場合sex、現実的には、このルールを強制する制約を作成することはできません。本当に決心した場合は、2 つのテーブルを結合し、それに制約を作成する高速更新可能なマテリアライズド ビューを作成できます。または、90% の解決策を受け入れる場合は、ControlPacientそのクエリに対してトリガーを作成しPacient、ルールに違反した場合に例外を発生させることができます。しかし、このようなトリガーは、多くの追加のシリアル化を実装しない限り、複数のセッションが同時にデータを変更することによって作成された問題を検出できません。これが、100% のソリューションではなく 90% のソリューションである理由です。

于 2013-10-13T22:27:46.727 に答える