2012-01-16 15 views
3

異なる値の同じ値を格納する必要があります。値は、DATE、INT、BOOLEAN、DOUBLEおよび他のタイプを表すことができます。可能であれば、複数のテーブルを使用していないかどうか疑問に思っています。それぞれ異なるタイプのテーブルです(主に検索、フィルタリング)。主にNULL値を持つ複数の列テーブルを1つの行に格納すると、ストレージとパフォーマンスが大きく低下しますか?(my)SQLデータベース - 異なる値の同じ値を格納する

私は一つの値だけ列が入力されます、そこから例えばカラムを持つテーブルを考えています。そのアプローチは明らかに間違っている

id valueVarchar valueDate valueBoolean valueInt valueDouble 

場合は私を啓発してください。

私は、MySQL(InnoDB)(データベースは大きな問題ではなく、必要に応じて変更できます)とJPAを使用してJSFアプリケーションを作成しています。

編集:

私は1つのテキスト値フィールドで一つのテーブルを持っている今の通り。私は値をサーバー側のデータベースに/から変換しています。プロジェクトはちょうど最近開始され、モデルの変更は将来よりも苦痛が少ないので、より良いアプローチの存在を検討しています。

+2

** **なぜ**複数の異なるタイプと同じ値を保存する必要がありますか?そうすることで何を達成したいですか?特定の値に潜在的に複数の異なるタイプがあるのはなぜですか? –

+0

少し混乱します。この1つの値が可能なさまざまな型のためにこれを実行しようとしている場合は、VarCharを使用することをお勧めします。それを他のデータ型に変換する変換関数が存在するためです。 –

+0

@ MarkBannister:私の頭の上から外れる:エンタープライズは、異なる値を使用するアプリケーション/コンテキストを持つことがあります。フロートとして、固定小数点として。また、おそらく異なるラウンディングアルゴリズム。 3 d.p.で切り捨てられ、銀行家は3 d.p.に丸められる。 – onedaywhen

答えて

0

バイナリ値として何かを格納し、クライアント側で型にキャストできます。しかし、この値はクエリ条件内では効率的に使用することはほとんどできません。

2

EclipseLinkを使用している場合は、@TypeConverterを使用して任意のデータ型をStringに変換できます。値の2つのカラムと値のタイプのカラムを1つずつ持つこともできます。@Transformationマッピングを使用してこれをマッピングできます。

一般的なJPAでは、プロパティアクセスを使用してget/setメソッドを使用して型を変換できます。

+0

提案していただきありがとうございます。私はそれに慣れます。 –

+0

私は、OPのオリジナルのデザインはこれより少し良いと思うでしょう。同じ列に異なるデータ型を格納することは、DBをうまく使用することではありません。 –

1

コメントから、各エンティティのために、各属性は別々に保存そのを持っているだろうことが意図されていることが表示されます。

この名前は、Entity-Attribute-Value model、つまりEAVと呼ばれています。

EAVが唯一の適用可能な解決策である状況もありますが、その使用は一般的に実行可能な代替案が利用可能なアンチパターンとみなされます。

EAVデータベースの不適切な実装のケーススタディはhereです。

EAVを使用できる最も明白な目的の1つは、リレーショナルデータベースのオブジェクト指向設計からのオブジェクトデータの永続性です。これを使いたい場合は、代わりにObject-Relational Mapping(ORM)を使用することをお勧めします。

eavタグを使用して、SOに関連する質問が見つかります。

関連する問題