【基本情報】データベース正規化のやり方を解説!

【基本情報】データベース正規化のやり方を解説!

記事の文字数:3677

本記事では、基本情報技術者試験で出題されるデータベース設計における正規化について詳しく解説します。また正規化の目的や各正規形(第一正規形~第三正規形)について具体的な例を交えて紹介します。データ管理の効率化を目指す方や、リレーショナルデータベースの設計を学びたい方に最適な内容です。


スポンサーリンク

データベースは、情報を効率的に管理・検索するためのシステムであり、さまざまな用途で活用されています。特にリレーショナルデータベース(RDB)は、表形式でデータを整理し、SQL(Structured Query Language)を用いて操作するのが一般的です。本記事では非正規形~第三正規形までの正規化のやり方を具体例を用いて詳しく解説します。

正規化とは

正規化とは複数テーブルに、同一情報が重複して存在することがないように最適化することです。データの冗長性を排除し、一貫性を保ちながら効率的にデータを管理します。正規化を適切に行うことで、データの整合性を維持し、更新時の不整合を防ぐことができます。

非正規形から第1正規形~第5正規形までの段階が存在し、データベースの重複や矛盾を取り除くことで正規化の段階が上がります。

正規化の目的

  1. データの重複を減らす - 余分なデータを排除し、ストレージを効率的に使用する。
  2. データの一貫性を保つ - 更新時の不整合を防ぐ。
  3. データの整合性を確保する - 論理的に意味のあるデータ構造を維持する。
  4. 保守性を向上させる - 変更が容易になり、拡張性が向上する。
  5. 検索の最適化 - クエリのパフォーマンスを向上させ、不要なデータアクセスを減少させる。

正規化のメリットとデメリット

メリット

  • データの整合性の向上:正規化により、データの一貫性が維持され、エラーの発生率が低減。
  • 冗長性の削減:データの重複を防ぎ、ストレージを効率的に活用。
  • データ更新の容易さ:1つのデータを変更するだけで済むため、メンテナンスが容易。
  • データ検索の最適化:適切に正規化されたテーブルは、検索クエリの最適化に寄与。

メリット

  • クエリの複雑化:テーブルの分割により、複雑な結合(JOIN)が必要になる。
  • パフォーマンスの低下:結合回数が増えることで、検索速度が遅くなる可能性がある。
  • 設計の難易度が上がる:適切な正規化を行うためには、データの関係を深く理解する必要がある。

正規形の種類と具体例

正規化には、いくつかの段階(正規形)が存在し、それぞれの段階でデータの整理度が高まります。

非正規形(UNF)

正規化を行っていない状態(非正規形)では、データが適切に整理されておらず、冗長性や不整合が生じやすくなります。

例:非正規形のテーブル

注文テーブル

注文ID注文日顧客ID顧客名商品ID商品名価格数量商品ID商品名価格数量
0017/1001田中太郎001みかん1003002りんご1502
0027/2002佐藤次郎002りんご15010003バナナ2006
0037/3002佐藤次郎003バナナ2005----

この状態では、「商品」「数量」「価格」が複数の値を持っており、検索や更新が難しくなります。データの冗長性が高いため、修正時の手間も増加し、データの一貫性を保つのが困難になります。

UNF(Unnormalized Form)は「非正規形」の略で、データがまだ正規化されていない状態を指します。UNFでは、1つのフィールドに複数の値が含まれるなど、冗長性やデータの不整合が発生しやすくなります。正規化を進めることで、データの整合性や検索効率を向上させることができます。

第1正規形(1NF)

非正規形からテーブル行の繰り返しを取り除いた状態のことです。例では商品ID,商品名,価格,数量の重複を分割しています。各カラムが単一の値を持ち、非正規系のように繰り返しのグループが存在しません。

例:第1正規形のテーブル

注文テーブル

注文ID注文日顧客ID顧客名商品ID商品名価格数量
0012024/7/1001田中太郎001みかん1003
0012024/7/1001田中太郎002りんご1502
0022024/7/2002佐藤次郎002りんご15010
0022024/7/2002佐藤次郎003バナナ2006
0032024/7/3002佐藤次郎003バナナ2005

