数据库设计汽车 - 模型/汽车分类

时间:2013-02-18 14:58:32

标签: database database-design

我正在开发汽车分类但我不知道如何设计一些东西的最佳方式,有一些汽车的功能,如果它有2,4门,如果它是4x4或4x2,引擎1.6,2.0。

所有这些功能都特别适用于汽车,但它们必须限制在该模式下,因此每次有人发布自行车时,例如它不会显示4x4或引擎的下拉选项那个模特。

我不想让它变得通用,它只适用于汽车,因此想一想它对通用分类的最佳方式不一定。

设计这个的最佳方式是什么?

更多信息:

我的问题是如何设计汽车模型和实际汽车之间的关系,例如模型年可以从1990年到2000年,当有人要添加该模型的汽车我只希望他们是能够从模型的选项中进行选择。我如何将其存储在数据库中?

2 个答案:

答案 0 :(得分:2)

您需要区分汽车模型实例(“my car vin xxx”)和汽车型号规格(“2009 Mazda 3”)。通常,模型规范具有型号,模型实例具有序列号(在本例中为VIN)。

您还需要区分模型规范的可用选项和模型实例的实际安装选项。

/* the model specifications: */
vehicle_model
id
model_name
from_year
to_year (nullable)
manufacturer_id


/* engine specifications */
engine
id
name (ex. "Cummings Turbo Diesel")
...


/* available engines for a model. you would use this table to show only the appropriate engines for a given model spec */
vehicle_model_engine
model_id
engine_id


/* vehicle instances: */
vehicle
id
vin
model_id FK vehicle_model
engine_id FK engine

您可以将来自车辆(model_id,engine_id)的多列外键放入vehicle_model_engine(model_id,engine_id),或者只将一个键放入引擎(id)并使用应用程序逻辑进行检查,然后再进行保存。

答案 1 :(得分:0)

我在一家汽车公司工作,我建议从年份,品牌,型号和装饰开始。所有汽车都有这些价值。您可以将它们硬编码到数据库结构中。

除此之外,只需创建一个具有这些附加属性的属性表。

不要试图专门为发动机,门的数量等制作油田。你会惊讶地发现有些汽车有多个发动机(!)。

YMMT和属性表:

Vehicle

vehicle_id int not null (auto increment), year int, make varchar(100), model varchar(100), trim varchar(100)

Vehicle_Attribute

vehicle_id int, attribute_name varchar(100), attribute_value varchar(100)