2009-03-30 3 views
2

私が設計しているデータベースの小さくても重要なコーナーは、任意の計算の結果を格納するために使用されます。これらの結果はどのようなタイプであってもよい。どのようにして、リレーショナルデータベース内の任意の型であることができる値フィールドを表現できますか?値が任意のタイプになることができるキー/値ペアの表現(リレーショナルデータベース内)

私が考えることができるのは、すべてが外部キーを持つ汎用データ型を持つデータ型に基づいて別のテーブルを持つことだけです。値を取得するためには、私は別のテーブルの束に参加しなければならないだろうから、それは私にとって正しいとは思わない。より良い方法が必要です。

+0

提案されている解決策はどれですか? –

答えて

0

あなたの最善の選択肢はおそらくデータをシリアル化し、文字列またはxmlのいずれかを使用することです。

MS SQL Serverを使用している場合の別のオプションは、LOB以外のものを格納できるSQL_VARIANT型です。ただし、シリアライゼーションはどのプラットフォームでも機能し、理解しやすく、最適化しやすいため、シリアライズよりもこのオプションを推奨しません。

1

結果をある種のバイナリ形式にシリアル化できますか?その場合、「イメージ」がデータを保持し、フィールド自体として型自体を格納することもできます。

0

抽象レイヤーにすべてのタイプをシリアライズする機能がある場合は、それらをバイナリデータとして保存し、シリアライズイン、デシリアライズアウトすることができます。おそらく、データ型を示す列があります。 CASTable以外のデータ型があれば、さらに設定されます。

+0

しかし、テーブルを壊さないでください。 (各データ型の列と、選択するデータ型の列を持つこともできます)。 – dkretz

0

前に使用したアプローチの1つは、その型を識別する別の文字列フィールドを使用して、直列化された値を格納することです。たとえば、.NETの場合は、 "System.Decimal"とシリアル化された10進数値を格納することができます。これは、バイナリまたはXMLシリアル化で、それぞれBLOBまたは長い文字列フィールドを使用して動作します。

0

すべての値をVARCHARとして保存できます。データベースから値を取得すると、それを異なる正規表現と照合することができます。各データ型の正規表現を用意してください。どちらの方法であれ、どちらのデータ型でもデータ型があります。