【初心者向け 105】基礎Datebase知識(正規化)
関係の正規化(Normalization)
DBの効率、エラーをなくすため、重複を除去し、FKなどでつなぐ過程のことです。
このようにまだ、重複があり、架空されてない状態を非正規化をいいます。
これから、こちらのテーブルを正規化する練習をします。
第一正規化形式(1NF)
アトミック性:もう分けられないまで最後まで分けられたものの性質。
DBはアトミック値を入れます。簡単に言えば、各カラムには一つの値のみ入れることです。
http://www.gitta.info/LogicModelin/en/html/DataConsiten_Norm1NF.html
1.データーは縦じゃなく横に拡張する。
2.重複があるところはテーブルで分割する
3.分割されたテーブルをPKでマッピングする。
第二正規化形式(2NF)
PKが2以以上のキーに構成された複合キー の場合、2NFの対象になり、複合キー全体ではなく、複合キーの一部分のみ属する場合、それを分離しなければいけない。
例えば、個数の場合、注文番号と商品コードに存在しなければ、この二つが必修になります。
個数が5個だとしても、商品コードがない場合、どの商品を注文したか、それがラーメンか、帽子かが分からいので、商品コードは必修です。
注文番号がない場合も、どの会員の注文かが分からない状態になるので、
複合キーにマッチしています。
しかし、商品名の場合、注文番号とは関係なく、商品コードさえ分かれば、どの商品かが分かります。 複合キーの一部分のみ属するということがこのような状態です。
そのため、テーブルをこのように分けます。
第三正規化形式(3NF)
A->B, B->C, A->Cの関係なら、分ける
基本キー以外の部分に重複があるかをチェックし、分けます。
例えば、Narutoが一つの注文を追加するnaruto, メール、性別という重複データーが生じます。
そのため、会員と注文をもう一度分けます。
また、Naruto(A)の注文日(B)は1/1で、注文日(B)の注文番号(C)は1であり、
Naruto(A)の注文番号も(C)1というA->B, B->C, A->Cの関係です。
この場合、Bを中心に分ける必要があります。
こちらが最終デーブルになります。
1:1 , 1:N , M:N
1:1
nullがある場合、テーブル作業がややこしくなる場合はあります。
その場合は1:1の関係のテーブルでこのように分ける場合もあります。
1:多
社員は一人当たり2つ以上のプロジェクトに参加することもできます。
このような関係を1:多といいます。学生が授業を選ぶことも1:多になります。
多:多
しかし、実際にはプロジェクトも様々な社員が参加することができますので、
小互い1:多関係になります。このような関係を多対多と言います。
このような場合、一つのテーブルを追加し、多:多を1:多に分ける必要があります。
ERD
非依存関係、依存関係
role tableのPKはemployeeからFKとして参照されています。
このような関係性を非依存関係といいます。
また、roleはemployeeの親になります。
殆どが非依存関係ですが、1:1の場合PKを共有するため、このような関係を依存関係といいます。また、注文の場合も注文商品の親になりますが、注文商品のPK(複合キー)に含まれており、依存関係だと言えます。
Discussion