Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
1NFから3NF
Search
赤神青空
August 14, 2026
Programming
20
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
1NFから3NF
赤神青空
August 14, 2026
More Decks by 赤神青空
See All by 赤神青空
MySQLとPostgreSQLって何が違うの?
akagami
0
30
第何正規形かを判定する
akagami
0
19
なぜ正規化するのか
akagami
0
22
3NFの先にあるもの
akagami
0
13
Cloudflare「Kitesurf」を読む
akagami
0
15
AWS Amplifyの、何が良いのか?
akagami
0
14
続・AWS Amplifyの、何が良いのか?
akagami
0
14
Stacked PRの、何が新しいのか
akagami
0
24
pnpm、そろそろ移行していいのでは
akagami
0
9
Other Decks in Programming
See All in Programming
夏だ!祭りだ!祭りとはドメインモデリングでは?
ryugen04
0
290
20260722_microCMSで考える、AI時代のコンテンツ運用設計
yosh1
0
410
仕様駆動開発の消費期限
watany
20
8.4k
いまどきの Codex で開発する visionOS アプリの開発スタイルについて
karad
0
140
複数の Claude Code が"放置"されてしまう問題をCLI ダッシュボードを自作して解決した話
sumihiro3
1
690
Google Apps Script で Ruby を動かす
kawahara
0
240
Foundation Models frameworkで画像分析
ryodeveloper
1
620
torikago - Ruby::Boxで照らすモジュラモノリスの実行境界
se4weed
1
380
リアルな遅延を測る仕様
kota_yata
1
110
jsmini JavaScript Engine を作ってみた話
yosuke_furukawa
PRO
0
320
AI時代のPHPer生存戦略 ~「言語、もうなんでもよくない?」に本気で向き合う~
vivion
0
530
Building a Meta Ray-Ban display app
akkeylab
0
160
Featured
See All Featured
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3k
AI: The stuff that nobody shows you
jnunemaker
PRO
9
910
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.5k
Optimizing for Happiness
mojombo
378
71k
Testing 201, or: Great Expectations
jmmastey
46
8.2k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
380
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
390
Designing Powerful Visuals for Engaging Learning
tmiket
1
490
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
890
Balancing Empowerment & Direction
lara
6
1.2k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
64
56k
Transcript
2026年8月 1NF第n正規形をひととおり から 3NF②まで 赤神青空
▪全4回。今回が実務で使う範囲の本体です このシリーズの地図 01 02 03 04 更新時異常とキーの言葉 注文票を4つの表に分ける BCNF・4NF・5NF 第何正規形かを答える
なぜ正規化するのか 今ココ はじめに 1NF〜3NF 3NF の先 判定演習 2/9
▪出発点は、紙の伝票をそのまま表にした形 第1正規化 — 繰り返しを行にする 第1正規化 繰り返しを⾏に展開する ⾮正規形(紙の伝票のまま) 注⽂番号 注⽂⽇ 顧客ID
顧客名 商品1 単価1 数量1 商品2 単価2 数量2 … / / C C ⾚神 りんご ⽩神 りんご みかん … … 第1正規形(1NF) ⾏に展開 注⽂番号 ★ 注⽂⽇ 顧客ID 顧客名 商品コード ★ 商品名 単価 数量 / / / C C C ⾚神 ⾚神 ⽩神 P P P りんご みかん りんご ⻩⾊い列が、横の繰り返しから縦の⾏になった。これで列の数が商品の件数に左右されない。 主キーは {注⽂番号, 商品コード} の複合キーになる。1件の注⽂が、商品の数だけ⾏に分かれる。 代わりに注⽂⽇‧顧客ID‧顧客名が⾏をまたいで重複しはじめた(⾚いところ)。 列は固定できた。代わりに赤いところが重複しはじめた 今ココ 1NF〜3NF 3/9
▪複合キーの「どこ」で決まるかで行き先が変わる 見分ける① どこで決まるかを見る 決めるもの 決まるもの 注⽂番号だけで決まる 注⽂⽇ 顧客ID 顧客名 注⽂番号
商品コードだけで決まる 商品コード 商品名 単価 両⽅そろって初めて決まる 注⽂番号 + 商品コード 数量 ⾚ = 部分関数従属。キーの⼀部だけで決まっている。ここを別表に切り出す。 緑 = 完全関数従属。複合キー全体が必要なので、明細表にそのまま残す。 赤い2組が切り出す対象。緑は明細にそのまま残る 今ココ 1NF〜3NF 4/9
▪キーの一部で決まる列が、別の表に移る 第2正規化 — どの列が、どこへ移ったか 第2正規化 部分関数従属を切り出す 1つの表 注⽂番号 ★ 注⽂⽇
顧客ID 顧客名 商品コード ★ 商品名 / / / C C C ⾚神 ⾚神 ⽩神 P P P りんご みかん りんご 単価 数量 注⽂ 切り出す 注⽂番号 ★ 注⽂⽇ 顧客ID 顧客名 商品 商品コード ★ 商品名 単価 注⽂明細 注⽂番号 ★ 商品コード ★ 数量 同じ⾊の列が、同じ表に集まる。⾊は⾏き先の印で、良し悪しではない。 ★ の2列は注⽂明細にも残る。切り出した先を指すための列として要るため。 数量だけが両⽅のキーで決まるので、動かさずに明細へ残る。 同じ色の列が同じ表に集まる。1つの表が3つに分かれた 今ココ 1NF〜3NF 5/9
▪注文表の中にまだ従属が隠れている 見分ける② 非キーを経由する連鎖を見る 推移的関数従属 注⽂番号 決める 顧客ID 決める 顧客名 結果として決まってしまう
= 推移的関数従属 主キー → ⾮キー属性 → 別の⾮キー属性 という連鎖。 真ん中で切って、顧客表を独⽴させる。これが第3正規化。 真ん中の顧客IDは、この表の主キーではない 今ココ 1NF〜3NF 6/9
▪経由している列を主キーにした表へ移す 第3正規化 — 注文表の2列が顧客表になる 第3正規化 推移的関数従属を切り出す 注⽂(2NF のとき) 注⽂番号 ★
注⽂⽇ 顧客ID 顧客名 / / C C ⾚神 ⽩神 注⽂ 切り出す 注⽂番号 ★ 注⽂⽇ 顧客ID ◆ 顧客 顧客ID ★ 顧客名 紫の2列が顧客表として独⽴した。商品と注⽂明細は、この操作では変わらない。 顧客IDは注⽂表に残る。残さないと、どの顧客の注⽂か分からなくなるため。 顧客名はどこにも重複していない。改名しても直すのは顧客表の1⾏だけ。 商品と注文明細は、この操作では変わらない 今ココ 1NF〜3NF 7/9
▪紙の伝票1枚が、ここまで分かれた できあがった4つの表 第3正規形(3NF) 紙の伝票1枚が4つの表になった 注⽂ 注⽂番号 ★ 注⽂⽇ 顧客ID ◆
/ / C C 顧客 顧客ID ★ 顧客名 C C ⾚神 ⽩神 商品 商品コード ★ 商品名 単価 P P りんご みかん 注⽂明細 注⽂番号 ★◆ 商品コード ★◆ 数量 P P P ★ = 主キー ◆ = 外部キー。◆ をたどれば、いつでも元の1枚の形に戻せる。 顧客名は顧客表だけ、単価は商品表だけにある。直す場所が1か所に決まった。 重複しているのは注⽂明細の ★ の2列だけで、これは他の表を指すために必要な重複。 実務ではここが到達点。◆ をたどれば元の形に戻せる 今ココ 1NF〜3NF 8/9
▪次回は 今回のまとめ 3NF の先にある正規形を見ます 01 3回とも「元の表 → 操作 → 結果」
紙の伝票1枚が、1NF・2NF・3NF を経て4つの表になった。 02 キーの「どこ」で決まるかを見る 一部で決まれば 2NF、非キーを経由すれば 3NF で切り出す。 03 動かないのが完全関数従属 数量は複合キー全体で決まるので明細に残る。実務での到達点は 3NF。 今ココ まとめ 9/9