データベース正規化(Database normalization)

はじめに

DBスペシャリスト受験にあたり、データベース正規化周りの勉強をしたので、その際のメモ。
個人的にはWikipediaのこの表が簡潔にまとまっていてわかりやすかったです。

前提知識

正規化を学習するにあたり、以下の用語について先に学習しておく必要があります。本記事では以下の用語説明については触れません。

  • 主キー
  • 候補キー
  • 非キー属性
  • 関数従属
    • 部分関数従属
    • 完全関数従属
    • 推移的関数従属

データベース正規化とは

データの重複や冗長性を排除することで、効率的かつ一貫性を維持した安全なデータベース設計をするための手法のことです。

データベース正規化の歴史

データベース正規化の理論については、Edgar F. Codd氏によって1970年代に提案されたものが始まりです。

主要な正規化

以降では簡単な出荷データの例を見ながら、第一~三正規化までについて要点のみ記載します。
本データの前提条件として、品名生産者コードが決まれば出荷先も決まるものとします。

非正規化(Unnormalized form)

以下の品名数量のように繰り返し出現する列がある状態は非正規化に分類されます。

品名 数量 品名 数量 生産者コード 生産者氏名 出荷先 出荷先住所
ぶどう 5 もも 2 0001 高橋太郎 〇〇商店 東京都….1丁目
いちご 3 なし 6 0002 田中花子 〇〇農協 茨城県…2丁目

第一正規化(First Normal Form)

上記表から繰り返し出現していた列を排除すると第一正規化に分類されます。

品名 数量 生産者コード 生産者氏名 出荷先 出荷先住所
ぶどう 5 0001 高橋太郎 〇〇商店 東京都….1丁目
もも 2 0001 高橋太郎 〇〇商店 東京都….1丁目
いちご 3 0002 田中花子 〇〇農協 茨城県…2丁目
なし 6 0002 田中花子 〇〇農協 茨城県…2丁目

以降では、上記テーブルの主キー{品名,生産者コード}とします。

第二正規化(Second Normal Form)

主キーに対し部分関数従属である、生産者名(生産者コードのみに完全関数従属のため)を別テーブルに切り出します。

品名 数量 生産者コード 出荷先 出荷先住所
ぶどう 5 0001 〇〇商店 東京都….1丁目
もも 2 0001 〇〇商店 東京都….1丁目
いちご 3 0002 〇〇農協 茨城県…2丁目
なし 6 0002 〇〇農協 茨城県…2丁目
生産者コード 生産者氏名
0001 高橋太郎
0002 田中花子

テーブルを切り出したことにより、非キー属性候補キー(主キーを含む)完全関数従属しており、かつ第一正規化済みのため、第二正規化に分類されます。

第三正規化(Third Normal Form)

主キーに対し推移的関数従属である、出荷先住所(出荷先が決まれば、出荷先住所が確定するため推移的関数従属)を別テーブルに切り出します。

品名 数量 生産者コード 出荷先
ぶどう 5 0001 〇〇商店
もも 2 0001 〇〇商店
いちご 3 0002 〇〇農協
なし 6 0002 〇〇農協
生産者コード 生産者氏名
0001 高橋太郎
0002 田中花子
出荷先 出荷先住所
〇〇商店 東京都….1丁目
〇〇農協 茨城県…2丁目

テーブルを切り出したことにより、非キー属性推移的関数従属でなく、かつ第二正規化済みのため、第三正規化に分類されます。

参考サイト

参考書籍

コメントを残す

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

CAPTCHA