0

新しい列の追加を避けるために、列レベルのフィルターを行レベルのフィルターとして模倣するようにテーブルを構成したいと考えています。

車の詳細を保存する次のテーブルがあるとしましょう

-------------------------------------
Type        Color       Year
-------------------------------------
Mini        Silver      2010
Standard    Silver      2011
Fullsize    White       2011
Luxury      Black       2010
Sports      Red     2011
Convertible Red     2009

これらの車も保存したい場合Make、そのために追加の列を追加し、車以外の自動車がある場合は別の列を追加する必要があります。

問題は、新しい列を追加しないようにこのテーブルをどのように構造化できるかということです。構造は、レコードのプロパティを定義するために行を追加するだけでよいはずです。

[ヒント] 構造には複数のテーブルがあり、1 つは行/レコードを格納し、もう 1 つは列/プロパティを格納し、それらの間のある種のマッピングまたは完全に新しい構造です。

編集

データのプロパティには固定のものと動的なものがあります。固定プロパティは、特定のサンプルの自動車モデルに可用性、状態としてマッピングできます。ダイナミックは、人が自動車について尋ねる可能性のあるものであれば何でもかまいません。今、すべての列を行としてマップする必要はありませんが、これらは動的であり、すべてを知っているわけではありません。これについて先に言及しなかったことをお詫びします。

4

2 に答える 2

2

エンティティ属性値設計 (EAV)を使用できます。

entity  attribute   value
1       Type        Mini
1       Color       Silver
1       Year        2010
1       Make        Foobar
2       Type        Standard
2       Color       Silver    
etc...

属性名を別のテーブルに保存することもできます。

ただし、いくつかの欠点があるため、本当にこれが必要な場合は慎重に検討する必要があります。値列には、さまざまなタイプの値をすべて格納できるタイプ (文字列など) が必要です。多くの結合が必要になるため、クエリを作成するのははるかに面倒であり、これらのクエリは従来のデータベース設計と比較して実行が遅くなります。

于 2012-05-04T07:51:55.957 に答える
0

有利なスタートを切るには: バイクのような多色の乗り物を許可するように再設計することを考えてください:

車両

Id    Year    vehicle_type    vehicle_make
-------------------------------------------
1     2010    1               1
2     2011    2               2

Id    Name
-----------
1     Black
2     White
3     Red
4     Blue

vehicle_color

vehicle_id    color_id
-----------------------
1             3
2             1
2             2

vehicle_type

Id    Name
-----------
1     Car
2     Motorbike

vehicle_make

Id    Name
-----------
1     Porsche
2     BMW

ボーナス

私は車のドメインに精通しているので、車の色の拡張機能を追加します。メーカーによって考案された色の名前 (「Magentafuzzyorangesunset」) はたくさんあり、それらを「実際の」ベースにマッピングする必要があります。色の名前 (「赤」、「青」、「緑」など) を入力して、両方を検索できるようにします。

あなたのcolorテーブルはそのように見えるかもしれません

Id    Name        base_color
-----------------------------
1     Midnight    1
2     Snow        2

base_colorテーブルを追加します

Id    Name
-----------
1     Black
2     White
于 2012-05-04T08:14:46.787 に答える