2.2.4. データの正規化

以下が改善提案を反映した修正案です。段落の1文字目には全角スペースを入れて調整しました。


1. 概要

 データベースの正規化は、リレーショナルデータベース設計において非常に重要な概念です。正規化の主な目的は、データの冗長性を減らし、データの一貫性と整合性を保つことです。これにより、データの更新や挿入、削除といった操作が容易になり、データベースの効率性と信頼性が向上します。

2. 詳細説明

2.1. 正規化の目的

 正規化には以下のような目的があります:

  • データの冗長性を減らす
  • データの一貫性を保つ
  • データの整合性を確保する
  • 更新異常を防ぐ
  • データベースの柔軟性を高める

2.2. 正規化の手順

 正規化は通常、以下の順序で行われます:

  1. 第1正規形(1NF)
  2. 第2正規形(2NF)
  3. 第3正規形(3NF)

2.3. 各正規形の説明

2.3.1. 第1正規形(1NF)

 第1正規形は、リレーショナルデータベースの基礎であり、以下の条件を満たす必要があります:

  • 各列が原子値(これ以上分割できない値)のみを含む
  • 重複する列がない
  • 各行が一意に識別可能である  例として、顧客情報を含むテーブルがあるとします。このテーブルの各列は、単一の情報(顧客名、住所、電話番号など)を含んでいる必要があります。たとえば、「住所」列に「東京都新宿区, 東京都渋谷区」と複数の値が入っている場合は、第1正規形を満たしていません。これを解決するには、各行に一つの住所情報のみを含める必要があります。

2.3.2. 第2正規形(2NF)

 第2正規形は、第1正規形の条件に加えて、次の要件を満たす必要があります:

  • 全ての非キー属性が、主キーの全体に対して完全関数従属であること
  • 部分関数従属性を持たないこと  ここで、完全関数従属とは、主キー全体が他の非キー属性を一意に決定する関係を指します。例えば、「注文ID, 商品名 → 商品価格」といった部分関数従属が存在する場合、それは第2正規形を満たしません。この場合、「注文ID」と「商品名」の関係を別のテーブルに分離することで、第2正規形にします。

2.3.3. 第3正規形(3NF)

 第3正規形は、第2正規形の条件に加えて、以下の要件を満たす必要があります:

  • 非キー属性間の推移的従属を持たないこと  推移的従属とは、「AがBを決定し、BがCを決定する場合、AがCを決定する」という間接的な依存関係を指します。例えば、「学生ID → 学科 → 学科長」といった場合、このテーブルは第3正規形を満たしていません。「学科 → 学科長」という関係を別のテーブルに分けることで、第3正規形を達成します。

3. 応用例

3.1. Eコマースサイトのデータベース設計

 Eコマースサイトでは、顧客情報、商品情報、注文情報など、多くのデータを扱います。正規化を適切に行うことで、以下のような利点が得られます:

  • 顧客情報の重複を避け、一貫性を保つ
  • 商品情報の更新を容易にする
  • 注文履歴の管理を効率化する  例えば、顧客情報を「顧客テーブル」、商品情報を「商品テーブル」、注文情報を「注文テーブル」として分けることで、各テーブルに重複情報がなくなり、データの更新や管理が容易になります。

3.2. 学校の成績管理システム

 学校の成績管理システムでは、学生情報、科目情報、成績情報などを扱います。正規化により以下のメリットがあります:

  • 学生情報の一元管理
  • 科目情報の柔軟な追加・変更
  • 成績データの整合性確保  例えば、学生情報を「学生テーブル」、科目情報を「科目テーブル」、成績情報を「成績テーブル」として管理することで、各情報の変更が容易であり、一貫性が保たれます。

4. 例題

例題1

 以下の表を第3正規形まで正規化してください。

注文ID顧客名顧客住所商品名商品価格注文数量
1山田太郎東京都新宿区りんご1005
2佐藤花子大阪府大阪市バナナ803

回答例:

  1. 第1正規形:
     この表は既に第1正規形を満たしています。各列には原子値が含まれ、重複する列がないためです。
  2. 第2正規形:
     顧客テーブル: 顧客ID 顧客名 顧客住所 1 山田太郎 東京都新宿区 2 佐藤花子 大阪府大阪市  商品テーブル: 商品ID 商品名 商品価格 1 りんご 100 2 バナナ 80  注文テーブル: 注文ID 顧客ID 商品ID 注文数量 1 1 1 5 2 2 2 3
  3. 第3正規形:
     すでに第3正規形を満たしています。推移的従属がないためです。

例題2

 以下の表における関数従属性を特定し、どの正規形まで満たしているか答えてください。

学生ID学生名学科学科長
1田中一郎情報工学佐藤教授
2鈴木二郎電気工学高橋教授

回答例:
関数従属性:

  • 学生ID → 学生名, 学科
  • 学科 → 学科長  この表は第2正規形までは満たしていますが、第3正規形は満たしていません。「学科 → 学科長」という推移的従属が存在するためです。これを解消するには、「学科」テーブルを別に設け、「学科」と「学科長」の関係を管理します。

5. まとめ

 データベースの正規化は、効率的で信頼性の高いデータベース設計を行うための重要な手法です。主な目的は以下の通りです:

  • データの冗長性を減らす
  • データの一貫性と整合性を保つ
  • 更新異常を防ぐ

 正規化の過程で、完全関数従属、部分関数従属、推移的従属などの概念を理解し、適切に対処することが重要です。ただし、過度な正規化はパフォーマンスの低下を招く可能性があり、例えば、ジョイン操作が増加することで検索速度が遅くなることがあります。そのため、実際の運用を考慮しながら最適な設計を行うことが求められます。