在进行面向对象的模型设计时,您通常会创建超类和子类。
例如,您可以创建一个名为vehicle 的超类。然后,您可能会创建继承自 vehicle 的类,我猜它们称为 roadVehicle 和 offroad。那么继承自roadVehicle 的类可能是car。 &C。等等。
当您为 MySQL(或 Oracle 或其他)这样的关系数据库管理系统布置表时,这种设计并不是很有帮助。为什么不?类继承在概念上不容易转化为数据库表。
因此,您需要一个表格,其中包含每种车辆的所有描述性属性。表格的每一行都描述了一辆汽车。
所以,你可能有列
id an autoincrementing id
is_new boolean. true means new, false means used.
make "Volvo", "International Harvester", &c.
model "50D", "King Cab", etc.
year the model year of the machine text like "2001", "2015a"
date_of_manufacture a date field
vehicle_type a text string. "car", "log truck", "tractor", and so forth
engine_type a text string "diesel" "gasoline", "electric", "diesel-electric" &c.
engine_power 75kW, etc. maybe a number if everything is in kW.
number_of_wheels 4 for a car. 18 for a tractor-trailer, etc
tool text. blank for cars. "Log grapple," maybe, for a log truck
description text. "Staffan's old Citroen" for example.
registration_locale text. SE, US, DE, etc.
registration_number text. ABC-123 etc.
你明白了。如果您想查看有关二手车的信息,请进行以下查询:
SELECT * FROM vehicles WHERE is_new = 0 AND vehicle_type = 'car'
这样做的缺点是您必须在单个表中包含所有公共属性的列。汽车没有工具,所以你在浪费汽车的专栏。林业机械可能没有注册号,因此您在浪费该列。
不过没关系。这是一种构建数据库的简单且可维护的方法。