2014年11月25日

62. 頻繁に追加される明細項目の管理について

(仕様追加などにより)頻繁に追加される明細項目をDBで管理する場合は、基本、縦持ち形式とすること。
--
縦持ち形式とは、サブテーブル(明細項目用)を定義し、メインテーブル(基本項目用)から明細項目を除外することを指す。
なお、サブテーブルの主キーは、{メインテーブルの主キー}カラム + 明細項目IDカラム とする。
--
これにより、明細項目を追加する度に、カラムを追加する必要がなくなる。
また、明細項目数に制限がない(理論上)。

ただし、明細項目を検索条件に指定すること(特定の明細項目値を持つデータを抽出するなど)が非常に困難となるため、注意すること。
・各明細項目が(カラムではなく)レコードであるために、単に And条件 や Or条件 を指定したいだけでも、副問い合わせ(もしくはテーブル結合)をしなければならない。
・検索条件( And条件 や Or条件 )が増える毎に、副問い合わせ(もしくはテーブル結合)の数も増やさなければならない。※そもそも表現し切れない(特に Or条件 が含まれる場合)。
・明細項目IDが(カラム名ではなく)カラム値であるために、インデックスが有効にならない(データ量が多くなればなるほど大きくパフォーマンスがダウンする)。
・一旦、SQL文で横持ち形式に変換する(もしくは左記をビューとして定義する)方法もあるが、結局、インデックスが有効にならない(データ量やカラム数が多くなればなるほど大きくパフォーマンスがダウンする)。

この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック