4

什麼是設計這個MySQL數據庫的最佳方式?MySQL的繼承?

我有cars,fuelsmotor oils。每輛車可以使用任何數量的fuels和任意數量的motor oils。什麼是設計這個數據庫的最佳方式?

因此,一個car可以有一個或多個fuels,以及一個或多個motor oils

所以我需要在我的數據庫中有cars,fuelsmotor_oils表。 現在既然fuelsmotor_oils有這樣的價格有些相似的性質,date_produced等 難道是聰明的,我要創建一個名爲另一個表可以說products

當使用OOP語言我會Product實體,FuelMotorOils將延長Product和這樣有Product定義的屬性。

我怎麼會在Mysql數據庫設計呢?在MySQL中有繼承嗎? 我知道,關係數據庫沒有繼承,並且有模仿這在MySQL的方式,只是需要有人來更好地解釋這是怎麼完成的?

+1

所有你可以(也應該)做的是在'fuel'和'motor_oil'表中添加引用'product'表中產品的外鍵。在數據庫內部看來,不需要定義實際的繼承,就不需要做其他事情了。 – Patrickdev

+0

不知道爲什麼這被否決 - 這是一個合法的問題。正確的數據庫設計在很多項目中沒有得到足夠的重視 –

+0

@Patrickdev謝謝!現在的問題是,我怎麼會在我的OOP語言中寫這個,可以說PHP。我會有汽車,燃料,汽油,產品實體嗎?或者我應該忽略實體中的產品?請將此作爲答案;) – Limeni

回答

1

你可以有一個產品表,並在每一個外鍵,燃油和機油中的順序來鏈接到產品列表中有某種繼承。

許多到可以通過定義與實體之間的外映射表中創建許多關係。

給你有車和燃料,你可以創造出有兩個外鍵字段morors_id和fuels_id

+0

如何防止產品在該解決方案中同時成爲燃料油和機油? –

1

您可以使用一到一個外鍵模擬OOP的SQL代表團部分表carsFuelsMap。因此,例如Fuel條目將具有可識別所有共享值的Product的外鍵。

至於聯汽車和燃料,這其實是一個多一對多的關係。傳統方式使用CarFuel表,每個有效的汽車和燃油組合都有一行,但由於您已將FuelMotorOil的零件委託給Product,因此您可能需要使用CarProduct表,如果您僅需要燃料,你可以加入到Fuel表。