このエントリーをブックマークに追加 このエントリをlivedoorクリップに追加 Yahoo!ブックマークに登録

1対1のリレーション構造のテーブルの意味

2009年1月9日金曜日 by mikuta

たとえば、名簿のテーブルを作成するとして、

・id
・氏名
・生年月日
・性別
・アドレス
・会社
・部署
・電話番号
・FAX番号
などのコラムを考えていたとき。
・id
・氏名
・生年月日
・性別
------
・アドレス
・会社
・部署
・電話番号
・FAX番号
こんな感じでテーブルを分けたがる人が周りにいた。
何でだろうって思って聞いても返答は、「なんとなく。」
気になって調べました。


後の仕様変更による、1対1から1対Nへの変更の可能性を考慮する場合。
 つまり、仕様変更しやすいようにしとくってこと。

パフォーマンス改善を目的にテーブルを分割(非正規化という)することがある。
 例として、以下のようなケースが有効。

・同じようなSELECTクエリがほとんどを占めるシステム
 通常検索に使われないフィールドを別テーブルに分けることで、
 クエリに使用するメモリを縮小することが出来る。

・DELETE / INSERTが多いシステム
 データ型が可変長であるフィールドを別テーブルに分けることで
 レコードが固定長になり、ディスクの有効活用が期待できる。

しかし、ストレージエンジン(InnoDB、MyISAM)などの違いによって状況は様々で、小中規模のシステムでは必要ない。って感じ。

結論としては、面倒なだけ。自分は分けません。

Filed under having  

0 コメント: