基本情報技術者 学習ページ|科目A・データベース

データベースを設計する

データベース設計では、管理したい対象とその関係を整理し、重複や更新時の矛盾が生じにくい表へ変換します。E-Rモデル、主キーと外部キー、第1〜第3正規形、参照制約を確認します。

E-Rモデル

E-Rモデルは、データとして管理する対象と、それらの関係をモデル化する方法です。管理対象をエンティティ、エンティティが持つ性質を属性、エンティティ同士の関連をリレーションシップとして整理します。

例えば、顧客と注文を別のエンティティとし、顧客が注文を行うという関係を表します。業務上の対象・属性・対象間の関係を整理してから表の構造へ落とし込むことが設計の基本です。

E-Rモデルではエンティティ・属性・関係を整理する。

主キーと外部キー

主キーは、表の各行を一意に識別するための属性または属性の組です。主キーには同じ値を重複して設定できず、NULLにもできません。

外部キーは、別の表などの候補キーを参照して表同士を関連付けるために使われます。例えば注文表の顧客IDを顧客表の顧客IDへ対応させます。外部キー自体には、別途一意性制約を付けない限り同じ値が複数行に現れることがあるため、主キーと同じ性質ではありません。

主キーは行を一意に識別し、外部キーは表同士を関連付ける。

第1・第2正規形

第1正規形では、一つのセルに繰返し項目や複数の値をまとめて持たせず、各属性値を単一の値として扱える表にします。

複数属性からなる候補キーを考えるとき、キーの一部だけで非キー属性が決まる関係を部分関数従属といいます。第1正規形の表から部分関数従属を取り除き、非キー属性が候補キー全体に完全関数従属するよう分解したものが第2正規形です。

第2正規形では候補キーの一部への部分関数従属を除く。

第3正規形

第2正規形の表でも、候補キーから非キー属性が決まり、さらにその非キー属性から別の非キー属性が決まることがあります。このように候補キーから非キー属性を経由して別の属性が決まる関係を推移関数従属といいます。

第3正規形は、第2正規形を満たした上で、候補キーからの推移関数従属を取り除いた形です。更新箇所の重複を減らし、更新・追加・削除に伴う不整合を起こしにくくすることが正規化の目的です。

第3正規形では候補キーからの推移関数従属を除く。

参照制約

参照制約は、外部キーによって参照されるデータの整合性を保つための制約です。外部キーにNULLを許す設計でNULLが設定されている場合を除き、外部キーの値は参照先の候補キーに存在する値でなければなりません。

そのため、参照されている親表の行を無条件に削除すると、子表から存在しない行を参照する状態になる可能性があります。削除を禁止する、関連行も削除するなど、DBMSで定めた参照動作によって整合性を維持します。

参照制約は外部キーと参照先データの整合性を保つ。

本番の形で解いてみる

科目Aの形: 四肢択一(表を読む)(このページのために作った問題)

次の受注明細表では、受注番号と商品番号の組が各行を一意に識別する。また、顧客IDは受注番号だけから決まり、顧客名は顧客IDだけから決まる。この表を第3正規形まで正規化するとき、最も適切な表の分割はどれか。

受注番号商品番号顧客ID顧客名数量
1001A01C10青木商店2
1001B03C10青木商店1
1002A01C20北川商事4
主な関数従属
受注番号 → 顧客ID
顧客ID → 顧客名
(受注番号, 商品番号) → 数量
  1. 受注(受注番号,顧客ID)、顧客(顧客ID,顧客名)、受注明細(受注番号,商品番号,数量)
  2. 受注(受注番号,顧客ID,顧客名)、受注明細(受注番号,商品番号,数量)
  3. 顧客(顧客ID,顧客名,商品番号)、受注明細(受注番号,商品番号,数量)
  4. 受注(受注番号,商品番号,顧客ID)、顧客(顧客ID,顧客名,数量)
答えと解説を見る

正解: 受注(受注番号,顧客ID)、顧客(顧客ID,顧客名)、受注明細(受注番号,商品番号,数量)

顧客IDは複合キーの一部である受注番号だけに依存するため、受注情報を明細から分離します。さらに顧客名は顧客IDに依存するので、顧客表を分離すると、受注、顧客、受注明細の三つになります。

まちがえやすい点: 顧客名を受注表に残すと、受注番号→顧客ID→顧客名という推移関数従属が残る。

科目Aの形: 四肢択一(このページのために作った問題)

主キーと外部キーについて、最も適切な記述はどれか。

  1. 主キーには同じ値を複数行に設定できるが、外部キーには同じ値を設定できない。
  2. 主キーは表の各行を一意に識別し、外部キーは別の表などの候補キーを参照して表同士を関連付ける。
  3. 外部キーは、その列だけで自分の表の全ての行を一意に識別しなければならない。
  4. 主キーの値にはNULLを設定できるが、外部キーにはNULLを設定できない。
答えと解説を見る

正解: 主キーは表の各行を一意に識別し、外部キーは別の表などの候補キーを参照して表同士を関連付ける。

主キーは表の各行を一意に識別するキーで、重複やNULLを許しません。外部キーは別の表などの候補キーを参照して関係を表し、別途一意性制約を付けなければ同じ値を複数行で持つこともあります。

まちがえやすい点: 外部キーは行を一意に識別するためのキーとは限らない。

科目Aの形: 四肢択一(このページのために作った問題)

顧客表の主キーを顧客IDとし、注文表の顧客IDを顧客表の顧客IDを参照する外部キーとする。注文表の顧客IDにはNULLを許さないものとする。このとき、参照制約によって防ぐ対象として最も適切なものはどれか。

  1. 顧客表に存在しない顧客IDを注文表へ登録すること
  2. 同じ顧客が複数の注文を行い、注文表に同じ顧客IDが複数回現れること
  3. 顧客表の異なる顧客に、それぞれ異なる顧客IDを設定すること
  4. 一つの注文行に、顧客IDとは別に注文番号を持たせること
答えと解説を見る

正解: 顧客表に存在しない顧客IDを注文表へ登録すること

参照制約では、外部キーの値が参照先に存在する値であることを要求します。したがって、顧客表に存在しない顧客IDを注文表に登録する状態を防ぎます。

まちがえやすい点: 同じ顧客が複数注文する場合、注文表の外部キーである顧客IDは重複してよい。

基本情報の学習ページ

ほかの学習ページの一覧と、2択の用語カード(750語)は、基本情報技術者のページにあります。

基本情報技術者のページへ →

このページの内容は、IPA「基本情報技術者試験 シラバス Ver.9.2」(2026年1月公表)と試験要綱Ver.5.6の範囲にもとづきます(2026年10月確認)。IPAは2027年度春ごろから新しい試験制度に移る予定です。