【问题标题】:One to one relationship creates two foreign keys in MySQL workbench data modelling diagram一对一关系在 MySQL 工作台数据建模图中创建两个外键
【发布时间】:2019-06-19 09:56:24
【问题描述】:

我正在 MySQL 工作台上进行数据建模。

我有三个数据实体:

  1. company
  2. driver
  3. car

关系是,一家公司有很多司机,一辆车有两个司机(主司机和副司机)

这是我目前拥有的数据模型(我只在图片中创建了一个driver链接到car):

如上图所示,我将companydriver 关联为一对多 关系。该工具会按预期在driver 表中自动创建company_id 外键。没问题。

问题在于 drivercar 之间的关系。在图片中,我只将cardriver之间的一对一关系联系起来,我希望该工具会创建一个driver_id外键,但该工具会自动创建两个外键:driver_id & driver_company_id

(如果我为副驾驶从 cardriver 创建另一个 一对一 关系,该工具将再次创建两个新的外键,这在图片)

这是为什么呢?为什么该工具除了创建driver_id 外键之外还创建driver_company_id 外键以实现一对一关系?背后的概念是什么?如果现在我手动删除driver_company_id 外键会有什么不同?

【问题讨论】:

    标签: mysql foreign-keys mysql-workbench


    【解决方案1】:

    实心连接符表示identifying relationship,这意味着driver.company_id 必须是复合主键的一部分。

    因此,从 cardriver 的外键必须引用复合主键,因此它会创建两列。

    如果你想做我认为你想做的事,让两个外键连接器都使用虚线,表示非标识关系。

    【讨论】:

    • 如果我手动删除 driver_company_id 创建的工具,我是否更正了该关系将无法识别,否则识别 ???我想了解在实践中拥有driver_company_id 外键是如何影响汽车和驾驶员的。
    • 你可以创建任何你想要的外键。但是您请求了一个标识关系(通过使用实体连接器),因此 Workbench 为 FK 自动创建列的方法决定将两个列都设为 PK。如果您不希望它创建识别关系,请使用虚线连接器。
    • 那是Yes 在我上面的评论中对我的问题的回答吗?
    • 如果您创建识别关系,然后删除其中的一列,我不确定 DDL Workbench 会创建什么。我是说您应该重新开始,并根据您希望它们的工作方式创建 FK 关系类型。
    • 谢谢,我会这样做的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    • 2015-05-11
    相关资源
    最近更新 更多