定義域制約とデータ型(domain constraint / data type)

分類
テクノロジ系 データベース
出る試験
基本情報応用情報
重要度
★★★☆☆

その列に入れてよい値の範囲を決めておく制約。型、長さ、値の一覧、空にできるかを宣言で縛る。

もう少し詳しい説明

制約の種類

データベースでは、正しくない値が入らないように宣言で縛ります。 試験では次の4つが並びます。

制約縛るもの例
定義域制約その列に入れてよい値の範囲区分は1か2だけ
一意性制約重複を許さない社員番号は重複しない
参照制約別の表に存在する値だけを許す顧客コードは顧客表にあるものだけ
検査制約条件式を満たす値だけを許す数量は1以上

定義域制約と検査制約は、重なる部分があります。 値の範囲を条件式で書くと、検査制約の形になります。

定義域制約で決めること

決めること書き方の例
データ型CHAR、VARCHAR、INTEGER、DATE、DECIMAL
長さ・桁数CHAR(8)、DECIMAL(8,2)
空にできるかNOT NULL
入れてよい値の一覧CHECK (区分 IN (1, 2))
範囲CHECK (数量 >= 1)
入れなかったときの値DEFAULT 0

データ型の選び分け

型入るもの気を付けるところ
CHAR(n)固定長の文字列足りない分は空白で埋まる
VARCHAR(n)可変長の文字列入れた分だけの長さになる
INTEGER整数小数は入らない
DECIMAL(m,n)桁数を決めた数金額に向く。誤差が出ない
浮動小数点数小数誤差が出る。金額には向かない
DATE / TIMESTAMP日付/日時文字列で持つと、比較や並べ替えで困る

コードを数値型で持つと、先頭の0が消えます。 「0001」という受講者コードを整数型にすると「1」になります。コードは文字列型で持つのが基本です。

日付を文字列で持つと、計算ができません。 日付の差を出す、月末を求める、といった処理が書けなくなります。

NULLを許すかどうか

許す許さない(NOT NULL)
空のまま登録できるかできるできない
集計での扱い数に入らない—
比較= NULL では判定できない(IS NULL を使う)—

NULLは「値が無い」という状態で、0や空文字とは別です。

書き方意味
NULL値が入っていない
0数の0が入っている
空文字(”)長さ0の文字列が入っている

空欄が出る設計そのものを見直すほうが先です。 一部の種類にしか当てはまらない列は、サブタイプに移すと空欄がなくなります。

区分属性に付ける

スーパータイプとサブタイプに分けた表では、区分の列に入れてよい値を決めます。

区分 CHAR(1) NOT NULL
  CHECK (区分 IN ('1', '2'))

この宣言が無いと、想定していない値が入ります。 「3」が入った行は、どちらのサブタイプにも対応しない状態になります。

プログラム側で確かめるのとの違い

確かめる場所効き目
プログラムその処理を通ったときだけ効く
データベースの宣言どの経路から入れても効く

宣言で縛ると、別の処理や手作業での登録にも効きます。 データを入れる経路が複数あるとき、ここが分かれ目になります。

一方で、

宣言で縛る難しさ中身
変えるときに手間がかかる既に入っているデータが条件に合わないと、宣言を足せない
画面に出す知らせが作りにくい利用者に分かる言葉にするには、プログラム側でも確かめる必要がある

両方で確かめる形が普通です。 宣言は最後の守り、プログラムは利用者への知らせ、という役割分担になります。

試験ではこう出る

科目A(旧・午前)では、制約の名前と中身の対応が問われます。値の範囲が定義域制約、別の表に存在する値だけが参照制約です。

NULLの扱いも出ます。集計で数に入らない、= NULL では判定できない、という部分です。

午後や応用情報(データベース)では、CREATE TABLE の空欄に書く形で出ます。CHECK句の中身や、NOT NULLを書くかどうかです。

関連する用語

主キー
1行を1つに決める制約。重複と空値を許さない
外部キー
別の表に存在する値だけを許す制約
スーパータイプとサブタイプ
区分属性に入れてよい値を、この制約で決める
正規化
表の形を整える整理。制約は値の側を整える

ミニクイズ

定義域制約の例として、最も適切なものはどれか。

正解は 4番:区分の列には1または2だけを入れられるようにする

定義域制約は、その列に入れてよい値の範囲を決める制約です。区分の列を1と2だけに限るのはこれにあたります。他の表に存在する値だけを許すのは参照制約、同じ値が重複しないようにするのは一意性制約です。両方そろって確定させるのはトランザクションの性質で、列の値の範囲とは別の仕組みです。

間違えた用語の復習リストを見る →

この分野をまとめて解く → データベースのミニテスト(全35問)

最終更新:2026-11-09