Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
正規化の考え方を、架空のレストランチェーンで整理しよう。
Search
harecome
March 31, 2024
Technology
0
71
正規化の考え方を、架空のレストランチェーンで整理しよう。
第1~第4正規化、ボイスコッド正規化の方法を整理したよ!
harecome
March 31, 2024
Tweet
Share
Other Decks in Technology
See All in Technology
「Managed Instances」と「durable functions」で広がるAWS Lambdaのユースケース
lamaglama39
0
310
Databricks向けJupyter Kernelでデータサイエンティストの開発環境をAI-Readyにする / Data+AI World Tour Tokyo After Party
genda
1
110
Playwright x GitHub Actionsで実現する「レビューしやすい」E2Eテストレポート
kinosuke01
0
590
乗りこなせAI駆動開発の波
eltociear
1
1.1k
mairuでつくるクレデンシャルレス開発環境 / Credential-less development environment using Mailru
mirakui
1
170
生成AI活用の型ハンズオン〜顧客課題起点で設計する7つのステップ
yushin_n
0
140
今からでも間に合う!速習Devin入門とその活用方法
ismk
1
670
業務のトイルをバスターせよ 〜AI時代の生存戦略〜
staka121
PRO
2
120
非CUDAの悲哀 〜Claude Code と挑んだ image to 3D “Hunyuan3D”を EVO-X2(Ryzen AI Max+395)で動作させるチャレンジ〜
hawkymisc
2
170
AIと二人三脚で育てた、個人開発アプリグロース術
zozotech
PRO
1
720
re:Invent2025 コンテナ系アップデート振り返り(+CloudWatchログのアップデート紹介)
masukawa
0
360
MapKitとオープンデータで実現する地図情報の拡張と可視化
zozotech
PRO
1
140
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
28
2.4k
KATA
mclloyd
PRO
32
15k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
Embracing the Ebb and Flow
colly
88
4.9k
Docker and Python
trallard
47
3.7k
Optimizing for Happiness
mojombo
379
70k
Rebuilding a faster, lazier Slack
samanthasiow
84
9.3k
BBQ
matthewcrist
89
9.9k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
GitHub's CSS Performance
jonrohan
1032
470k
Faster Mobile Websites
deanohume
310
31k
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