
今回のテーマは、関係データベースの正規化です。
関係データベースの正規化?

基本情報技術者試験や応用情報技術者試験で出題される「関係データベースの正規化」についての問題。聞きなれない言葉のため、難しく感じますが、正規化の動きを理解していれば、そこまで難しい問題ではありません。
本記事では、「関係データベースの正規化」について解説します。
スポンサーリンク
目次
関係データベースの正規化
関係データベースとは、データを表の形で管理するデータベースのことです。
次のように、関係データベースのテーブル(表)は、レコード(行)とカラム(列)によって形成されています。

関係データベースの正規化とは、データを取り扱いやすいようにデータベース設計することで、データの一貫性を維持し、効率的なデータアクセスを可能にするための手法です。

関係データベースのテーブルを正規化することで、データの冗長性と不具合が起こる機会を減らすことができます。
関係データベース正規化の手順
正規化には「第1正規形」~「第5正規形」、および「ボイスコッド正規形」などの種類がありますが、「第1正規形」~「第3正規形」までで、十分に正規化されたという考え方もあります。
情報処理試験では、主に「第1正規形」~「第3正規形」の内容が出題されるので、本記事でも「第1正規形」~「第3正規形」までの手順を紹介します。
正規化前
例えば、商品を販売するシステムで、次のような注文があるとします。
- 鈴木一郎:A商品を1つとB商品を2つ注文
- 佐藤次郎:C商品を1つ注文
- 田中三郎:D商品を2つ、E商品を1つ、F商品を1つ
この注文をそのまま表に挿入すると、次のように各行の長さがバラバラで、商品が繰り返されている状態になっています。

【第1正規形】繰り返しを整理
関係データベースは、レコード単位でデータを扱うため、正規化前のようなデータ(各レコードの長さがバラバラ)は、データベースのテーブルに格納できません。
まずは、テーブルに格納できるように、繰り返し項目のそれぞれを別レコードとして独立させ、各レコードの長さを整えます。(正規化前は、各レコードの長さがバラバラで商品が繰り返されている状態)
下記が「第1正規形」のテーブルです。背景色がついているレコードが、正規化前では繰り返し項目になっていました。


第1正規形では、繰り返し項目を別レコードとして独立させ、テーブルに格納できるように、データを整えます。
【第2正規形】部分関数従属している列を整理
第2正規形では、部分関数従属しているカラムを整理します。
例えば、第1正規形で作られたテーブルの主キーは、「注文番号」と「商品ID」です。
「注文番号」と「商品ID」が決まれば、レコードを一意に特定できますが、実は「注文番号」が決まるだけで「注文日」「ユーザID」「購入ユーザ名」は特定できます。このような状態を部分関数従属といいます。
第2正規形では、第1正規形のテーブルから、部分関数従属しているカラムを切り出します。
下記は、部分関数従属のイメージ例です。

- オレンジ枠:「注文番号」が決まれば一意に特定できる項目
- 緑枠:「商品ID」が決まれば一意に特定できる項目
第2正規形では、次のように部分関数従属しているカラムを別テーブルとして切り出します。

オレンジ枠で囲んだ部分を「注文テーブル」、緑枠で囲んだ部分を「商品テーブル」として切り出し、残りを「注文詳細テーブル」として3つのテーブルに分けています。
【第3正規形】関数従属している列を整理
第3正規形では、主キー以外で関数従属(推移的関数従属)しているカラムを整理します。
関数従属とは「○○が決まれば一意に特定できる項目」のことです。
第2正規形の「注文テーブル」は「注文番号」が主キーです。そのため「注文番号」が分かれば、レコードを一意に特定できます。
しかし、よく見ると「注文番号」以外のカラムに関数従属している項目があります。それは「購入ユーザ名」です。「購入ユーザ名」は「ユーザID」が決まれば、一意に特定できます。

- 緑枠:「ユーザID」が決まれば一意に特定できる項目
第3正規形では、次のように関数従属しているカラムを別テーブルとして切り出します。(緑枠で囲んだ部分を「ユーザテーブル」として切り出している)


これで、関係データベースの正規化(第1正規形~第3正規形)は完了です。
スポンサーリンク
基本情報技術者試験 過去問の解説
基本情報技術者令和2年免除 問27
設問の表が、どこまで正規化されているか確認します。
- 第1正規形:繰り返し項目がない状態
- 第2正規形:部分関数従属がない状態
- 第3正規形:推移的関数従属がない状態
【第1正規形】
繰り返し項目がないため、第1正規形の条件は満たしている。
【第2正規形】
主キーは単一のカラム(従業員番号)であり、部分関数従属が存在しないため、第2正規形の条件は満たしている。
【第3正規形】
「職位」が決まると、「役職手当」が決まる。第3正規形を満たすためには、このカラムを別テーブルに分離する必要がある。
以上、設問の表は「第2正規形」まで、正規化されているのがわかります。

「ア」が正解です。
基本情報技術者試験おすすめの参考書・問題集
いちばんやさしい 基本情報技術者 | 『基本情報技術者試験』試験に、短期間で一発合格するための試験対策本。ITの知識がまったくない、未経験者やでもスラスラと学習を進められるよう、丁寧に解説。 |
かやのき先生の基本情報技術者教室 | 基本情報技術者をめざす方のためのやさしいオールインワンタイプの参考書&問題集。イラストや豊富な図解・例え話を駆使して理解しやすく・記憶に残りやすいように説明。 |
基本情報技術者 パーフェクトラーニング過去問題集 | 科目A・Bともに万全の対策ができる、定番の過去問題集!科目A・科目Bの両方について万全の対策ができる。 |
キタミ式イラストIT塾 基本情報技術者 | すべての解説をイラストベースで行っているため,とてもわかりやすい解説本。いちばん最初に読む基本情報技術者試験関連の書籍を探している人におすすめ! |
出るとこだけ!基本情報技術者[科目B] | 基本情報技術者【科目B】対策の定番書!前提知識+解き方+試験問題を掲載。効率よく学習できる。 |
基本情報技術者 合格教本 | 出題範囲を体系的にきちんと理解しながら学習したい人におすすめ!基本情報技術者試験の定番テキストの改訂版。 |
基本情報技術者 超効率の教科書+よく出る問題集 | 動画でスムーズに学習スタート、テキストでしっかり理解度を深める!よく出る問題を反復学習することで、合格に直結するチカラが身に付く! |