Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
正規化の考え方を、架空のレストランチェーンで整理しよう。
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
harecome
March 31, 2024
Technology
73
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
正規化の考え方を、架空のレストランチェーンで整理しよう。
第1~第4正規化、ボイスコッド正規化の方法を整理したよ!
harecome
March 31, 2024
Other Decks in Technology
See All in Technology
Multica × 長期記憶:40個のミニプロジェクト管理
eiei114
1
210
Code4Lib JAPANカンファレンス2026 開会挨拶 / Code4Lib JAPAN Conference 2026: Opening Remarks
ykiyota
0
250
Tab5をRubyで動くパソコンにする
kishima
2
270
Adaptive Warehouse を今すぐ導入すべき理由と迷ったときの判断基準
__allllllllez__
0
130
PfEingのアプローチで働こう
rindrics
0
200
ペアプロの価値はコードを書くことだけじゃない
codmoninc
PRO
0
150
リージョンの壁を越える、 ちょっと変わったAWSサービスの話
falken
PRO
0
270
こんなアーキテクチャ図は嫌だ BEYOND THE TIME: 半年後の自分へ贈る15のメッセージ / 15 of Anti-pattern in AWS Architecture Diagrams
naospon
3
280
Webとヘルスデータ
yukukotani
1
200
【視聴者参加型!】AWSセキュリティアンチパターンクイズ
syoshie
0
460
Snowflakeで実現する全社横断の顧客の声(VOC)分析・活用基盤@Snowflake World Tour Tokyo 2026
yuto16
0
120
AIに丸投げしないトイル削減 / Eliminating Toil Without Leaving It All to AI
kohbis
4
1k
Featured
See All Featured
The untapped power of vector embeddings
frankvandijk
2
1.9k
Are puppies a ranking factor?
jonoalderson
2
3.9k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3k
Darren the Foodie - Storyboard
khoart
PRO
3
3.9k
Utilizing Notion as your number one productivity tool
mfonobong
4
580
GitHub's CSS Performance
jonrohan
1033
470k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
520
Code Review Best Practice
trishagee
74
20k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
Designing Powerful Visuals for Engaging Learning
tmiket
1
530
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.9k
Believing is Seeing
oripsolob
1
210
Transcript
正規化の考え方を、 架空のレストランチェーンで整理しよう。
0 | ワードの整理 (1/2) • 正規化の目的 CRUD 操作時に不整合が起こらないようにすること • 無損失分解
正規化/テーブル分割後にもとに戻せること • 候補キー ここでは、あるレコードにおいて、行を特定できるカラム、 または複数カラムの組み合わせのこと 商品ID 商品名 AA01 辛味チキン AA02 アロスティチーニ(2本) AA04 ポップコーンシュリンプ 店舗ID 商品ID 価格 S0001 AA01 300 S0002 AA01 400 S0002 AA02 400
0 | ワードの整理 (2/2) • 関数従属 あるレコードにおいて、特定のカラムAの値が決まれば、 別のカラムBも特定できる(=一意に定まる)ような関係のこと ←商品IDは商品に関数従属している 商品ID
商品名 AA01 辛味チキン AA02 アロスティチーニ(2本) AA04 ポップコーンシュリンプ AA25 柔らか青豆の温サラダ MT07 ディアボラ風ハンバーグ PA13 ラムのラグーソース(ペンネ) RP05 セットプチフォッカ DB01 セットドリンクバー
1 | 第1正規化 • 導出項目の排除 同じ表の他カラムから導出できるカラムは排除する 席番号 注文1 注文2 注文3
27 AA25 MT07 DB01 32 PA13 RP05 単価 個数 価格 300 3 900 400 5 2000 • 繰り返し項目の排除 同じ種類のデータカラムが複数並んでいる場合、1列にまとめる 単価 個数 300 3 400 5 席番号 注文 27 AA25 27 MT07 27 DB01
2 | 第2正規化 • すべての候補キーにおいて部分関数従属を排除 候補キーの一部→非キー属性の関数従属を排除する (=候補キーに従属しているカラムは別表にする) 店舗ID 商品ID 価格
S0001 AA01 300 S0002 AA01 300 S0002 AA02 400 • 部分関数従属 非キー(行を特定できない)が、候補キーに従属していること 店舗ID 商品ID S0001 AA01 S0002 AA01 S0002 AA02 商品ID 価格 AA01 300 AA02 400
3 | 第3正規化 • テーブル内の推移関数従属を排除 非キー→非キーの関数従属を排除する (=非キーに従属しているカラムは別表にする) • 推移関数従属 非キーが、別の非キーに従属していること
商品ID 主原料 業者 産地 AA01 鶏肉 A牧場 宮城 AA02 羊肉 B牧場 兵庫 AA04 エビ C水産 愛媛 商品ID 主原料 業者 AA01 鶏肉 A牧場 AA02 羊肉 B牧場 AA04 エビ C水産 業者 産地 A牧場 宮城 B牧場 兵庫 C水産 愛媛
4 | 第4正規化 • 多値従属を排除 (概略)ひとつのIDに対して複数項目あるデータを、種類ごとにまとめる 決済ID 決済方法 商品コード K0001
JCB AA01, DB01 K0002 VISA, 商品券 AA25, RP05 決済ID 決済方法 商品コード K0001 JCB AA01 K0001 JCB DB01 K0002 VISA AA25 K0002 VISA RP05 K0002 商品券 AA25 K0002 商品券 RP05 決済ID 決裁方法 K0001 JCB K0002 VISA K0002 商品券 決済ID 商品コード K0001 AA01 K0001 DB01 K0002 AA25 K0002 RP05
5 | ボイスコッド正規化 • 非キーから候補キーへの関数従属を排除 (=非キーに従属しているカラムは別表にする) 第3正規系からスタートする 店舗ID 商品ID 配送センター
S0001 AA01 神奈川 S0002 AA01 栃木 S0002 AA02 東京1 S0003 AA04 東京2 店舗ID 配送センター S0001 神奈川 S0002 栃木 S0002 東京1 S0003 東京2 商品ID 配送センター AA01 神奈川 AA01 栃木 AA02 東京1 AA04 東京2
6 | 正規化の注意点 • 無損失分解 正規化/テーブル分割後にもとに戻せること 決済ID 商品ID 商品名 注文数
K0001 AA01 辛味チキン 3 K0002 AA01 辛味チキン 2 K0003 AA02 アロスティチーニ(2本) 8 K0004 AA04 ポップコーンシュリンプ 10 決済ID 注文数 K0001 3 K0002 2 K0003 8 K0004 10 商品ID 商品名 AA01 辛味チキン AA02 アロスティチーニ(2本) AA04 ポップコーンシュリンプ
7 | 参考になったサイト ZDNET 「CRUD」 項 https://japan.zdnet.com/glossary/exp/CRUD/?s=4 mLAB 「情報無損失分解と関数従属性」 https://mukai-lab.info/pages/classes/database/chapter5/
Qiita「正規化の要点を理解する」 @mochichoco (2021年3月12日最終更新) https://qiita.com/mochichoco/items/2904384b2856db2bf46c Qiita 「正規化について整理」 @dengzais8 (2023年1月9日最終更新) https://qiita.com/dengzais8/items/2aef61e3ddb0b1d1567e 工業大学生ももやまのうさぎ塾 うさぎでもわかるデータベースの正規化・正規系判定(基本情報・応用情報) https://www.momoyama-usagi.com/entry/info-database-seikika#1-3