复合键 mySQL 约束

Composite key mySQL constraint

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

分支机构Table

分支 ID 分店名称 地址 Post代码 镇 县

分公司员工Table

分行编号 员工编号

员工Table

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

我把主键变秃了。我知道如何使用约束使 Branch Id 和 Employee ID 主键,但我是否也应该将 Branch Employee table 中的 Employee_ID 设为外键,因为我在另一个 table 中使用它]?

主键是每个table的标识符。

a FOREIGN KEY 表示值 ina table 被另一个 table.

中的 PRIMARY KEY 引用

在这种情况下,您需要同时设置您的 Branch ID Employee ID,PRIMARY KEY 和 FOREIGN KEY; FOREIGN KEY - 因为它们被另一个 table 引用。 主键 - 因为您不希望 'employee a' 在 'branch a'.

中出现两次

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

为了避免这种情况,Employee table 最好包含一个参数 call branch id,并将其作为外键。

希望对您有所帮助

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

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

您是正确的,分支雇员 table 中的每一列都应该是外键,因为这些值在其他 table 中使用。如果没有外键,就可以输入各自 tables

中不存在的员工和分支机构

创建外键如下

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

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

根据雷蒙德的评论编辑:

组合键中列的顺序很重要,因为聚集索引将使用主键创建。两者中最具选择性(查询最多)的列应该放在第一位,然后是选择性较低的列。正确或错误的顺序将取决于 运行 对 table

的查询