我在使用mySQL編寫時遇到了問題。我已經對我的數據庫做了一個模範的模型,但不知道如何將它應用到mySQL中。SQL中的繼承代碼
我把車輛的遺傳樹作爲我的超能力,分爲新舊車輛和子實體。此後它將分成拖拉機,機動車等。所有子實體都具有相同的屬性,如品牌,摩托車等。
我有一個如何構建它的想法,但沒有如何編寫代碼的想法。我可以請求索姆指導。
我在使用mySQL編寫時遇到了問題。我已經對我的數據庫做了一個模範的模型,但不知道如何將它應用到mySQL中。SQL中的繼承代碼
我把車輛的遺傳樹作爲我的超能力,分爲新舊車輛和子實體。此後它將分成拖拉機,機動車等。所有子實體都具有相同的屬性,如品牌,摩托車等。
我有一個如何構建它的想法,但沒有如何編寫代碼的想法。我可以請求索姆指導。
嗯 - 在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);
車輛不能屬於同一類型。這個數據庫即時通訊創建是一個組成。因此,我有一家公司銷售新舊機器,這些機器是拖拉機,林業機器和建築機械是我所提供的,所以我想說的數據庫表是「舊/新機器,機器類型,然後是屬性」。如果它現在更有意義。 我們在課上討論了繼承問題,但是如何在概念方案中寫下它,但從來沒有在DB中寫過。 –
所以例如2應該爲你工作 - 見編輯答案 –
創建表的車輛( ID INT主鍵, 是否新款BOOL不爲空, 類型ENUM( '拖拉機', '林', '建設'), \t isold布爾不爲空, 類型ENUM( '拖拉機', '林', '施工'), 品牌VARCHAR(20), productionYear INT, 燃料INT, fuelcon INT, MOTORPOWER INT); –
當你在做面向對象的模型設計時,你經常創建超類和子類。
例如,您可能會創建一個名爲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'
這樣做的缺點是,你必須包括在一個表中的所有公共屬性欄。汽車沒有工具,所以你在浪費汽車專欄。森林機器可能沒有註冊號碼,所以你爲他們浪費了那一列。
但這沒關係。這是建立數據庫的一種簡單且可維護的方法。
是關於將關係轉換爲mysql表還是關於翻譯概念方案(ER?,UML?)變成關係? –
我有概念性方案我已經問題transalating入關係進入MySQL表是:) 所以,我有我的vechilas是 舊的和新的 - 他們每個人都包含拖拉機,林業機械和建築機械 所有的車業具有相同的屬性 品牌,生產年份,燃料,燃料消耗,電機功率 –