【DB】テーブル正規化の考え方【考え方】

情報からテーブル作成をする場合、「正規化」という考え方があります。ここでは「第一正規化」について扱います。

※第一正規化より先はある程度複雑な業務などを扱うプロジェクトでないといまいちイメージが出来なかったため割愛させてください。

第一正規化とは

テーブル定義を行ったときに同じ情報「名称など」を繰り返し扱うことがあります。このような情報をグループごとにテーブル化することを言います。

正規化を行うと、データの冗長性、不整合が抑止できると考えております。

例えば同じ名称を繰り返しテーブルに追加していくと登録する文字列に間違いが生じることが予測されます。文字列に間違いが生じると本来同じ意味であった情報が違うものとして扱われてしまいます。このような状態を事前に抑止できるように正規化は行っておいた方がよいと思います。

それでは、以下のテーブルを正規化してみます。

※テーブル作成については別途記載しております。

テーブル作成方法

No. 艦名 艦種 進水日
1 大和 戦艦 1940年8月8日
2 赤城 空母 1925年4月22日
3 五月雨 駆逐艦 1935年7月6日
4 朝霜 駆逐艦 1943年7月18日

正規化しないでテーブル定義をした場合は以下の通りです。

テーブル名:WARSHIP

No. カラム名 データ型 主キー
1 ID NUMERIC(5)
2 NAME VARCHAR(100)
3 TYPE VARCHAR(50)
4 LAUNCH_DATE DATE

グループを抜き出してテーブル化

上記情報では、「艦種」の項目に重複した情報が存在することが分かります。この艦種だけでテーブルを作成することを考えます。

テーブル名:WARSHIP_TYPE

No. カラム名 データ型 主キー
1 ID NUMERIC(2)
2 NAME VARCHAR(50)

元のテーブル構成を変更

元のテーブルから「艦種」項目に新しく追加したテーブル「WARSHIP_TYPE」を参照する「ID」の項目「WARSHIP_TYPE_ID」に変更します。

テーブル名:WARSHIP

No. カラム名 データ型 主キー
1 ID NUMERIC(5)
2 NAME VARCHAR(100)
3 WARSHIP_TYPE_ID NUMERIC(2)
4 LAUNCH_DATE DATE

この形が「第一正規化」を実施した形になります。

正規化後のテーブルにデータを登録

実際に正規化したテーブルにデータを配置します。

テーブル名:WARSHIP_TYPE

ID NAME
1 戦艦
2 空母
3 駆逐艦
4 海防艦

※「4:海防艦」は、参照するときの説明にあると便利かなと思い追記しました。

テーブル名:WARSHIP

ID NAME WARSHIP_TYPE_ID LUNCH_DATE
1 大和 1 1940年8月8日
2 赤城 2 1925年4月22日
3 五月雨 3 1935年7月6日
4 朝霜 3 1943年7月18日

このような形でデータ登録を行います。この分割したテーブルをもとの情報と同じように参照する方法については下記を参照してください。

テーブルを結合して参照する方法

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です