データベースの正規化とは。非正規系~第三正規系までのやり方を解説!

データベースの正規化とは。非正規系~第三正規系までのやり方を解説!

データベースの正規化は、基本情報技術者試験の定番問題です。非正規系から第3正規系までの正規化のやり方を具体例を用いて解説します。

正規化とは

正規化とは複数テーブルに、同一情報が重複して存在することがないように最適化することです。
非正規形から第1正規形~第5正規形までの段階が存在し、データベースの重複や矛盾を取り除くことで正規化の段階が上がります。

非正規形

テーブルの行に重複がある状態のことです。

例:非正規形のテーブル

注文テーブル

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

第1正規系

非正規形からテーブル行の繰り返しを取り除いた状態のことです。
例では商品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

第2正規系

第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正規系

第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

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

過剰な正規化は、データ管理効率が悪くなるため、第3正規形まで正規化を行うことが一般的です。

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

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

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

まとめ

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

以上で本記事の解説を終わります。
よいITライフを!
Scroll to Top