正規化と写像【RDB】
データベースを勉強する中で,正規化がいまいち理解できなかったので,写像を用いて整理した際のメモである.
準備
テーブル
以下のようなテーブルを考える.
| 社員ID | 社員氏名 | 部署ID | 部署名 |
|---|---|---|---|
| 1 | 佐藤 | 101 | 部署A |
| 2 | 鈴木 | 102 | 部署B |
| 3 | 渡辺 | 102 | 部署C |
| 4 | 田中 | 105 | 部署D |
このテーブルにおいて,
また,これらの要素をまとめたものをテーブル
スーパーキーと候補キー
スーパーキーとは,タプルを一意に決定できる属性の集合を指す.このスーパーキーは複数存在し,属性
写像
ある入力に対して出力が一意に決まるものを写像という.このうち,入力と出力が一対一で対応する場合には全単射という.このことから,RDBはスーパーキーを入力,タプルを出力とする全単射の写像であると考えられる.
RDBにおける正規化
データベースにおける正規化とは,テーブル(リレーション)を写像として考えた際に,その部分関数従属性を解消していく作業になる.
第1正規化
第1正規化は単純に重複する行を削除することを指す.これは候補キーに対してタプルが全単射とするためである.
第2正規化
複数の候補キーが存在し,かつ一部の候補キーにのみ従属する非キー属性が存在する状況を部分関数従属という.第2正規化はこの部分関数従属を解消することを指す.ここでは,一部の候補キーにのみ従属する非キー属性を取り出し新たなテーブルを作成することで,すべての候補キー要素の属性に対して全単射とする.
第3正規化
第3正規化はある非キー属性から別の非キー属性に対して部分関数従属性を解消することを指す.ここでは,非キー属性の中から部分関数従属する属性間の写像を取り出し新たなテーブルを作成する.
演習
ここまでの内容をまとめて,具体例を用いてテーブルを正規化していく.
筆者は音楽ゲームが趣味なのだが,これらの中にはデバイス・楽曲・難易度単位で様々な設定を変更可能なものが存在する.これらを管理するテーブルを想定する.
まず愚直にこれらを列挙すると,以下のようになる.

今回の描画にはPlantUMLを用いた.
上記の例では,ユーザ名とユーザIDの間に部分関数従属性があるため,これを解消した第2正規形は以下のようになる.

ここで,●は外部キーを表す.
また,楽曲IDと

参考
Discussion