繁体   English   中英

复合键 mySQL 约束

[英]Composite key mySQL constraint

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

分支表

分行编号分行名称 地址 邮编 镇县

分公司员工表

分行 ID 员工 ID

员工表

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

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

PRIMARY KEY 是每个表的标识符。

FOREIGN KEY 意味着一个表中的值被另一个表中的 PRIMARY KEY 引用。

在这种情况下,您需要同时设置您的 Branch ID Employee ID,PRIMARY KEY 和 FOREIGN KEY; FOREIGN KEY - 因为它们被另一个表引用。 PRIMARY KEY - 因为您不希望“员工 a”在“分支机构 a”中出现两次。

注意:您仍然可以在“分支机构 a”和“分支机构 b”中同时拥有“员工 a”。

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

希望能帮助到你

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

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

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

创建外键如下

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

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

根据雷蒙德的评论进行编辑:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM