2017-01-15 73 views
-1

我在使用mySQL編寫時遇到了問題。我已經對我的數據庫做了一個模範的模型,但不知道如何將它應用到mySQL中。SQL中的繼承代碼

我把車輛的遺傳樹作爲我的超能力,分爲新舊車輛和子實體。此後它將分成拖拉機,機動車等。所有子實體都具有相同的屬性,如品牌,摩托車等。

我有一個如何構建它的想法,但沒有如何編寫代碼的想法。我可以請求索姆指導。

+0

是關於將關係轉換爲mysql表還是關於翻譯概念方案(ER?,UML?)變成關係? –

+0

我有概念性方案我已經問題transalating入關係進入MySQL表是:) 所以,我有我的vechilas是 舊的和新的 - 他們每個人都包含拖拉機,林業機械和建築機械 所有的車業具有相同的屬性 品牌,生產年份,燃料,燃料消耗,電機功率 –

回答

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); 
+0

車輛不能屬於同一類型。這個數據庫即時通訊創建是一個組成。因此,我有一家公司銷售新舊機器,這些機器是拖拉機,林業機器和建築機械是我所提供的,所以我想說的數據庫表是「舊/新機器,機器類型,然後是屬性」。如果它現在更有意義。 我們在課上討論了繼承問題,但是如何在概念方案中寫下它,但從來沒有在DB中寫過。 –

+0

所以例如2應該爲你工作 - 見編輯答案 –

+0

創建表的車輛( ID INT主鍵, 是否新款BOOL不爲空, 類型ENUM( '拖拉機', '林', '建設'), \t isold布爾不爲空, 類型ENUM( '拖拉機', '林', '施工'), 品牌VARCHAR(20), productionYear INT, 燃料INT, fuelcon INT, MOTORPOWER INT); –

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' 

這樣做的缺點是,你必須包括在一個表中的所有公共屬性欄。汽車沒有工具,所以你在浪費汽車專欄。森林機器可能沒有註冊號碼,所以你爲他們浪費了那一列。

但這沒關係。這是建立數據庫的一種簡單且可維護的方法。