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

第何正規形かを判定する

 第何正規形かを判定する

Avatar for 赤神青空

赤神青空 PRO

August 15, 2026

Video

More Decks by 赤神青空

Other Decks in Programming

Transcript

  1. ▪順番を固定すると、判定で迷わなくなる 毎回この3ステップで見る 候補キー 成り立つ従属から 一意に決まる組を出す 単一キーなら 2NF は自動的に成立するので、3NF から 見る。例①。

    今ココ 判定演習 違反を探す 分解する → → 単一か複合か 部分従属 → 推移従属 止まった段が答え 決定側を主キーにした → キーの一部 複合キーなら まず部分関数従属を疑う。ここが一番よ く出る。例②。 表へ切り出す 候補キーが重なるなら 3NF と BCNF がずれうる。BCNF まで見 る。例③。 3/10
  2. ▪候補キーが1つなら、2NF 例① 社員表 — 単一キー は考えなくてよい 対象の表 社員番号 E E

    E 成り⽴つ関数従属 ⽒名 ⾚神 ⽩神 黒神 部署コード D D D 部署名 開発 開発 営業 社員番号 → ⽒名 社員番号 → 部署コード 部署コード → 部署名 この表は第何正規形か。分解が必要なら分解後の表も答える。 部署名は、社員番号から直接決まっているか 今ココ 判定演習 4/10
  3. ▪非キーを経由している列を探す 解答① 部署を切り出す 答え:第2正規形。部署を切り出すと 3NF を満たす 元の表 社員番号 E E

    E ⽒名 ⾚神 ⽩神 黒神 部署コード D D D 部署名 開発 開発 営業 社員 切り出す 社員番号 ★ E E E ⽒名 ⾚神 ⽩神 黒神 部署コード ◆ D D D 部署 部署コード ★ D D 部署名 開発 営業 ① 候補キー {社員番号}。⽒名も部署コードも社員番号だけで決まるので、単⼀キー。 ② 違反している従属 部署コード → 部署名。社員番号 → 部署コード → 部署名 という連鎖。 ③ 判定 第2正規形。単⼀キーなので 2NF は⾃動で成⽴し、3NF で⽌まっている。 直ったこと 「開発」が2⾏に書かれていたのが、部署表の1⾏になった。部署名の変更は1か所で済む。 単一キーのときに探すのは推移的従属だけ 今ココ 判定演習 5/10
  4. ▪キーの「どこ」で決まっているかを見る 例② 受注明細 — 複合キー 対象の表 受注番号 R R R

    成り⽴つ関数従属 商品コード P P P 数量 商品名 りんご みかん りんご 単価 {受注番号, 商品コード} → 数量 商品コード → 商品名 商品コード → 単価 この表は第何正規形か。分解が必要なら分解後の表も答える。 数量と商品名は、同じキーで決まっているか 今ココ 判定演習 6/10
  5. ▪キーの一部で決まる列を探す 解答② 商品を切り出す 答え:第1正規形。商品を切り出すと 3NF まで満たす 元の表 受注番号 R R

    R 商品コード P P P 数量 商品名 りんご みかん りんご 単価 受注明細 切り出す 受注番号 ★ 商品コード ★◆ R R R P P P 数量 商品 商品コード ★ P P 商品名 りんご みかん 単価 ① 候補キー {受注番号, 商品コード}。数量は両⽅そろって初めて決まる。 ② 違反している従属 商品コード → 商品名‧単価。キーの⼀部だけで決まる部分関数従属。 ③ 判定 第1正規形。複合キーができた時点で 1NF、部分従属があるので 2NF 未満。 直ったこと 「りんご‧100」が2⾏に書かれていたのが、商品表の1⾏になった。単価改定は1か所で済む。 商品コードは主キーの一部と外部キーを兼ねる 今ココ 判定演習 7/10
  6. ▪郵便番号と住所が互いに決め合っている 例③ 住所表 — 候補キーが2つ 対象の表 郵便番号 - 成り⽴つ関数従属 都道府県

    東京都 東京都 東京都 市区町村 千代⽥区 千代⽥区 渋⾕区 番地 - 郵便番号 → 都道府県 郵便番号 → 市区町村 {都道府県, 市区町村, 番地} → 郵便番号 この表は第何正規形か。分解が必要なら分解後の表も答える。 1つの郵便番号に複数の番地があり、住所からは郵便番号が⼀意に決まるものとする。 まず候補キーを2つとも出せるかが分かれ目 今ココ 判定演習 8/10
  7. ▪分解できても、失うものがある 解答③ 郵便番号で切り出す 答え:3NF は満たすが BCNF 違反。郵便番号で切り出す 元の表 郵便番号 -

    都道府県 東京都 東京都 東京都 市区町村 千代⽥区 千代⽥区 渋⾕区 番地 - 郵便地域 切り出す 郵便番号 ★ - 都道府県 東京都 東京都 市区町村 千代⽥区 渋⾕区 住所 郵便番号 ★◆ - 番地 ★ - ① 候補キー {郵便番号, 番地} と {都道府県, 市区町村, 番地} の2つ。番地を共有している。 ② 違反している従属 郵便番号 → 市区町村。郵便番号だけでは⾏が決まらない = スーパーキーではない。 ③ 判定 3NF は満たすが BCNF 違反。全属性が候補キーの⼀部なので 3NF は通る。 直ったこと 「東京都‧千代⽥区」が2⾏に書かれていたのが、郵便地域表の1⾏になった。 代償:{都道府県, 市区町村, 番地} → 郵便番号 が分解後の表では検査できない(従属が保存されない)。 3NF を満たしていても BCNF 違反は起こりうる 今ココ 判定演習 9/10
  8. ▪手順ではなく、判断の順番として覚える 今回のまとめ 01 候補キーを先に出すと迷わない 単一なら 2NF は自動。重なりが無ければ BCNF まで見なくてよい。 02

    止まった段が、そのまま答え 部分従属 → 推移的従属 → キーの一部、の順に見ていく。 03 段を上げる理由が言えるか 説明できないなら、その分解は止めてよい。目的は異常の防止。 今ココ まとめ 10/10