MySQL 工作台 : What is the foreign key relationship between child and parent tables?

标签 mysql sql database foreign-keys mysql-workbench

我有下表:

CREATE TABLE Salesperson 
(
    id INT, 
    name VARCHAR(30), 
    age INT,
    salary INT,
    PRIMARY KEY (id)  
);

CREATE TABLE Orders
(
    Number INT, 
    ORDER_DATE DATE, 
    cust_id INT, 
    salesperson_id INT, 
    Amount INT,
    PRIMARY KEY (Number),
    FOREIGN KEY (salesperson_id) REFERENCES Salesperson (id)
);

我将外键关系描述为引用(子)表Orders与引用的(父)表Salesperson

但是,MySQL Workbench 将这种关系描述为引用表(子)表 Orders 与引用的表(父表)Salesperson

是我,还是 MySQL Workbench 落后了?如果有解释,我们将不胜感激。

enter image description here

更新 我在 MySQL Workbench 文档下找到了“强制”的定义:

强制复选框用于选择引用表和被引用表是否是强制的。默认情况下,这两个约束都是 true(由选中的复选框表示)。

最佳答案

这种关系是双向的。或者,您可以将其视为同一关系的两半。

像这样的外键关系通常称为“一对多”,而不是“多对一”。 MySQL Workbench 使用规范模式来引用它。

跟进

:为什么 Orders.salesperson_id 是强制性的,而 Salesperson.id 是非强制性的? Salesperson.id 是主键,Orders.salesperson_id 不是主键,那么复选框不会颠倒吗?

答:我不熟悉 MySQL Workbench 中的复选框。

正如 Mike Lischke 在他的评论中指出的那样,我们在实体关系建模级别关心的是关系的“基数”。基本上,我们问的问题是,我们是否要求订单与销售人员相关?也就是说,我们可以有一个与销售人员相关的订单吗?

我们可以拥有与订单相关的销售人员吗?

显然我们已经回答了以下问题:一名销售人员是否可以与多个订单相关?一个订单可以与多个销售人员相关吗?这就是我们确定这是一对多关系的方式。现在我们只是进一步完善基数。

我认为 UI 中的“强制”复选框旨在回答以下问题:我们是否可以创建一个与订单相关的 Salesperson 实例,或者我们是否要求 一名销售人员至少与一个订单相关?

同样,如果我们将其视为我们提出问题的两种关系,那么这些问题就有意义。我们正在询问有关销售人员与订单之间关系的问题,以及有关订单与销售人员之间关系的问题。

根据问题的答案,我们将 Order.salesperson_id 标记为“强制”,以表明我们将要求订单与销售人员相关。我们将关系的另一个方向标记为“非强制性”,以表明我们不会要求销售人员与订单相关。

关于MySQL 工作台 : What is the foreign key relationship between child and parent tables?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24176064/

相关文章:

java - H2 内存DB在MySQL模式下对ORDER BY的处理方式不同

javax.persistence @Column 两个不同表的2列的映射

Mysql 在使用索引条件自连接表时不使用索引

php - Mysql只选择唯一行(只出现一次)

SQL - 选择已结束最近契约(Contract)但还有其他契约(Contract)未结的员工

database - 如何在 DB2 的特定数据库中获取列表模式

sql - 函数式编程和 SQL

c# - Azure 数据库水平分片是 Multi-Tenancy C# asp.net 应用程序的最佳解决方案

php - 将数据与数据库中的表进行比较

mysql - 如何将表字段的默认值设置为 0.00?