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
【超特急】「SQLアンチパターン」 総おさらいLT 【4分で25個】
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
y-tsuzaki
October 03, 2021
Programming
910
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
【超特急】「SQLアンチパターン」 総おさらいLT 【4分で25個】
【超特急】「SQLアンチパターン」 総おさらいLT 【4分で25個】
PHP Conference Japan 2021
株式会社M&Aクラウド つざき
y-tsuzaki
October 03, 2021
More Decks by y-tsuzaki
See All by y-tsuzaki
PHPカンファレンス福岡2024 【超特急】SQLアンチパターン総おさらいLT
ytsuzaki
1
1.6k
PHPカンファレンス北海道2024 リーダブルSQL
ytsuzaki
5
840
ある日PHPerがベンチャー企業のデータ基盤を作ることになったら
ytsuzaki
1
460
【PhpStorm】モブプログラミングの実践と学び【結局はバランス?】
ytsuzaki
0
540
PHPerKaigi 2022 【Laravel】 サクッとN + 1問題を見つけて倒しチャオ!
ytsuzaki
1
3.3k
Nuxt Composition API 使ってみた
ytsuzaki
0
290
Nuxt.js x Composition API x TypeScript
ytsuzaki
0
820
PHPerKaigi 2021 LT PHPで簡単コード生成! 同じようなコードをたくさん書くなら コード生成しチャイナ!
ytsuzaki
0
170
アクセス制御ライブラリ Casbinを使ってみた
ytsuzaki
2
1.8k
Other Decks in Programming
See All in Programming
The Bowling Game- From Imperative to Functional Programming - Part 1
philipschwarz
PRO
0
310
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
12
4.7k
AI 輔助遺留系統現代化的經驗分享
jame2408
1
1.2k
Honoでのサプライチェーン侵害対策 〜 3つのライブラリに学ぶ
yusukebe
7
1.8k
技術記事、 専門家としてのプログラマ、 言語化
mizchi
14
7.4k
「なぜそう決めたのか」を残し続ける仕組み ― Notion AI カスタムエージェント × Slack連携による設計判断の自動記録 - NIKKEI Tech Talk #47
niftycorp
PRO
0
260
地域 SRE コミュニティ最前線 - ホンマでっかSRE勉強会
tk3fftk
0
220
Snowflake Summitでの新機能 CoCo / CoWork / snowflake-summit-2026-overall-what-new-coco
tatsuhiro
1
220
気圧・高度・GPSを記録&可視化するアプリ「Koudo」を作った話
hjmkth
1
350
AI時代の仕事技芸論〜ソフトウェア開発で「遊ぶように働く」職人的熟達のすすめ(スクフェス仙台 2026バージョン)
kuranuki
0
610
AI駆動開発を妨げる技術的負債の解消アプローチ / ai-refactoring-approach
minodriven
17
8.9k
えっ!!コードを読まずに開発を!?
hananouchi
0
190
Featured
See All Featured
Making the Leap to Tech Lead
cromwellryan
135
10k
Navigating Team Friction
lara
192
16k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
230
Faster Mobile Websites
deanohume
310
32k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
360
Skip the Path - Find Your Career Trail
mkilby
1
170
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.2k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
290
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.4k
KATA
mclloyd
PRO
35
15k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
890
Transcript
Copyright© M&Aクラウド 【超特急】 「SQLアンチパターン」 総おさらいLT 【4分で25個】 PHP Conference Japan 2021
株式会社M&Aクラウド つざき
Copyright© M&Aクラウド 2 PHPといえば Webアプリケーション。 Webアプリケーションといえば 切っては切り離せないのが データベースです
Copyright© M&Aクラウド ↑これで紹介されている 25個のアンチパターンを紹介します 3
Copyright© M&Aクラウド 4 I部 データベース論理設計のアンチパターン 1章 ジェイウォーク(信号無視) 2章 ナイーブツリー(素朴な木) 3章 IDリクワイアド(とりあえず ID) 4章 キーレスエントリ(外部キー嫌い)
5章 EAV(エンティティ・アトリビュート・バリュー) 6章 ポリモーフィック関連 7章 マルチカラムアトリビュート(複数列属性) 8章 メタデータトリブル(メタデータ大増殖) II部 データベース物理設計のアンチパターン 9章 ラウンディングエラー(丸め誤差) 10章 サーティワンフレーバー( 31のフレーバー) 11章 ファントムファイル(幻のファイル) 12章 インデックスショットガン(闇雲インデックス) III部 クエリのアンチパターン 13章 フィア・オブ・ジ・アンノウン(恐怖の unknown) 14章 アンビギュアスグループ(曖昧なグループ) 15章 ランダムセレクション 16章 プアマンズ・サーチエンジン(貧者のサーチエンジン) 17章 スパゲッティクエリ 18章 インプリシットカラム(暗黙の列) 19章 リーダブルパスワード(読み取り可能パスワード) 20章 SQLインジェクション 21章 シュードキー・ニートフリーク(疑似キー潔癖症) 22章 シー・ノー・エビル(臭いものに蓋) 23章 ディプロマティック・イミュニティ(外交特権) 24章 マジックビーンズ(魔法の豆) 25章 砂の城
Copyright© M&Aクラウド 5 I部 データベース論理設計のアンチパターン 1章 ジェイウォーク(信号無視) 2章 ナイーブツリー(素朴な木) 3章 IDリクワイアド(とりあえず ID) 4章 キーレスエントリ(外部キー嫌い)
5章 EAV(エンティティ・アトリビュート・バリュー) 6章 ポリモーフィック関連 7章 マルチカラムアトリビュート(複数列属性) 8章 メタデータトリブル(メタデータ大増殖) II部 データベース物理設計のアンチパターン 9章 ラウンディングエラー(丸め誤差) 10章 サーティワンフレーバー( 31のフレーバー) 11章 ファントムファイル(幻のファイル) 12章 インデックスショットガン(闇雲インデックス) III部 クエリのアンチパターン 13章 フィア・オブ・ジ・アンノウン(恐怖の unknown) 14章 アンビギュアスグループ(曖昧なグループ) 15章 ランダムセレクション 16章 プアマンズ・サーチエンジン(貧者のサーチエンジン) 17章 スパゲッティクエリ 18章 インプリシットカラム(暗黙の列) 19章 リーダブルパスワード(読み取り可能パスワード) 20章 SQLインジェクション 21章 シュードキー・ニートフリーク(疑似キー潔癖症) 22章 シー・ノー・エビル(臭いものに蓋) 23章 ディプロマティック・イミュニティ(外交特権) 24章 マジックビーンズ(魔法の豆) 25章 砂の城 1個10秒以下! 超特急でいきます
Copyright© M&Aクラウド 1. ジェイウォーク(信号無視) 6
Copyright© M&Aクラウド 7 ジェイウォーク(信号無視) 一つのカラムに 複数の値を入れるな ダメ!
Copyright© M&Aクラウド 2. ナイーブツリー 8
Copyright© M&Aクラウド 9 ナイーブツリー 親IDでツリー構造を実現するな(?) ※再帰クエリかけるDBなら問題じゃないかも?
Copyright© M&Aクラウド 3. IDリクワイアド(とりあえずID) 10
Copyright© M&Aクラウド 11 IDリクワイアド IDという主キーを とりあえずで作るな 使えたら自然キーを使え
Copyright© M&Aクラウド 4. キーレスエントリ(外部キー嫌い) 12
Copyright© M&Aクラウド 13 キーレスエントリ(外部キー嫌い) 外部キー使え
Copyright© M&Aクラウド 5. EAV (エンティティ・アトリビュート・バリュー) 14
Copyright© M&Aクラウド 15 EAV(エンティティ・アトリビュート・バリュー) 可変な属性を実現するために 汎用的な属性テーブルを作るな
Copyright© M&Aクラウド 6. ポリモーフィック関連 16
Copyright© M&Aクラウド 17 ポリモーフィック関連 親タイプみたいなカラムで 従属テーブルを分岐するな バグ 改善提案 1 1
多 コメント CREATE TABLE Comments ( comment_id INT UNSIGNED NOT NULL PRIMARY KEY, issue_type VARCHAR(100) NOT NULL, issue_id INT UNSIGNED NOT NULL, ) 説明むずいから本読んで><
Copyright© M&Aクラウド 7. マルチカラムアトリビュート(複数列属性) 18
Copyright© M&Aクラウド 19 マルチカラムアトリビュート(複数列属性) 複数の同じような列を 定義するな ダメ!
Copyright© M&Aクラウド 8. メタデータトリブル(メタデータ大増殖) 20
Copyright© M&Aクラウド 21 メタデータトリブル(メタデータ大増殖) テーブルや列をコピーすな ダメ!
Copyright© M&Aクラウド 9. ラウンディングエラー(丸め誤差) 22
Copyright© M&Aクラウド 23 ラウンディングエラー FLOATやDOUBLE型に 正確な値を求めるな
Copyright© M&Aクラウド 10. サーティワンフレーバー(31のフレーバー) 24
Copyright© M&Aクラウド 25 サーティワンフレーバー( 31のフレーバー) ENUMとCHECK制約使うな
Copyright© M&Aクラウド 11. ファントムファイル(幻のファイル) 26
Copyright© M&Aクラウド 27 ファントムファイル(幻のファイル) ファイルをDBで管理するときに ファイルパスをDBに格納して 物理ファイルをDB外で扱うのは 必ずしも必須ちゃうで
Copyright© M&Aクラウド 12. インデックスショットガン (闇雲インデックス) 28
Copyright© M&Aクラウド 29 インデックスショットガン(闇雲インデックス) 闇雲にインデックス貼るな
Copyright© M&Aクラウド 13. フィア・オブ・ジ・アンノウン (恐怖のunknown) 30
Copyright© M&Aクラウド 31 フィア・オブ・ジ・アンノウン(恐怖の unknown) SQLのNULLを 一般的なプログラミング言語のNULL と同じように扱うな
Copyright© M&Aクラウド 14. アンビギュアスグループ(曖昧なグループ) 32
Copyright© M&Aクラウド 33 アンビギュアスグループ(曖昧なグループ) GROUP BYで行をまとめたときに GROUP BYで指定していない カラムにアクセスすると どの行の値が返ってくるか
不定なのでやめれ
Copyright© M&Aクラウド 15. ランダムセレクション (あと10個🥺間に合え…!) 34
Copyright© M&Aクラウド 35 ランダムセレクション ランダムに1行取得したいときに ORDER BY RAND() LIMIT 1;
やるな
Copyright© M&Aクラウド 16. プアマンズ・サーチエンジン (貧者のサーチエンジン) 36
Copyright© M&Aクラウド 37 プアマンズ・サーチエンジン 全文検索したいなら リレーショナルDBじゃなくて 大人しく全文検索エンジン使え
Copyright© M&Aクラウド 17. スパゲッティクエリ 38
Copyright© M&Aクラウド 39 スパゲッティクエリ ドヤ顔でクソムズSQL書くな! 😡😡😡😡
Copyright© M&Aクラウド 18. インプリシットカラム(暗黙の列) 40
Copyright© M&Aクラウド 41 インプリシットカラム SELECT * って書くと便利だけど どんなカラム返ってくるかわからんから めんどくさいけどカラム名指定しろ
Copyright© M&Aクラウド 19. リーダブルパスワード (読み取り可能パスワード) 42
Copyright© M&Aクラウド 43 リーダブルパスワード パスワード平文で格納すなw
Copyright© M&Aクラウド 20. SQLインジェクション 44
Copyright© M&Aクラウド 45 SQLインジェクション アプリケーションで 動的にSQLを組み立てるときは SQLインジェクション対策をしろ
Copyright© M&Aクラウド 21. シュードキー・ニートフリーク (疑似キー潔癖症) 46
Copyright© M&Aクラウド 47 シュードキー・ニートフリーク IDカラムの欠番を埋めようとすなw
Copyright© M&Aクラウド 22. シー・ノー・エビル(臭いものに蓋) 48
Copyright© M&Aクラウド 49 シー・ノー・エビル アプリケーションで エラーが起こったときは 実行されるSQL文と DBからのエラーレスポンスをちゃんと見よ
Copyright© M&Aクラウド 23. ディプロマティック・イミュニティ (外交特権) 50
Copyright© M&Aクラウド 51 ディプロマティック・イミュニティ データベースコードも アプリケーションコードと同じように バージョン管理したりドキュメントを整備せよ
Copyright© M&Aクラウド 24. マジックビーンズ(魔法の豆) 52
Copyright© M&Aクラウド 53 マジックビーンズ MVCのモデルを アクティブレコードそのものにするな
Copyright© M&Aクラウド 25. 砂の城 (ラスト😭) 54
Copyright© M&Aクラウド 55 砂の城 サービスを安定稼働させるために 自動化やマニュアル整備など 万全の準備をせよ
Copyright© M&Aクラウド 56 おわり!!!😂
Copyright© M&Aクラウド ↑ 気になる方は本を買ってね 57