テーブルの役割を一つにする
クラス設計と同じで、テーブルの役割は単純にすべきである。
関心のある情報のグループごとに別のテーブルに分ける。
例えば、商品にはさまざな属性情報がある。
・仕様(色、サイズ、機能など)
・価格や割引ルール
・仕入れルート
・原価
・在庫数
・在庫場所
・販売開始/販売停止の状態や予定日
など。
「商品」という一つの「なんでもテーブル」に情報を詰め込んで、アプリケーションプログラムのほうで、さまざまな検索条件を使い分けるのは、典型的なアンチパターン。
それぞれの情報ごとに別テーブルを用意して、ひとつのテーブルは、一つの関心だけを管理する設計が基本。
テーブルを細かく分割することを嫌う人が多いの本当につらい。