1

我正在开发汽车分类广告,但我不确定如何设计一些东西的最佳方式,汽车有一些特点,比如它是否有 2,4 门,如果它是 4x4 或 4x2,发动机 1.6、2.0。

所有这些功能都是汽车特有的,但它们必须仅限于该模式所具有的功能,因此每次有人发布自行车时,它都不会在下拉列表中显示 4x4 或比该型号发动机的选项。

我不想让这个通用,它只适用于汽车,所以思考它如何最适合通用分类它不一定。

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

更多信息:

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

4

2 回答 2

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

您可以将一个多列外键从 vehicle(model_id, engine_id) 放到 vehicle_model_engine(model_id, engine_id),或者只将一个键放到 engine(id) 并在保存前使用应用程序逻辑进行检查。

于 2013-02-18T19:12:11.883 回答
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)

于 2013-02-18T17:28:36.920 回答