2009-08-04 5 views
0

1つの表に未知のデータタイプを処理する方法それはそうなるでしょう。私はこの未知の型付きのデータを格納するためにテーブル(またはあまり好ましくはテーブル)が必要です。私はするつもりです何を考えて私は私が私のデータベース内のデータの一般的な部分(int型、float型、または文字列かもしれない)を格納する必要がある状況がありますが、私は前もって知らない

は、各レコードのいずれかを使用して他の人NULLを残して、各データ型の列を持っています。これは、データベースの上にいくつかのロジックが必要ですが、これはあまりにも問題ではありません。

基本的に、このようなことを行うためのベストプラクティス方法はありますか?私はこれよりもハックの少ないものは考えていないが、これはやや共通の問題だと思われる。前もって感謝します。

EDIT:これは3NFとも考えられますか?

答えて

1

あなたは簡単にデータベースバックエンドとして使用すると、used SQLiteかのことを行うことができます:バージョン3データベースで

どれでも列、INTEGER PRIMARY KEY列を除いて、任意の型の値を格納するために使用することができます。

他のRDBMSシステムでは、私はPhilipのソリューションに行きます。ソフトウェア(ビジネスアプリケーション)の私のラインで、私は要件のこの種は、必要とされるであろう任意の状況(不明なデータ型を持つ値)を考えることはできません

注意。ドメインモデルに欠陥がない限り、もちろん...私は、他のソフトウェアラインでは異なるプラクティスが起きるかもしれないと想像していますが、全体のデザインを再考することをお勧めします。

0

私はこれを行うとしたら、私はあなたの方法のどちらかを選ぶだろうか、私は、文字列にすべてをキャストして、1つの列のみを使用します。もちろん、型を持つ別の列があります(おそらく最初のメソッドにも便利です)。

私はおそらくあなたの方法に行くだろう速いコードのために。アプリケーションが確実にデータ型を変換することができた場合は

+0

ええ、私は私が最初にすべての文字列と 'Integer.parseIntを()'使用されるが、それはあまりにも遅くなることが分かった、言及を忘れてしまった(とリソース集約 - かなりシンプルなアプリいけない豚のCPUを)。 – twolfe18

1

は、元のデータ型を追跡するために、第二のカラムと可変長のバイナリ列に基づいて、単一のカラム・ソリューションを、考えるかもしれません。 (私は以前これをベースにして非常に小さなルーチンを実行していましたが、それは十分に機能しました)。アプリケーションまたはデータベース側で変換がより効率的に処理されるかどうかをテストすると表示されます。

関連する問題