我在mySQL中写一个问题。我已经建立了我的数据库的模型,但不知道如何在mySQL中应用它。
我已经制作了一种车辆的继承树作为我的超凡性,它分为新旧车辆和子实体。此后它将分为拖拉机,摩托车等。所有子实体都具有相同的属性,如品牌,motorpower等。
我有一个想法,我想如何建立它,但没有想法如何编码它。我能获得索引吗?
答案 0 :(得分:0)
嗯 - 有几种方法可以在DB中实现概念方案;数据库课程通常会花费10个幻灯片来讨论这个主题,因此我无法在这里处理和讨论它们。但我做出一个应该适合的猜测:
我认为车辆既旧又新,但不是两者都有。
然后我为车辆制作一个基准表。 new
和old
之间的区别是通过鉴别器属性isNew
完成的;正如你提到的多重继承,我认为车辆可以同时是拖拉机和林业机器;因此,我为每种类型都添加了一个单独的布尔指示符:
create table vehicle (
id int primary key,
isNew bool not null,
isTractor bool,
isForestMachine bool,
...
brand varchar(20),
productionYear int,
...
);
如果车辆不能同时使用多种类型,那么类型的单一鉴别器属性会更好:
create table vehicle (
id int primary key,
isNew bool not null,
type ENUM('tractor', 'forest', 'construction'),
brand varchar(20),
productionYear int,
fuel int,
fuelcon int,
motorpower int);
答案 1 :(得分:0)
当您进行面向对象的模型设计时,通常会创建超类和子类。
例如,您可以创建一个名为vehicle
的超类。然后,您可以创建继承自vehicle
的类,我猜是roadVehicle
和offroad
。然后,继承自roadVehicle
的类可能是car
。和C。 &安培; 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'
这样做的缺点是必须在单个表中包含所有公共属性的列。汽车没有工具,所以你要浪费汽车专栏。林业机器可能没有注册号,因此您要为它们浪费该列。
但这并不重要。它是构建数据库的简单,可维护的方式。