広告 基本情報技術者

【基本情報技術者試験】関係データベースの正規化

2024年5月23日

教授
教授

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

関係データベースの正規化?

助手
助手

問題

次の表はどこまで正規化されたものか。

従業員番号氏名入社年職位職位手当
12345情報 太郎1991部長90,000
12346処理 次郎2005課長50,000
12347技術 三郎2007課長50,000

ア:第2正規形 イ:第3正規形 ウ:第4正規形 エ:非正規形

基本情報技術者令和2年免除 問27 ※表は過去問を参考に作成したものです。

基本情報技術者試験や応用情報技術者試験で出題される「関係データベース正規化」についての問題。聞きなれない言葉のため、難しく感じますが、正規化の動きを理解していれば、そこまで難しい問題ではありません。

本記事では、「関係データベースの正規化」について解説します。

本記事で学べること

  • 関係データベースの正規化についてを理解する
  • 正規化の手順について理解する
  • 基本情報技術者試験の過去問の解き方を学ぶ

スポンサーリンク

関係データベースの正規化

関係データベースとは、データを表の形で管理するデータベースのことです。

次のように、関係データベースのテーブル(表)は、レコード(行)とカラム(列)によって形成されています。

テーブルの呼び方

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

助手
助手

関係データベースのテーブルを正規化することで、データの冗長性と不具合が起こる機会を減らすことができます。

関係データベース正規化の手順

正規化には「第1正規形」~「第5正規形」、および「ボイスコッド正規形」などの種類がありますが、「第1正規形」~「第3正規形」までで、十分に正規化されたという考え方もあります。

情報処理試験では、主に「第1正規形」~「第3正規形」の内容が出題されるので、本記事でも「第1正規形」~「第3正規形」までの手順を紹介します。

正規化前

例えば、商品を販売するシステムで、次のような注文があるとします。

  • 鈴木一郎:A商品を1つとB商品を2つ注文
  • 佐藤次郎:C商品を1つ注文
  • 田中三郎:D商品を2つ、E商品を1つ、F商品を1つ

この注文をそのまま表に挿入すると、次のように各行の長さがバラバラで、商品が繰り返されている状態になっています。

非正規化

【第1正規形】繰り返しを整理

関係データベースは、レコード単位でデータを扱うため、正規化前のようなデータ(各レコードの長さがバラバラ)は、データベースのテーブルに格納できません。

まずは、テーブルに格納できるように、繰り返し項目のそれぞれを別レコードとして独立させ、各レコードの長さを整えます。(正規化前は、各レコードの長さがバラバラで商品が繰り返されている状態)

下記が「第1正規形」のテーブルです。背景色がついているレコードが、正規化前では繰り返し項目になっていました。

正規化 第1正規形
助手
助手

第1正規形では、繰り返し項目を別レコードとして独立させ、テーブルに格納できるように、データを整えます。

【第2正規形】部分関数従属している列を整理

第2正規形では、部分関数従属しているカラムを整理します。

例えば、第1正規形で作られたテーブルの主キーは、「注文番号」と「商品ID」です。

「注文番号」と「商品ID」が決まれば、レコードを一意に特定できますが、実は「注文番号」が決まるだけで「注文日」「ユーザID」「購入ユーザ名」は特定できます。このような状態を部分関数従属といいます。

第2正規形では、第1正規形のテーブルから、部分関数従属しているカラムを切り出します。

下記は、部分関数従属のイメージ例です。

部分関数従属
  • オレンジ枠:「注文番号」が決まれば一意に特定できる項目
  • 緑枠:「商品ID」が決まれば一意に特定できる項目

第2正規形では、次のように部分関数従属しているカラムを別テーブルとして切り出します。

正規化の第2正規形

オレンジ枠で囲んだ部分を「注文テーブル」、緑枠で囲んだ部分を「商品テーブル」として切り出し、残りを「注文詳細テーブル」として3つのテーブルに分けています。

【第3正規形】関数従属している列を整理

第3正規形では、主キー以外で関数従属(推移的関数従属)しているカラムを整理します。

関数従属とは「○○が決まれば一意に特定できる項目」のことです。

第2正規形の「注文テーブル」は「注文番号」が主キーです。そのため「注文番号」が分かれば、レコードを一意に特定できます。

しかし、よく見ると「注文番号」以外のカラムに関数従属している項目があります。それは「購入ユーザ名」です。「購入ユーザ名」は「ユーザID」が決まれば、一意に特定できます

関数従属
  • 緑枠:「ユーザID」が決まれば一意に特定できる項目

第3正規形では、次のように関数従属しているカラムを別テーブルとして切り出します。(緑枠で囲んだ部分を「ユーザテーブル」として切り出している)

第3正規形
助手
助手

これで、関係データベースの正規化(第1正規形~第3正規形)は完了です。

スポンサーリンク

基本情報技術者試験 過去問の解説

基本情報技術者令和2年免除 問27

問題

次の表はどこまで正規化されたものか。

従業員番号氏名入社年職位職位手当
12345情報 太郎1991部長90,000
12346処理 次郎2005課長50,000
12347技術 三郎2007課長50,000

ア:第2正規形 イ:第3正規形 ウ:第4正規形 エ:非正規形

基本情報技術者令和2年免除 問27 ※表は過去問を参考に作成したものです。

設問の表が、どこまで正規化されているか確認します。

  • 第1正規形:繰り返し項目がない状態
  • 第2正規形:部分関数従属がない状態
  • 第3正規形:推移的関数従属がない状態

【第1正規形】

繰り返し項目がないため、第1正規形の条件は満たしている。

【第2正規形】

主キーは単一のカラム(従業員番号)であり、部分関数従属が存在しないため、第2正規形の条件は満たしている。

【第3正規形】

「職位」が決まると、「役職手当」が決まる。第3正規形を満たすためには、このカラムを別テーブルに分離する必要がある。

以上、設問の表は「第2正規形」まで、正規化されているのがわかります。

助手
助手

「ア」が正解です。

helpful