Upgrade to Pro — share decks privately, control downloads, hide ads and more …

なぜ正規化するのか

 なぜ正規化するのか

Avatar for 赤神青空

赤神青空

August 14, 2026

More Decks by 赤神青空

Other Decks in Programming

Transcript

  1. ▪まとめて更新時異常と呼ばれるもの 詰め込んだ表で起きる3つの異常 01 更新異常 — 直し漏れが矛盾になる 同じ単価が何行にも書かれていると、一部だけ古い値のまま残る。 02 挿入異常 —

    登録したいのにできない 注文がまだ無い新商品を、注文表しか無ければ登録する場所がない。 03 削除異常 — 消したくないものまで消える 最後の注文を削除すると、その商品の単価まで一緒に失われる。 今ココ 目的 4/8
  2. ▪主キー・複合キー・非キー属性・外部キー 先にキーの言葉を揃えます 注⽂明細 注⽂番号 ★ 商品コード ★◆ P P P

    数量 外部キー 商品 商品コード ★ P P 商品名 記号の読み⽅ ★ = 主キー。⾏を1つに決める列。 主キーが2列以上のとき、複合キーと呼ぶ。この例は2列。 主キーに⼊らない列(数量‧商品名)が⾮キー属性。 ◆ = 外部キー。ほかの表の主キーを指す列。 外部キーの値は、参照先の表に必ず存在していなければならない。 外部キーだけが表をまたぐ。ほかは1つの表の中の話。 りんご みかん ★ が主キー、◆ が外部キー。この4語だけ今日は使います 今ココ 目的 5/8
  3. ▪正規形の定義はすべてこの言葉で書かれている 関数従属という言葉 「A が決まれば B が1つに決まる」を A → B と書く。

    完全関数従属 … 複合キーの全体が揃って初めて決まる 部分関数従属 … キーの一部だけで決まる(2NF で外す) 推移的関数従属 … 非キーを経由して決まる(3NF で外す) この3つを見分けられれば 3NF までは機械的に進む 今ココ 目的 6/8
  4. ▪注文票を1枚に詰め込むと、決まり方の違う列が同居する 3つを1つの表で見る 注文番号・商品コード・注文日・顧客ID・顧客名・商品名・単価・数量が1つの 表にある。 完全関数従属 {注文番号, 商品コード} → 数量。両方そ ろって初めて決まる。

    今ココ 目的 部分関数従属 商品コード → 商品名。キーの一部だけ で決まっている。 推移的関数従属 注文番号 → 顧客ID → 顧客名。非キーを 経由して決まる。 7/8