DATABASE
データベース正規化の基本
正規化は、データの重複や更新時の不整合を減らすために表を整理する考え方です。
問題を解きたい方:
→ データベース正規化を練習する
→ データベース正規化を練習する
まず「関数従属」
Aが決まればBが一意に決まる関係を、A → B と表します。
学生ID → 学生名
商品ID → 商品名
商品ID → 商品名
第1正規形
一つの項目に複数の値を入れず、各項目を一つの値にします。
NG:電話番号 = 090-xxxx, 080-yyyy
→ 複数の電話番号を別の行などに分ける
→ 複数の電話番号を別の行などに分ける
第2正規形
第1正規形を満たしたうえで、複合主キーの一部だけに依存する「部分関数従属」をなくします。
主キー:(注文ID, 商品ID)
商品ID → 商品名
商品名は商品IDだけで決まる
→ 商品表へ分離
商品ID → 商品名
商品名は商品IDだけで決まる
→ 商品表へ分離
第3正規形
第2正規形を満たしたうえで、非キー属性を経由する「推移的関数従属」をなくします。
社員ID → 部署ID → 部署名
部署名を部署表へ分離
部署名を部署表へ分離
覚え方
第1正規形 → 1セル1値
第2正規形 → 主キーの「一部」への依存をなくす
第3正規形 → 非キー属性を「経由」する依存をなくす
第1正規形 → 1セル1値
第2正規形 → 主キーの「一部」への依存をなくす
第3正規形 → 非キー属性を「経由」する依存をなくす
正規化は何のために行う?
正規化は、同じ情報の重複を減らし、追加・更新・削除時の不整合を起こしにくくするために表を整理する考え方です。
具体例:注文表を分ける
注文番号・顧客番号・顧客名・商品番号・商品名を1表に持つと、同じ顧客名や商品名が何度も保存されます。顧客情報を顧客表、商品情報を商品表として分離し、番号で関連付けると重複を減らせます。
第1〜第3正規形の見方
第1正規形では繰り返し項目をなくして1セル1値にします。第2正規形では複合主キーの一部だけに依存する属性を分離し、第3正規形では主キー以外の属性を経由して決まる属性を分離します。
よくある間違い
表を細かく分ければ正規化、ではありません。
どの項目がどのキーによって決まるのか、関数従属を確認して分割することが重要です。
どの項目がどのキーによって決まるのか、関数従属を確認して分割することが重要です。
試験でのポイント
「Aが決まればBが一意に決まる」という関係を矢印で書き、主キー・部分関数従属・推移的関数従属を順番に確認すると判断しやすくなります。
データベースの正規化とは?
正規化は、データの重複を減らし、追加・更新・削除による不整合を起こしにくくするために表を整理する考え方です。単純に表を細かく分割するのではなく、項目同士の依存関係を確認します。
第1正規形とは?
第1正規形では、繰り返し項目をなくし、基本的に1つのセルへ1つの値を持たせます。1セルに複数の商品番号をまとめて保存するような形を整理します。
第2正規形とは?
第2正規形では、複合主キーを持つ表で、主キーの一部だけに依存して決まる属性を分離します。部分関数従属がないかを確認するのがポイントです。
第3正規形とは?
第3正規形では、主キー以外の属性を経由して別の属性が決まる推移的な依存関係を分離します。
第1・第2・第3正規形の違い
第1正規形は繰り返しの整理、第2正規形は複合主キーの一部への依存、第3正規形は主キー以外を経由する依存に注目すると整理しやすくなります。
正規化でよくある間違い
表を分けること自体を目的にしない
「どのキーが決まると、どの項目が一意に決まるか」を考えて分割します。
「どのキーが決まると、どの項目が一意に決まるか」を考えて分割します。
理解したら10問練習
どの正規形・関数従属に当てはまるかを実際に判断してみましょう。
どの正規形・関数従属に当てはまるかを実際に判断してみましょう。