たとえば、名簿のテーブルを作成するとして、
・idなどのコラムを考えていたとき。
・氏名
・生年月日
・性別
・アドレス
・会社
・部署
・電話番号
・FAX番号
・idこんな感じでテーブルを分けたがる人が周りにいた。
・氏名
・生年月日
・性別
------
・アドレス
・会社
・部署
・電話番号
・FAX番号
何でだろうって思って聞いても返答は、「なんとなく。」
気になって調べました。
後の仕様変更による、1対1から1対Nへの変更の可能性を考慮する場合。
つまり、仕様変更しやすいようにしとくってこと。
パフォーマンス改善を目的にテーブルを分割(非正規化という)することがある。
例として、以下のようなケースが有効。
・同じようなSELECTクエリがほとんどを占めるシステム
通常検索に使われないフィールドを別テーブルに分けることで、
クエリに使用するメモリを縮小することが出来る。
・DELETE / INSERTが多いシステム
データ型が可変長であるフィールドを別テーブルに分けることで
レコードが固定長になり、ディスクの有効活用が期待できる。
しかし、ストレージエンジン(InnoDB、MyISAM)などの違いによって状況は様々で、小中規模のシステムでは必要ない。って感じ。
結論としては、面倒なだけ。自分は分けません。



0 コメント:
コメントを投稿