上司から学んだことのノートです。
利用者に操作されるテーブルは〜ed_byをつける
どの利用者が作成・編集したかはログになり、
実際にアプリケーションで利用するケースが多く考えられるため、
利用者操作によって作成・編集・削除されるテーブルに関しては
created_by
updated_by
deleted_by
カラムを設けておくと良い。
一般利用者と管理者のテーブルを分ける利点
ユーザーを一つのテーブルで管理すると、権限カラムからのチェックが必要となるが、
一般利用者と管理者を分けることにより分岐が不要となる。
また、一般利用者と管理者はユースケースが違うことが多く、
管理者は管理者に必要なカラム、一般利用者は一般利用者に必要なカラムが出てくることを考慮すると、
分けておいた方が柔軟性がある。
さらに、一般利用者をマーケティング等分析に使用するのであれば
管理者とはデータの性質が違うため、
分けた上で年齢や性別等の情報を持たせておくと、
利用しやすいデータとなる。
検索する時のことを考える
正規化はデータベースに柔軟性や保守性をもたらすが、
しすぎると利用時に多重JOINが必要になる。
するとパフォーマンス上よくなかったり、
SQLが煩雑になることによりアプリケーション側の保守性が悪くなったりする。
そのため、検索する時のことを考え、
ユーザが必要とする情報やシステムの根幹となる情報は
なるだけJOIN数を抑えて取得できるテーブル設計が良さそう。
状態を持つような情報は独立したテーブルにする
更新が多いと予想される、状態を持つような情報は
リレーションテーブルとして独立させておくと、
過去の状態が履歴として残る。
また基本的に更新が少ないテーブルと分離しておくことで
責務が分かれ、変更に強くなる。