2011-01-13 5 views
2

私は車両のMySQLデータベースを構築しています。私はデータベース、色、トランスミッション、燃料などによって占有される可能性のある多くの異なる車両属性があります。多くの可能な属性のデータベース設計

属性のセットごとにテーブルを作成するのは意味がありますか、表を作成し、各列に属性の名前を付けます。次に、可能な選択肢を行としてリストします。

データベースデザインを初めて使用していて、意見を出したいと思っていました。早めにありがとう!

答えて

2

あなたの質問に対する答えは、各車両が複数の「色」または「燃料」を付けることができるかどうかによって異なります。

それは私だった場合、私はベーステーブルはこのように見えるようになります:

表:車 - Colsは:vehicleID、名前など

表:色 - Colsは:colorID、名前は、rgbValue

表:燃料 - Colsは:fuelID、名前など

各車両は一色のみと一つの燃料を持つことができる場合は、のようなものにするために車両テーブルを変更します:

表:車 - Colsは:vehicleID、名前、等colorID、fuelID、

各車両が次に単独で車両テーブルを残して4色と3つの燃料、等を有しており、作成することができた場合「の関係これらに類似する「表:

表: vehicle_has_color - Colsは:vehicleID、colorID

表:vehicle_has_fuel - Colsは:vehicleID、fuelID

これは、理想的なデータベース設計のアイデアを提供し、あなたには良い出発点を与えることを願っています。 3種類の色しかなく、変更しない場合は、Vehicleテーブルに色の名前を直接挿入し、PHPまたはHTMLコードで色の選択を処理する方が簡単かもしれません。

+0

はい、各車両には1つの属性しか選択されません。 – timroman

+0

OK、私はそれぞれの属性に対して本当に小さなテーブルを作成します。各オプションにプライマリキーと外部キーを含める必要がありますか? 例: 表 - > att_color:index、fkey、c​​olorname ありがとう! – timroman

+0

私は車のテーブルに外来キーを置きます。アトリビュートテーブルを選択するリストとして考えてください。主車両テーブルでは、外部キーを使用してリストを指し示していて、「自分が望む」と言います。 – GarrettNow

1

エンティティごとに固定の属性セットがある場合は、それを1つのテーブルに入れます。 あなたが変化している属性は、この構造を別のテーブルにそれらを置く:あなたのデータベースは、歴史的な変更を表示する必要がある場合

TABLE (
    Primary Key ID 
    Foreign Key Ref 
    AttributeName 
    AttributeValue 
) 
+0

属性は将来変更される可能性がありますが、それはまれです。 – timroman

0

が、その後、私は提案#2(1台ですべてを置く)となるだろうが、色、変速機、燃料などで車両を表現したいだけなら、その属性を別の表に入れてください。 ID番号との関係があるため、値を変更する必要がある場合は、属性の表でその変更を行い、どこでも更新されます。一貫性のためにも良いです。 "29 mpg Hwy"対 "29 mpg Hwy"。

+0

過去のオプションの変更は重要ではありません。私は一貫性に同意し、これが私がデータベースからやっている理由です。 – timroman

関連する問題