Open3

DB設計で気をつけること

おっちー(O.S)おっちー(O.S)
  • 制約をつけること
    • NOT NULL
      • プロダクトの規模にもよるが、だいたいは、第三正規化まではする。
        • ソーシャルゲーム業界では、JOINによる計算量増加を考慮して、あえて非正規化することもあるよう。
    • UNIQUE
      • 一意性を保証するために設定し、データの重複を防ぐため。
    • 外部キー制約
      • 関連するテーブル間の整合性を確保するため。
  • 適切なデータ型にする。
    • 長くない可変文字列を入れる場合(大体1024文字より下くらい。)はvarcharを利用する。
      • 別ページに保存されてしまうので、安易にTEXT型にしない。
    • 精度のトラブルに巻き込まれたくないためfloatは使わない。
      • decimal
      • double
  • インデックスの性質を知り、適切に貼ること
    • 複合indexの順番の重要性の性質を知り、クエリのパフォーマンスを最大化するように設計する。
      • 例えば、以下のようなクエリの場合は、複合インデックスが (department, hire_date) の順序で設定されている必要がある。
       SELECT * FROM employees
       WHERE department = 'Sales'
       ORDER BY hire_date DESC;
      
    • ネステッドループ結合において、内部表の結合条件のカラムにインデックスが貼られていることが重要。(MySQLではほぼネステッドループ結合)

参考

https://zenn.dev/team_soda/articles/mysql-innodb-sql-perfomance-tuning-essentials

おっちー(O.S)おっちー(O.S)

DB設計で考慮するべきこと

これ何?

DB設計で考慮するべきことをまとめます。

MySQLにおけるデータ型

  • MySQLにおけるデータ型に関しては、MySQLのドキュメントを参照するのが良いですが、一部曖昧な記述になっている部分があります。よって、実際に動かしながら読むことを推奨します。
  • 個人的に記事としてまとめたものがあるので、以下にリンクを貼っておきます。

イベントとリソースを分けて考える

イミュータブルデータモデリングは重要です。

論理設計におけるアンチパターンを知る

  • SQLアンチパターン

インデックスについて

  • 複合インデックスにおけるカラムの順番の重要性
  • 前方一致検索にしかインデックスが有効でないこと
  • 降順インデックスとは何なのか?

参考文献

以下の記事もしくは書籍を参照し、B-Treeインデックスに関する理解を深めるのが良いです。
(記事だと無料なので安くすみます)