忍者ブログ
データベースエンジニアのための実践ブログ。Oracle・PostgreSQL・MySQLなどの環境構築、実行計画の読み方やチューニングといった現場で役立つノウハウ、DB基礎知識までを発信しています。

【データベース設計の基礎】データ品質を守る「制約」の基本!列制約と表制約の種類・違いをわかりやすく解説

データベースを設計する上で欠かせないのが「制約(Constraint)」である。
制約とは、データベースに不適切なデータが勝手に入り込まないようにするための「番人」のような役割を持つルールだ。

今回は、データベースの基本概念である「列制約」と「表制約」の分類や、それぞれの種類について整理して見ていこう。


1. 対象による分類(列制約と表制約)

データベースの制約は、その適用範囲(対象)によって大きく2つに分類される。

分類概要・特徴
(1)列制約 1つの列(カラム)に対して定義する制約。
(例:ある特定の列にNULLを許可しないなど)
(2)表制約 複数の列の組み合わせ、または表全体に対して定義する制約。
(例:複数列の組み合わせで一意性を担保するなど)

2. 制約の具体的な種類

それぞれの分類に含まれる具体的な制約の種類を確認していこう。

(1)主な列制約

  • ① NOT NULL制約
    対象の列において、値が空(NULL)であることを禁止する制約。必ず何らかのデータが入力されている状態を強制する。
  • ② 一意制約(ユニーク制約)
    列の中で、すでに登録されている値と重複するデータ(同一の値)の入力を禁止する制約。
    ※なお、「複数の列の組」で一意性を定義する場合は、列制約ではなく後述の表制約として定義することになる。
  • ③ CHECK制約
    データの値に対して、特定の条件(「1〜100までの値のみ許可」「特定コードのみ許可」など)を定義し、条件を満たさないデータの登録を防ぐ制約。

(2)主な表制約

  • ① 参照整合性制約(外部キー制約)
    2つの表(テーブル)の間でデータの整合性を保つための制約。
    例えば「親子関係」のテーブル構造において、子テーブルにデータを登録する際、親テーブルに必ず対応する親データが存在することを強制する(「子だけに存在して親がいない」状態を防ぐ)。

3. まとめ

制約の分類代表的な種類主な目的
列制約 NOT NULL、一意制約、CHECK制約 1つの列単位でデータの品質や入力漏れを防ぐ
表制約 複合一意制約、参照整合性制約(外部キー)など 複数列の組み合わせや、テーブル間のデータの整合性を守る

データベースの設計や基本情報技術者試験などの資格試験でも、この「列制約と表制約の違い」「各制約の役割」は定番の重要ポイントである。しっかりと整理して押さえておこう!


PR