4

日付、数値、または文字列のいずれかである n 個のプロパティ (キーと値のペア) があるとします。それらを保存するのに最も効率的なデータモデルはどれですか?

これが私が考えた解決策です:

データ・モデル

テーブルの各行は、複数のタイプのn 個のプロパティにdataリンクできる必要があります。

このソリューションの利点は、新しい型を追加したい場合、既存のテーブルの構造を変更するのではなく、 2 つの新しいテーブル (label_xyおよび) を追加するだけでよいことです。value_xyしかし、この解決策は本当に最も便利な解決策でしょうか?

どうやってこれをしたでしょうか?

ありがとう:)

4

2 に答える 2

4

私はすべてのシナリオを使用しました:

  1. あなたが説明したもの(独自のテーブルの各データ型)
  2. Anthony's answer からのもの-必要に応じて他のデータ型にキャストされた値のみの文字列
  3. 異なるデータ型を持つ複数の列を持つ 1 つのテーブル。そのうちの 1 つだけが各レコードで使用されます (残りはスパース列です)。

これらの解決策から: 1. 地獄に参加していた、2. データが主に文字列である場合は良い、3. 少しスペースを消費するのが断然最良で最も効率的である.

3については、表が次のようになっていることを説明する必要があります。

EntityID int,
TypeID int,
LabelID int,
ValueInt int,
ValueDecimal decimal(12,4),
ValueString nvarchar(max),
ValueDate datetime

(LabelID定義さTypeIDれていますが、結合のない使用目的で両方を使用しました。)

于 2012-08-22T13:33:50.447 に答える
2

これは、データの性質に大きく依存します。何百万もの値があり、強力な型付けが必要な場合は、これが 1 つのアプローチになる可能性があります。ただし、おっしゃるように、新しいデータ型にはすべて新しいテーブルが必要です。

実際には、数千の名前と値のペアしかなく、データの範囲がかなり規則的である場合、つまり、数値が整数、日付が 10 文字、文字列が 200 文字未満の場合、これらすべてを 1 つのテーブルで定義できます。 :

id int、
name varchar(50)、
type int、
value varchar(200)
index(name)

ID は必須ではありませんが、優れた設計です。
命名規則は自由です。必要に応じて一意の制約を適用できます。
タイプは 1=int、2=date、3=string のいずれかです (その他は後で簡単に追加できます)
。値は最大文字列に従って定義できます。

この解決策はパフォーマンスよりも単純さを優先しますが、これは要件によって決定されます。文字列データ型はワイルドカードになります。「テキスト」として定義する方が理にかなっています。

于 2012-08-22T13:28:54.407 に答える