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

3NFの先にあるもの

 3NFの先にあるもの

Avatar for 赤神青空

赤神青空

August 14, 2026

More Decks by 赤神青空

Other Decks in Programming

Transcript

  1. ▪ボイス・コッド正規形。3NF BCNF — 3NF に残った穴 より強い条件 定義は一行で、自明でない関数従属の左側が、すべてスーパーキーであること。 先に言葉を2つ スーパーキー …

    行を一意に識別できる属性の組 候補キー … スーパーキーのうち、これ以上削れないもの ずれるのは候補キーが重なるときだけ 複合の候補キーが複数。1つなら 3NF と一致する 出るのは、コードが分類を含むとき 郵便番号 → 市区町村、型番 → メーカー、教員 → 担当科目 よくある誤解 id を主キーにしても、候補キーは消えない 3NF は本当に満たす。それでも更新異常は残る 今ココ 3NF の先 3/7
  2. ▪学生・科目・教員。出てくるのはほぼこの形 BCNF の典型例 BCNF 違反 候補キーが2つあり、属性を共有している 候補キー② {学⽣, 教員} 候補キー①

    {学⽣, 科⽬} 受講(元の表‧3NF は満たす) 科⽬ DB NW DB DB 学⽣ ⾚神 ⾚神 ⽩神 黒神 教員 教員 佐藤 鈴⽊ ⽥中 佐藤 教員 ★ 教員を切り出す 佐藤 鈴⽊ ⽥中 科⽬ DB NW DB 受講(分解後) 学⽣ ★ ⾚神 ⾚神 ⽩神 黒神 教員 ★◆ 佐藤 鈴⽊ ⽥中 佐藤 教員 → 科⽬ 候補キーは必ずスーパーキー。この表のスーパーキーは、上の2組とそれを含む組だけ。 教員は1科⽬しか担当しないので「教員 → 科⽬」が成り⽴つ。 だが教員だけでは⾏が決まらない(佐藤の⾏が2つある)= スーパーキーではない。 全属性がどちらかの候補キーに⼊っているので 3NF は成⽴する。しかし BCNF は満たさない。 ★ = 主キー ◆ = 外部キー。分解後は候補キーが1つずつになるので、そこで初めて主キーが決まる。 代償として「学生・科目 → 教員」が1つの表に収まらなくなる 今ココ 3NF の先 4/7
  3. ▪名前と、何を取り除くかだけ 第4正規形と第5正規形 第4正規形 — 多値従属 例)社員の資格と話せる言語 出るのは外から取り込んだデータ 症状は行数が掛け算になること 資格を1つ足すと複数行が増える 第5正規形

    — 結合従属 例)営業員・メーカー・商品 3項が2項に分けられる場合だけ 前提は業務ルールが例外なく成り立つこと 現実には例外があるので崩れる 4NF は取り込みデータで踏むことがある。5NF は理論の終着点。 今ココ 3NF の先 5/7
  4. ▪「何を取り除くか」だけで区別できる 正規形の早見表 1NF 2NF 3NF BCNF 4NF 5NF 繰り返し項目 部分関数従属

    推移的関数従属 キーの一部への従属 自明でない多値従属 自明でない結合従属 今ココ まとめ 1セル1値にする。ここで複合キーが現れる 複合キーの一部で決まる列を切り出す 非キー属性を経由して決まる列を切り出す 決定側がスーパーキーでない従属をなくす 独立した多値の事実を別々の表に分ける 3項以上の関係を2項の関係に分ける 6/7
  5. ▪次回は、与えられた表を実際に判定します 今回のまとめ 01 定義は全部「従属の除去」 1NF は繰り返し、2NF〜BCNF は関数従属、4NF は多値、5NF は結合。 02

    ずれるとしたら、候補キーの重なり 複合の候補キーが複数あって属性を共有するとき。無ければずれない。 03 探しに行くのではなく、症状から気づく 直す行が多い、行数が掛け算になる。違和感が先で、名前は後から付く。 今ココ まとめ 7/7