数据库设计有很多可能的属性

时间:2011-01-13 22:42:35

标签: mysql database database-design

我正在建立一个车辆的MySQL数据库。我希望通过数据库,颜色,传输,燃料等来填充许多不同的可能的车辆属性。

为每组属性创建一个表是否有意义,或者我应该将它们全部放在一个表中,然后将每个列命名为属性。然后我只列出可能的行选择。

有点新的数据库设计,想得到一些意见。提前谢谢!

4 个答案:

答案 0 :(得分:2)

您的问题的答案取决于每辆车是否可以附加多种“颜色”或“燃料”。

如果是我,我会让基表看起来像这样:

表:车辆 - Cols:vehicleID,名称等

表:颜色 - Cols:colorID,name,rgbValue

表:燃料 - Cols:fuelID,名称等

如果每辆车只能有一种颜色和一种燃料,那么将车辆表更改为:

表:车辆 - Cols:vehicleID,name,colorID,fuelID等。

如果每辆车可以有4种颜色和3种燃料等,那么请单独离开Vehicle表,并创建类似这些的“关系”表:

表:vehicle_has_color - Cols:vehicleID,colorID

表:vehicle_has_fuel - Cols:vehicleID,fuelID

希望这能让您了解理想的数据库设计,并为您提供一个良好的起点。请记住,如果您只有3种不同的颜色并且它们不会改变,那么您可以更简单地直接在Vehicle表中插入颜色名称并处理PHP或HTML代码中颜色的选择

答案 1 :(得分:1)

如果每个实体都有一组固定的属性,请将其放在一个表中。 当您具有不同的属性时,将它们放在具有此结构的单独表中:

TABLE (
  Primary Key ID
  Foreign Key Ref
  AttributeName
  AttributeValue
)

答案 2 :(得分:0)

如果您的数据库需要显示历史性更改,那么我会提出建议#2(将它们全部放在一个表中),但如果您只是想通过颜色,传输,燃料等来表示车辆,那么请将属性在单独的表中。因为那时你与ID号有关系,如果值需要改变,你可以在属性表中进行更改,并在任何地方进行更新。一致性也更好,例如“29 mpg Hwy”vs“29mpg Hwy”。

答案 3 :(得分:0)

看一下这些SO示例:onetwothree