NF(Normal Form)とは、データベースの正規形を示す略称です。データベースの正規化を行う際に、各段階(第一正規形: 1NF、第二正規形: 2NF、第三正規形: 3NF など)を指す際に使われます。各正規形は、データの整合性を高め、冗長性を削減し、管理しやすいデータ構造を構築するためのルールを定めています。

第2正規形(2NF)

第1正規形のテーブルから部分関数従属をなくした状態のことです。
部分関数従属とは、主キーが複数あるテーブルにおいて、一部のキーだけで決定できる項目のことです。
第1正規系の例では注文ID商品IDでレコードが一意になる複合主キーです。
注文IDのみで注文日,顧客ID,顧客名を決定できて、商品IDのみで商品名,価格が決まるのでテーブルを分離します。

例:第2正規形のテーブル

注文テーブル

注文ID注文日顧客ID顧客名
0012024/7/1001田中太郎
0022024/7/2002佐藤次郎
0032024/7/3002佐藤次郎

注文商品テーブル

注文ID商品ID数量
0010013
0010022
00200210
0020036
0030035

商品テーブル

商品ID商品名価格
001みかん100
002りんご150
003バナナ200

第3正規形(3NF)

第2正規形のテーブルから推移的関数従属をなくした状態のことです。
推移関数従属性とは、テーブル内の一部項目が主キーでない項目によって決定されることです。
例では顧客IDによって、顧客名が決定されるため、別表に移します。

例:第3正規形

注文テーブル

注文ID発注日顧客ID
0012024/7/1001
0022024/7/2002
0032024/7/3002

顧客テーブル

顧客ID顧客名
001田中太郎
002佐藤次郎

注文商品テーブル

注文ID商品ID数量
0010013
0010022
00200210
0020036
0030035

商品テーブル

商品ID商品名価格
001みかん100
002りんご150
003バナナ200

その他正規形

第三正規系以降はボイス・コッド、第四、第五正規形が存在します。

ボイス・コッド、第四、第五正規系

ボイス・コッド以降の各正規形は一般的に実施しないため、詳しい説明は省略しますが、概要は以下の通りです。

正規形概要
ボイス・コッド正規形(BCNF)3NFを満たし、すべての決定子がスーパーキーであることが必要。
主キー以外の列が他の列に依存しないようにすることで、異常を排除。
第四正規形(4NF)BCNFを満たし、多値従属性を排除。
1つのキーに対して複数の独立した値が関連付けられる場合、それを分離する。
第五正規形(5NF)4NFを満たし、結合従属性を排除。
分割されたテーブルを再結合したときに、元のデータが正しく再構築できるようにする。

正規化はどこまで行うべきか

過剰な正規化はデータ管理効率が悪くなるため、ボイス・コッド以降は正規化をせずに第3正規形まで行うことが一般的です。

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

基本情報の過去問を解いて、理解度を深めましょう。
基本情報技術者試験ドットコムのリンクを載せておきます。

基本情報技術者平成20年秋期 午前問57
基本情報技術者平成21年春期 午前問32
基本情報技術者平成22年春期 午前問30

まとめ

  • 非正規系は、テーブルの行に重複がある状態のこと。
  • 第1正規系は、非正規形からテーブル行の繰り返しを取り除いた状態のこと。
  • 第2正規系は、第1正規形のテーブルから部分関数従属を除いた状態のこと。
    • 部分関数従属は、主キーが複数あるテーブルにおいて、一部のキーだけで決定できる項目のこと。
  • 第3正規系は、第2正規形のテーブルから推移的関数従属を除いた状態のこと。
    • 推移的関数従属は、テーブル内の一部の項目が、主キーでない項目によって決定されること。
  • ボイス・コッドを含め、第4正規形以降の正規化は一般的には行わない。

以上で本記事の解説を終わります。
よいITライフを!
スポンサーリンク
Scroll to Top