MySQL Workbench:子表和父表之间的外键关系是什么?

时间:2014-06-12 03:36:48

标签: 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与引用(父级)之间的多对一,非强制到强制关系) 表格1}}。

但是,MySQL Workbench将关系描述为引用表(子)表Salesperson与引用表之间的一对多,强制到非强制关系(父表)Orders

是我,还是MySQL Workbench让它落后了?我们将不胜感激。

enter image description here

更新 我发现了"强制性"的定义在MySQL Workbench文档下:

强制复选框用于选择引用表和引用表是否必需。默认情况下,这两个约束都为真(由要检查的复选框表示)。

1 个答案:

答案 0 :(得分:1)

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

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

<强>后续

问:为什么Orders.salesperson_id是强制性的,而Salesperson.id是非强制性的? Salesperson.id是主键,Orders.salesperson_id不是主键,因此复选框不会被反转吗?

答:我不熟悉MySQL工作台中的复选框。

正如Mike Lischke在评论中指出的那样,我们在实体 - 关系建模层面所关注的是关系的“基数”。基本上,我们提出问题,我们要求订单是否与销售人员相关?也就是说,我们可以订购与销售员相关的订单吗?

我们可以让的销售员与订单相关吗?

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

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

同样,如果我们将此视为两个关系我们提出问题,那么这些问题就有意义了。我们询问有关从销售人员到订单的关系的问题,以及从订单到销售人员的关系。

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