【超特急】「SQLアンチパターン」 総おさらいLT 【4分で25個】
PHP Conference Japan 2021 株式会社M&Aクラウド つざき
Copyright© M&Aクラウド【超特急】「SQLアンチパターン」 総おさらいLT 【4分で25個】PHP Conference Japan 2021株式会社M&Aクラウド つざき
View Slide
Copyright© M&Aクラウド 2PHPといえばWebアプリケーション。Webアプリケーションといえば切っては切り離せないのがデータベースです
Copyright© M&Aクラウド↑これで紹介されている25個のアンチパターンを紹介します3
Copyright© M&Aクラウド 4I部 データベース論理設計のアンチパターン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クラウド 5I部 データベース論理設計のアンチパターン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クラウド 11IDリクワイアドIDという主キーをとりあえずで作るな使えたら自然キーを使え
Copyright© M&Aクラウド4. キーレスエントリ(外部キー嫌い)12
Copyright© M&Aクラウド 13キーレスエントリ(外部キー嫌い)外部キー使え
Copyright© M&Aクラウド5. EAV(エンティティ・アトリビュート・バリュー)14
Copyright© M&Aクラウド 15EAV(エンティティ・アトリビュート・バリュー)可変な属性を実現するために汎用的な属性テーブルを作るな
Copyright© M&Aクラウド6. ポリモーフィック関連16
Copyright© M&Aクラウド 17ポリモーフィック関連親タイプみたいなカラムで従属テーブルを分岐するなバグ改善提案11多コメント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クラウド 45SQLインジェクションアプリケーションで動的に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