mynooのブログ

酔った勢いで日々思ったこと感じた事を気まぐれで文章化します。

DB設計ではどこまで正規化するべきか?

システム開発にあたってDB設計が重要なのは言うまでもないが、設計思想は、設計者やプロジェクトによって千差万別である。

 

経験上、主な違いは以下の3点である。

  1. 正規化の徹底さ
  2. データ型の厳密さ
  3. 予備項目の有無

まず、正規化について。

今回は、正規化の是非について自分なり考えをまとめようと思う。

 正規化をどこまで徹底するかは、DBと画面、どちらを中心に設計時しているかだと思っている。

 DBを中心に設計している場合は、しっかり正規化していることが多い。一方、画面を中心に設計している場合は、正規化されておらず、画面の項目がテーブルのカラムと一対一で対応していることが多い。ちなみに、個人的には、前者がシステム設計のあるべき姿だと考えている。なぜなら、DBを中心に設計すると処理がシンプルになるからである。

 たとえば、insert時にデフォルト値を気にする必要もないし、update時に同一のカラムを一括で更新する必要もないし、select時にdistinctする必要もない。また、性能問題の解決のために無駄にindexを作成する必要もない。正規化されていないテーブルをチューニングしていると、indexで正規化をしているような感覚に陥ることがある

 システム設計とは、ユーザー⇔アプリケーション、アプリケーション⇔DBのインターフェースを設計することに等しい。つまり、ユーザーとDBは直接メッセージをやり取りをしない。UIとDBは分けて考えるべきなのである。