DB上にFLEE項目を設ける理由はなんでしょうか?

既に居ない方(元SE)が作成したDBを見ると、フィールド名に「店コード」「売上1」「売上2」・・などの必要な項目のほかに「Flee1」「Flee2」「Flee3」などの項目がありました。設計書を見ても「予備項目」とあるばかりで、Distinctなどで集約をかけてもやはり、空白で、Varchar型で100文字分×3フィールドとってあるばかりです。その人が設計したテーブルは運用中も含めて40以上あるのですが、すべて同様になっています。
運用環境はOracleだったりAccessだったり色々ですが、同様になっています。
①これは何のためにあるのでしょうか。テーブル再設計よりもメリットのあることなのでしょうか。メリットデメリットを教えてください。
②この方法って一般的なのでしょうか。

回答の条件
  • 1人2回まで
  • 登録:2008/05/14 15:28:47
  • 終了:2008/05/15 00:17:35

ベストアンサー

id:hirotow No.1

hirotow回答回数131ベストアンサー獲得回数102008/05/14 15:46:29

ポイント28pt

データベースというのは基本的に一定長のバイナリを連結したものですが、

この構造上列の追加と削除はかなり負荷が大きい処理で、たぶん分単位の時間がかかります。

そこで、ある程度余分な列を確保しておくことで負荷をかけずに列追加ができるようにすることがあり、結構ポピュラーな方法です。


デメリットとしてはデータベースのサイズが必要以上に大きくなることと見た目が悪いことです。


ちなみにここらへんで質問するともっと詳しいことが聞けるかと思います。

http://bbs.wankuma.com/

id:hakob

なるほど。確かに列の追加やテーブルを一度Dropして再度作成・・・などすると時間がすごくかかるので、対処としてですか。

Web公開サービスなどで緊急に、かつ処理をとめることが出来ないときなどにはもちろんその他の場合もメリットはありそうですね。納得できました。ポピュラーな手段なのですね。

2008/05/14 15:56:13

その他の回答(2件)

id:hirotow No.1

hirotow回答回数131ベストアンサー獲得回数102008/05/14 15:46:29ここでベストアンサー

ポイント28pt

データベースというのは基本的に一定長のバイナリを連結したものですが、

この構造上列の追加と削除はかなり負荷が大きい処理で、たぶん分単位の時間がかかります。

そこで、ある程度余分な列を確保しておくことで負荷をかけずに列追加ができるようにすることがあり、結構ポピュラーな方法です。


デメリットとしてはデータベースのサイズが必要以上に大きくなることと見た目が悪いことです。


ちなみにここらへんで質問するともっと詳しいことが聞けるかと思います。

http://bbs.wankuma.com/

id:hakob

なるほど。確かに列の追加やテーブルを一度Dropして再度作成・・・などすると時間がすごくかかるので、対処としてですか。

Web公開サービスなどで緊急に、かつ処理をとめることが出来ないときなどにはもちろんその他の場合もメリットはありそうですね。納得できました。ポピュラーな手段なのですね。

2008/05/14 15:56:13
id:memo77 No.2

memo77回答回数238ベストアンサー獲得回数202008/05/14 15:53:28

ポイント26pt

運用を開始してからのフィールド追加に対応するためですね。

過去、言語的にデータベースへのフィールド追加が困難だった時代の名残です。

特にSQLに馴染めずに、いつまでもカーソルを回すことしかできないようなエンジニアがよく使うようです。


個人的には、現在のデータベースアーキテクチャや開発環境であれば、メリットよりもデメリットのほうが大きいと評価します。

フィールドにしっかりと意味を持たせて名前をつけ、必要な型を指定したほうが、設計の見通しもいいです。

型変換によるオーバーヘッドも、データの不整合に備えてエラーチェックを組む必要もありません。

id:hakob

確かに名前の付け方からしてあまり気持ちのいいものではありませんね。実環境で使用する変数名にfoo だの barだのついているのを見るようで。

個人的にはストアドも、あの言語性もあって「気持ち悪い」と感じてしまうのですが。もちろんストアドでないと不可能なこともいくつかありますけどが・・・。

型変換すればいかようにでも使いまわせる、というのはちょっと盲点でした。だからvarcharでとるのか。

全体の規模感・運用性を考慮して必要が無いのならば削っていこうと思います。ありがとうございました。

2008/05/14 16:12:01
id:chuken_kenkou No.3

chuken_kenkou回答回数722ベストアンサー獲得回数542008/05/14 16:22:24

ポイント26pt

階層型やネットワーク型DBの場合は、定義変更が簡単ではないので、予備のフィールドを作っておく

ことが常識でした。

一方、RDBMSでは、列追加や列削除を容易にできることがメリットなのですけどね。

MySQLでは列追加で全行の更新が発生したり、PostgreSQLでもNOT NULLの列追加をすると、全行

更新になるようですが、商用RDBMSでは定義情報の更新だけで、実際のDB中の行は更新されない

(nullが入っているように動作する)というものが主流だと思うのですが。

id:hakob

どうにもメリットが見えづらいですよね。もちろん、表の定義情報の変更はコストのかかる処理ですが・・・

2008/05/14 16:39:42

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

  • 【質問】DB上にFLEE項目を設ける理由はなんでしょうか? 既に居ない方(元SE)が作成したDBを見ると、フィールド名に「店コード」「売上1」「売上2」・・などの必要な項目のほかに「Flee1」
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません