我有以下表格:
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让它落后了?我们将不胜感激。
更新 我发现了"强制性"的定义在MySQL Workbench文档下:
强制复选框用于选择引用表和引用表是否必需。默认情况下,这两个约束都为真(由要检查的复选框表示)。
答案 0 :(得分:1)
这种关系是双向的。或者,您可以将其视为同一关系的两半。
像这样的外键关系通常称为“一对多”,而不是“多对一”。 MySQL工作台使用规范模式来引用它。<强>后续强>
问:为什么Orders.salesperson_id
是强制性的,而Salesperson.id
是非强制性的? Salesperson.id
是主键,Orders.salesperson_id
不是主键,因此复选框不会被反转吗?
答:我不熟悉MySQL工作台中的复选框。
正如Mike Lischke在评论中指出的那样,我们在实体 - 关系建模层面所关注的是关系的“基数”。基本上,我们提出问题,我们要求订单是否与销售人员相关?也就是说,我们可以订购不与销售员相关的订单吗?
我们可以让不的销售员与订单相关吗?
显然我们已经回答了问题,销售人员是否可以与多个订单相关联?订单可以与多个销售人员相关吗?这就是我们如何确定这是一对多的关系。现在我们只是进一步完善基数。
我认为用户界面中的“强制性”复选框旨在回答以下问题:我们是否可以创建不与订单相关的销售人员实例,或者我们要求< / em>与至少一个订单相关的销售人员?
同样,如果我们将此视为两个关系我们提出问题,那么这些问题就有意义了。我们询问有关从销售人员到订单的关系的问题,以及从订单到销售人员的关系。
根据我们问题的答案,我们将Order.salesperson_id
标记为“必填”,以表明我们将要求订单与销售员相关。我们将该关系的另一个方向标记为“非强制性”,以表明我们不将要求销售人员与订单相关。