今回のテーマは、関係データベースの正規化です。
関係データベースの正規化?
基本情報技術者試験や応用情報技術者試験で出題される「関係データベースの正規化」についての問題。聞きなれない言葉のため、難しく感じますが、正規化の動きを理解していれば、そこまで難しい問題ではありません。
本記事では、「関係データベースの正規化」について解説します。
スポンサーリンク
目次
関係データベースの正規化
関係データベースとは、データを表の形で管理するデータベースのことです。
次のように、関係データベースのテーブル(表)は、レコード(行)とカラム(列)によって形成されています。
関係データベースの正規化とは、データを取り扱いやすいようにデータベース設計することで、データの一貫性を維持し、効率的なデータアクセスを可能にするための手法です。
関係データベースのテーブルを正規化することで、データの冗長性と不具合が起こる機会を減らすことができます。
関係データベース正規化の手順
正規化には「第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正規形」まで、正規化されているのがわかります。
「ア」が正解です。