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
正規化の考え方を、架空のレストランチェーンで整理しよう。
Search
harecome
March 31, 2024
Technology
0
50
正規化の考え方を、架空のレストランチェーンで整理しよう。
第1~第4正規化、ボイスコッド正規化の方法を整理したよ!
harecome
March 31, 2024
Tweet
Share
Other Decks in Technology
See All in Technology
急成長中のWINTICKETにおける品質と開発スピードと向き合ったQA戦略と今後の展望 / winticket-autify
cyberagentdevelopers
PRO
1
160
「最高のチューニング」をしないために / hack@delta 24.10
fujiwara3
21
3.4k
20241031_AWS_生成AIハッカソン_GenMuck
tsumita
0
110
物価高なラスベガスでの過ごし方
zakky
0
380
マネジメント視点でのre:Invent参加 ~もしCEOがre:Inventに行ったら~
kojiasai
0
460
WINTICKETアプリで実現した高可用性と高速リリースを支えるエコシステム / winticket-eco-system
cyberagentdevelopers
PRO
1
190
visionOSでの空間表現実装とImmersive Video表示について / ai-immersive-visionos
cyberagentdevelopers
PRO
1
110
30万人が利用するチャットをFirebase Realtime DatabaseからActionCableへ移行する方法
ryosk7
5
350
新R25、乃木坂46 Mobileなどのファンビジネスを支えるマルチテナンシーなプラットフォームの全体像 / cam-multi-cloud
cyberagentdevelopers
PRO
1
130
話題のGraphRAG、その可能性と課題を理解する
hide212131
4
1.5k
[JAWS-UG金沢支部×コンテナ支部合同企画]コンテナとは何か
furuton
3
250
LeSSに潜む「隠れWF病」とその処方箋
lycorptech_jp
PRO
2
120
Featured
See All Featured
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
250
21k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
790
The Power of CSS Pseudo Elements
geoffreycrofte
72
5.3k
Six Lessons from altMBA
skipperchong
26
3.5k
Writing Fast Ruby
sferik
626
61k
Happy Clients
brianwarren
97
6.7k
GraphQLとの向き合い方2022年版
quramy
43
13k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
27
1.9k
A Philosophy of Restraint
colly
203
16k
Art, The Web, and Tiny UX
lynnandtonic
296
20k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
28
7.9k
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