検査制約

更新日:

用語解説

検査制約(CHECK制約)は、行の挿入又は更新時に、列値が指定した論理条件を満たすことをDBMSに検査させる整合性制約です。範囲、列間の大小関係、許可コードなどの業務規則を表へ持たせます。

■ 試験で押さえるポイント

  • CHECK (価格>=0)、CHECK (終了日>=開始日)、CHECK (状態 IN ('受付','完了'))のように、一列又は同じ行の複数列を使う条件を定義できます。

  • SQLのCHECKは条件がFALSEになる行を拒否し、TRUE又はUNKNOWNは通すのが基本です。NULLも禁止したい列にはCHECKだけでなくNOT NULLを指定します。

  • 他の行との重複防止はUNIQUE、別表に値が存在する保証はFOREIGN KEYを使います。CHECKの副問合せで表間・行間規則を表せないDBMSが多く、適切な制約を選びます。

  • アプリケーションの入力検査と違い、DB制約は複数の画面、バッチ、直接SQLなど全ての更新経路へ共通に適用され、データの最終防衛線になります。

■ 選択肢での判断ポイント

行内の範囲・条件ならCHECK、値必須ならNOT NULL、一意性ならUNIQUE、他表との対応ならFOREIGN KEYです。CHECKだけでNULLも必ず拒否するという選択肢に注意します。

例: CHECK (数量 BETWEEN 1 AND 99)だけでは数量NULLの評価がUNKNOWNとなり通る場合があります。必須かつ1~99にするには数量 INTEGER NOT NULL CHECK (数量 BETWEEN 1 AND 99)とします。

同じ分野の用語