0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

基本情報(正規化)

Posted at

正規化はデータに矛盾や重複が生じないように表を最適化することです。
流れとしては下記となります。

非正規形
// 正規化されていない繰り返し部分を持つ表
第1正規形
// 繰り返し部分を分離させて、独立したレコードとした表
第2正規形
// 部分関数従属している列を切り出したカタチの表
第3正規形
// 主キー以外の列に関数従属している列を切り出したカタチの表

正規化の目的は、データや矛盾に重複を生じさせないこと。
関係データベースでは、第3正規形の表を管理します。

非正規系の表は繰り返し部分を持っている

seikyup01.png
例えば上記の請求書があるとします。
ちゃんとカラムを設計できているかは別として例えば下記のような表になるとします。

請求書No 取引先名 品名 単価 数量 単位 金額
1 太郎商事 ペロペロキャンディ 100 1 400
2 田中悪代官 もも 200 2 700

別のレコードがあるとします。

品名 単価 数量 単位 金額 品名 単価 数量 単位 金額
すもも 400 1 400 アイス 500 1 500
たこ 200 2 400

各レコードの長さがバラバラで、2次元の表になっていません。これが、非正規系の表です。
関係データベースでは、バラバラなレコードは表として管理することができません。

第1正規系の表は繰り返しを除いたカタチ

非正規系の表から、正規化を行うと

請求書No 取引先名 品名 単価 数量 単位 金額
1 太郎商事 ペロペロキャンディ 400 1 400
1 太郎商事 すもも 400 1 400
1 太郎商事 アイス 500 1 500
2 田中悪代官 もも 200 2 400
2 田中悪代官 たこ 200 2 400

これで表が出来上がりました

関数従属と部分関数従属

ちょっと難しい言葉ですが、表の中における列と列との関係を表したものです。
主キーに対して、この項目がどんな関係にあるかを表す言葉だと思えば良いらしいです。

主キー

社員番号(主キー) 名前 部署
20000 田代 営業
20001 山本 開発

「社員番号」が決まると「名前」が決まる「部署」が決まる

主キー(複合キー)

学年(複合キー) 組(複合キー) 出席番号(複合キー) 名前
6 3 001 田代
6 3 002 岡本

「学年」「組」「出席番号」が決まると「名前」が決まる

主キーが決まれば、列の値が一意に定まる関係のことを関数従属と呼びます。
「名前」は「社員番号」に関数従属している、などと使います。

複合キーの一部の項目だけで、列の値が一意に定まる関係

受注No 受注日付 顧客コード 顧客名称 商品コード 商品名 単価 数量
1011 2010/11/12 C010 ほげ B101 紙ファイル 50 12
1011 2010/11/12 C010 ほげ B102 3色ボールペン 300 8

受注Noが決まれば、3つの列が決まり
商品コードが決まれば2つの列が決まる

主キーの一部分に対して関係従属する項目なので、このような関係を部分関係従属と呼びます。

まとめ

第二正規系と第三正規系は次でまとめます。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?