复合键mySQL约束

问题描述 投票:-1回答:2

如果我想为已经规范化的数据库编写mySQL,我将如何为(Branch_ID,Employee_ID)组合键添加约束?

分支表

分行ID分行名称地址邮政编码镇县

分公司员工表

分行ID员工ID

员工表

员工ID员工名字员工姓氏员工NI编号

我把主键秃了。我知道如何使用约束来创建Branch Id和Employee ID主键,但是我是否应该将Branch Employee表中的Employee_ID作为外键,因为我在另一个表中使用它?

mysql database database-normalization
2个回答
0
投票

要将复合键添加到现有表,请使用以下代码:

ALTER TABLE `Branch Employee`
ADD PRIMARY KEY (BranchID,Employee ID)

您是正确的,Branch Employee表中的每一列都应该是外键,因为这些值在其他表中使用。如果没有外键,就有可能进入各自表中不存在的员工和分支机构

创建外键如下

ALTER TABLE `Branch Employee`
ADD FOREIGN KEY (EmployeeID_FK) REFERENCES Employee(EmployeeID);

ALTER TABLE `Branch Employee`
ADD FOREIGN KEY (BranchID_FK) REFERENCES Branch(BranchID);

根据雷蒙德的评论编辑:

将使用主键创建组合键中列的顺序,因为聚簇索引。两个中最具选择性(最常查询)的列应首先进行,然后选择性较低。正确或错误的顺序将取决于针对表运行的查询


0
投票

PRIMARY KEY是每个表的标识符。

FOREIGN KEY表示表中的值由另一个表中的PRIMARY KEY引用。

在这种情况下,您需要设置分支ID员工ID,PRIMARY KEY和FOREIGN KEY; FOREIGN KEY - 因为它们被另一个表引用。主要关键 - 因为你不希望'employee a'在'branch a'中两次。

注意:您仍然可以在'branch a'和'branch b'中拥有'employee a'。

为了避免这种情况,最好是Employee表包含一个参数调用分支id,并将其变为外键。

希望能帮助到你

© www.soinside.com 2019 - 2024. All rights reserved.