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
71
正規化の考え方を、架空のレストランチェーンで整理しよう。
第1~第4正規化、ボイスコッド正規化の方法を整理したよ!
harecome
March 31, 2024
Tweet
Share
Other Decks in Technology
See All in Technology
Exadata Database Service on Dedicated Infrastructure(ExaDB-D) UI スクリーン・キャプチャ集
oracle4engineer
PRO
8
7.2k
Oracle Cloud Infrastructure IaaS 新機能アップデート 2025/12 - 2026/2
oracle4engineer
PRO
0
110
作りっぱなしで終わらせない! 価値を出し続ける AI エージェントのための「信頼性」設計 / Designing Reliability for AI Agents that Deliver Continuous Value
aoto
PRO
2
290
非情報系研究者へ送る Transformer入門
rishiyama
11
7.4k
クラウド × シリコンの Mashup - AWS チップ開発で広がる AI 基盤の選択肢
htokoyo
2
240
Oracle Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
4
1.2k
OCI Security サービス 概要
oracle4engineer
PRO
2
13k
ナレッジワークのご紹介(第88回情報処理学会 )
kworkdev
PRO
0
190
SRE NEXT 2026 CfP レビュアーが語る聞きたくなるプロポーザルとは?
yutakawasaki0911
1
290
JAWSDAYS2026_A-6_現場SEが語る 回せるセキュリティ運用~設計で可視化、AIで加速する「楽に回る」運用設計のコツ~
shoki_hata
0
3k
kintone開発のプラットフォームエンジニアの紹介
cybozuinsideout
PRO
0
870
堅牢.py#2 LT資料
t3tra
0
140
Featured
See All Featured
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
680
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
110k
Building AI with AI
inesmontani
PRO
1
790
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Test your architecture with Archunit
thirion
1
2.2k
Exploring anti-patterns in Rails
aemeredith
2
290
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
130
Unsuck your backbone
ammeep
672
58k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
100
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