正規化をしないですっきりするケースに出会ったので、一時の感情で書いてみます。
とある勤怠マスタのテーブル
ユーザーごとに勤怠時間が違い、曜日ごとに勤務時間も違う。一日に複数の勤務時間が発生する場合もある。
正規化した場合のcolumn
user_id, week, start_time, end_time
正規化しない場合のcolumn
user, mon_work_times, tue_work_times, wed_work_times, thu_work_times, fri_work_times, sat_work_times, sun_work_times
work_timesのデータは「,」区切りでstart_time, end_time , start_time, end_time, ....の形式で保存する。
どう違う
正規化した場合は行が増える形になる。1ユーザーで7行や14行のデータになったりするが、正規化しない場合は1行でいい。
データを更新する場合、正規化したデータは、同じデータの判断が難しくdelete, insertで行うことになるだろう。正規化しない場合はuser_idで一つのデータとわかっているため、更新になるだろう。
正規化した場合は時間による検索がDBで簡単にできるが、正規化しない場合はアプリケーションによる判断が必要になるだろう。
検索が重要でない場合、正規化しない場合の方が圧倒的にスッキリした作りでDBのパフォーマンスが良さそうに感じる。
まとめ
自分でつくった後に移行データをみた結果、正規化しない方がいいじゃん。と感じてしまったために書いた記事になります。
最近は正規化しすぎて複雑なアプリケーションを作ることが多く、悩んでいたところでシンプルな作りを見てさらに凹んでおります。
正規化して困るケースはあるけど、正規化しないで困るケースって意外と少ない気がします。テーブルのカラム追加とかロックがかかる場合には別れているケースがありがたい。
まぁ、見極めが難しい問題ですが、経験ということで次に活かしましょうか。