LoginSignup
4
7

More than 3 years have passed since last update.

正規化とは

Last updated at Posted at 2019-11-16

はじめに

今回はデータ設計に必要な正規化についてまとめます。
正規化とは、「効率よくデータを扱うために、データを一定のルールに基づいて変形し整理する」ことです。

以下スムーズに読み進めるために言葉の注釈記載します。
※主キー:データベースにおいてレコードを一意に識別するための属性
※外部キー:関連したテーブル間を結ぶために設定する列
※エンティティ:データベースとして表現すべき対象物

目次

  1. 非正規化
  2. 第一正規化
  3. 第二正規化
  4. 第三正規化
  5. 正規化完成図

1.非正規

非正規とは正規化がまったく行われてなく、1行の中に複数の繰り返し項目が存在するようなテーブルのことです。
以下のようなテーブルです。
図1.png
※以下主キーは黄色で示します。

2.第一正規化

繰り返しになっている項目をなくします。
【第一正規化前】
図1.png
今回の場合、主キーである「貸出番号」に対して「書籍番号・書籍名・著者」の項目が繰り返しになっています。
元のエンティティから「書籍番号・書籍名・著者」の項目を取り除き新しいエンティティを作ります。
元のエンティティの主キーである「貸出番号」を新しいエンティティの外部キーとして設定します。
なお新しいエンティティの主キーは「書籍番号」のみを主キーとして設定してしまうとどの会員による貸出情報かが不明になるため、「貸出番号・書籍番号」のセットです。
【第一正規化後】
図1.png
図2.png

3.第二正規化

主キーの一部に依存する項目をなくします。
【第二正規化前】
図2.png
今回の場合、主キーの一部である「書籍番号」に対して「書籍名・著者」の項目が依存関係にあるので、元のエンティティから「書籍名・著者」の項目を取り除き新しいエンティティを作ります。
元のエンティティの主キーである「貸出番号」を新しいのエンティティの外部キーとして設定します。
なお新しいエンティティの主キーは「書籍番号」になります。
【第二正規化後】
図2.png
図3.png

4.第三正規化

主キー以外に依存する項目をなくします。
【第三正規化前】
図1.png
今回の場合、主キー以外の「会員番号」に対して「会員名・貸出日・返却予定日」の項目が依存関係にあるので、元のエンティティから「会員番号・会員名・貸出日・返却予定日」の項目を取り除き新しいエンティティを作ります。
新しいのエンティティの主キーは「会員番号」になります。
新しいのエンティティの主キーである「会員番号」を元のエンティティの外部キーとして設定します。
【第三正規化後】
図1.png
図2.png

5.正規化完成図

以下が第三正規化まで行ったものになります。
図1.png
図2.png
図2.png
図3.png

最後に

正規化は整理されたデータベースを扱うために行うと良いかと思います。

4
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
7