【问题标题】:MySQL inheritance?MySQL继承?
【发布时间】:2012-11-16 23:43:51
【问题描述】:

设计这个 MySQL 数据库的最佳方法是什么?

我有carsfuelsmotor oils。每辆车可以使用任意数量的fuels和任意数量的motor oils。设计这个数据库的最佳方式是什么?

所以,一个car 可以有一个或多个fuels,以及一个或多个motor oils

所以我的数据库中需要有carsfuelsmotor_oils 表。 现在因为fuelsmotor_oils 有一些类似的属性,比如价格、日期生产等。 创建另一个名为 let say products 的表对我来说是否明智?

当使用 OOP 语言时,我将拥有 Product 实体,FuelMotorOils 将扩展 Product,并且这种方式具有在 Product 中定义的属性。

我将如何在 Mysql 数据库中设计这个? MySQL中有继承之类的东西吗? 我知道关系数据库没有继承,并且在 MySQL 中有一种方法可以模仿这一点,只需要有人更好地解释这是如何完成的?

【问题讨论】:

  • 您可以(并且应该)做的就是在fuelmotor_oil 表中添加引用product 表中产品的外键。鉴于,在数据库内部,不需要定义实际的继承,您不需要做太多其他事情。
  • 不知道为什么这被否决 - 这是一个合法的问题。在许多项目中,正确的数据库设计没有得到足够的重视
  • @Patrickdev 谢谢!现在的问题是,我将如何用我的 OOP 语言编写这个,比如说 PHP。我会有汽车、燃料、机油、产品实体吗?或者我应该忽略实体中的产品?写这个作为答案;)

标签: mysql sql database-design single-table-inheritance class-table-inheritance


【解决方案1】:

你可以有一个产品表和一个外键,燃料和机油链接到产品表,以便进行某种继承。

您通过在实体之间定义具有外部关系的映射表来创建多对多关系。

假设你有汽车和燃料,你可以创建一个表 carsFuelsMap,它有两个外键字段 morors_id 和fuels_id

【讨论】:

  • 您如何防止产品在该解决方案中同时成为燃料和机油?
【解决方案2】:

您可以使用一对一的外键在 SQL 中模拟 OOP 的委托部分。例如,Fuel 条目将具有指向 Product 的外键,用于标识所有共享值。

至于连接汽车和燃料,这实际上是一个多对多的关系。传统方式将使用CarFuel 表,该表对于汽车和燃料的每个有效组合都有一行,但是由于您已将FuelMotorOil 的部分委托给Product,您可能想要使用CarProduct 表,如果您只需要燃料,则可以加入 Fuel 表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 2012-10-30
    • 2017-12-27
    • 2012-10-27
    • 1970-01-01
    相关资源
    最近更新 更多