SQL中的继承代码

时间:2017-01-15 21:33:15

标签: mysql sql inheritance multiple-inheritance

我在mySQL中写一个问题。我已经建立了我的数据库的模型,但不知道如何在mySQL中应用它。

我已经制作了一种车辆的继承树作为我的超凡性,它分为新旧车辆和子实体。此后它将分为拖拉机,摩托车等。所有子实体都具有相同的属性,如品牌,motorpower等。

我有一个想法,我想如何建立它,但没有想法如何编码它。我能获得索引吗?

2 个答案:

答案 0 :(得分:0)

嗯 - 有几种方法可以在DB中实现概念方案;数据库课程通常会花费10个幻灯片来讨论这个主题,因此我无法在这里处理和讨论它们。但我做出一个应该适合的猜测:

我认为车辆既旧又新,但不是两者都有。

然后我为车辆制作一个基准表。 newold之间的区别是通过鉴别器属性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的类,我猜是roadVehicleoffroad。然后,继承自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'

这样做的缺点是必须在单个表中包含所有公共属性的列。汽车没有工具,所以你要浪费汽车专栏。林业机器可能没有注册号,因此您要为它们浪费该列。

但这并不重要。它是构建数据库的简单,可维护的方式。