Open3
DB設計で気をつけること
- 制約をつけること
- NOT NULL
- プロダクトの規模にもよるが、だいたいは、第三正規化まではする。
- ソーシャルゲーム業界では、JOINによる計算量増加を考慮して、あえて非正規化することもあるよう。
- プロダクトの規模にもよるが、だいたいは、第三正規化まではする。
- UNIQUE
- 一意性を保証するために設定し、データの重複を防ぐため。
- 外部キー制約
- 関連するテーブル間の整合性を確保するため。
- NOT NULL
- 適切なデータ型にする。
- 長くない可変文字列を入れる場合(大体1024文字より下くらい。)はvarcharを利用する。
- 別ページに保存されてしまうので、安易にTEXT型にしない。
- 精度のトラブルに巻き込まれたくないためfloatは使わない。
- decimal
- double
- 長くない可変文字列を入れる場合(大体1024文字より下くらい。)はvarcharを利用する。
- インデックスの性質を知り、適切に貼ること
- 複合indexの順番の重要性の性質を知り、クエリのパフォーマンスを最大化するように設計する。
- 例えば、以下のようなクエリの場合は、複合インデックスが (department, hire_date) の順序で設定されている必要がある。
SELECT * FROM employees WHERE department = 'Sales' ORDER BY hire_date DESC;
- ネステッドループ結合において、内部表の結合条件のカラムにインデックスが貼られていることが重要。(MySQLではほぼネステッドループ結合)
- 複合indexの順番の重要性の性質を知り、クエリのパフォーマンスを最大化するように設計する。
参考
データモデリングについて
基礎
- https://scrapbox.io/kawasima/イミュータブルデータモデル
- 正規化について「達人に学ぶDB設計徹底指南書」
- https://scrapbox.io/kawasima/時間経過とともに状態の変わるリソース
イベントに関して
データベース設計におけるNULLについて
論理設計のアンチパターン
- SQLアンチパターン1~8章
DB設計で考慮するべきこと
これ何?
DB設計で考慮するべきことをまとめます。
MySQLにおけるデータ型
- MySQLにおけるデータ型に関しては、MySQLのドキュメントを参照するのが良いですが、一部曖昧な記述になっている部分があります。よって、実際に動かしながら読むことを推奨します。
- 個人的に記事としてまとめたものがあるので、以下にリンクを貼っておきます。
イベントとリソースを分けて考える
イミュータブルデータモデリングは重要です。
論理設計におけるアンチパターンを知る
- SQLアンチパターン
インデックスについて
- 複合インデックスにおけるカラムの順番の重要性
- 前方一致検索にしかインデックスが有効でないこと
- 降順インデックスとは何なのか?
参考文献
以下の記事もしくは書籍を参照し、B-Treeインデックスに関する理解を深めるのが良いです。
(記事だと無料なので安くすみます)