データベース 2024-04-02

データベース正規化を解説:1NFから3NFまで実例付き

データベース正規化を 1NF・2NF・3NF まで実例付きで解説。冗長性排除・更新anomaly防止のためのテーブル設計の考え方を学べます。

Read in: en
データベース正規化を解説:1NFから3NFまで実例付き

正規化とは

データの重複をなくし、データの論理的不整合を防ぐように設計すること。

# 前提

キー

社員番号 ID 名前 性別 住所 電話番号
1 1001 山田太郎 東京都千代田区 03-1234-5678
2 1002 田中花子 東京都渋谷区 03-2345-6789
3 1003 鈴木次郎 東京都新宿区 03-3456-7890
4 1004 佐藤三郎 東京都港区 03-4567-8901
5 1005 高橋四郎 東京都目黒区 03-5678-9012

主キー:{社員番号, ID}

候補キー:{社員番号, ID}, {電話番号}

スーパーキー:{社員番号, ID}, {社員番号, ID, 名前}, {社員番号, ID, 氏名, 性別} etc...

## 関数従属性

正規形

第1正規形(1NF)

第2正規形(2NF)

第3正規形(3NF)

ボイスコッド正規形(BCNF)

第4正規形(4NF)

第5正規形(5NF)

正規化

1NF

非正規系

伝票番号 製品番号 製品名
1 A001A002A003 リンゴミカンバナナ
2 A004A005A006 ブドウナシイチゴ

1NF

伝票番号 製品番号 製品名
1 A001 リンゴ
1 A002 ミカン
1 A003 バナナ
2 A004 ブドウ
2 A005 ナシ
2 A006 イチゴ

2NF

2NF前

伝票番号 製品番号 製品名
1 A001 リンゴ
1 A002 ミカン
1 A003 バナナ
2 A004 ブドウ
2 A005 ナシ
2 A006 イチゴ

候補キーである{伝票番号, 製品番号}と非キー属性である製品名が部分関数従属している。

2NF 売上明細テーブル

伝票番号 製品番号
1 A001
1 A002
1 A003
2 A004
2 A005
2 A006

商品テーブル

製品番号 製品名
A001 リンゴ
A002 ミカン
A003 バナナ
A004 ブドウ
A005 ナシ
A006 イチゴ

部分関数従属は候補キーが複合キーの場合にのみ発生するので、候補キーが単一属性である場合は発生しない。

3NF

3NF前

伝票番号 製品番号 顧客番号 顧客名
1 A001 B1 リンゴ商事
1 A002 B1 ミカン商事
1 A003 B1 バナナ商事
2 A004 C1 ブドウ商事
2 A005 C1 ナシ商事
2 A006 C1 イチゴ商事

主キーが{伝票番号, 製品番号}の時、{伝票番号, 顧客番号}→{顧客番号}→{顧客名}と推移的従属している。

3NF 売上明細テーブル

伝票番号 製品番号
1 A001
1 A002
1 A003
2 A004
2 A005
2 A006

顧客テーブル

顧客番号 顧客名
B1 リンゴ商事
B1 ミカン商事
B1 バナナ商事
C1 ブドウ商事
C1 ナシ商事
C1 イチゴ商事

BCNF

BCNF前

名前 科目 担任
ボブ 数学 山田
トム 数学 佐藤
ジョン 数学 鈴木
ジョン 英語 安藤

主キーが{名前, 科目}の時、{担任}→{科目}の関数従属性があり、決定項(A→BのAのこと)がスーパーキーではない。

BCNF 受講テーブル

名前 科目
ボブ 数学
トム 数学
ジョン 数学
ジョン 英語

担任テーブル

担任 科目
山田 数学
佐藤 数学
鈴木 数学
安藤 英語

{名前, 科目}→{担任}の情報が失われたため、ジョンの数学の担任が誰か分からなくなった。

4NF

4NF前

名前 趣味 好物
田中 野球 ラーメン
鈴木 サッカー 寿司
佐藤 バスケ カレー

主キーが{名前, 趣味, 好物}であるとき、{名前}→{趣味}→{好物}と複数の属性が決まる。

4NF 趣味テーブル

名前 趣味
田中 野球
鈴木 サッカー
佐藤 バスケ

好物テーブル

名前 好物
田中 ラーメン
鈴木 寿司
佐藤 カレー

5NF

5NF前

店舗 在庫商品 製造元
東京 TV A社
東京 TV B社
東京 PC A社
神奈川 TV A社

{店舗}→{在庫商品}, {店舗}→{製造元}, {在庫商品}→{製造元}と複数に分解できる。

5NF 在庫テーブル

店舗 在庫商品
東京 TV
東京 TV
東京 PC
神奈川 TV

仕入れ先テーブル

店舗 仕入先
東京 A社
東京 B社
東京 A社
神奈川 A社

メーカーテーブル

店舗 製造元
東京 A社
東京 B社
東京 A社
神奈川 A社

所感

BCNF以降の理解が浅いのでちょっと自信がない。。。

参考

Tags: 正規化理論 正規化
Share: 𝕏 Post Facebook Hatena
✏️ View source / Discuss on GitHub
☕ サポート

このブログを応援していただける方は、以下からサポートをお願いします。いただいたサポートはブログ運営・技術研鑽に活用します。


関連記事