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

第何正規形かを判定する

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

 第何正規形かを判定する

Avatar for 赤神青空

赤神青空

August 15, 2026

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