如果我想为这个已经标准化的数据库编写mySQL,我该如何为(Branch_ID,Employee_ID)组合键添加约束呢?
分支表
分支机构ID分支机构名称地址邮编城镇县
分公司员工表
分支机构ID员工ID
员工表
员工ID员工名字员工姓氏员工NI编号
我把主键变成了光头。我知道如何使用constraint将Branch Id和Employee ID主键都设为主键,但是既然我在另一个表中使用了Employee_ID,那么我是否也应该将Branch Employee表中的the设为外键呢?
发布于 2019-03-13 06:46:21
要将组合键添加到现有表中,请使用以下代码:
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);根据Raymond的评论编辑:
复合键中列的顺序很重要,因为将使用主键创建聚集索引。这两个列中选择性最强(查询次数最多)的列应该首先出现,然后是选择性较低的列。正确或错误的顺序将取决于对表运行的查询
发布于 2019-03-13 06:32:59
主键是每个表的标识符。
外键意味着表中的值被另一个表中的主键引用。
在这种情况下,您需要设置您的Branch ID Employee ID,主键和外键;外键-因为它们被另一个表引用。主键-因为您不希望'employee a‘在'branch a’中出现两次。
注意:在“分支a”和“分支b”中仍然可以有“employee a”。
为了避免这种情况,最好是Employee表包含一个调用分支id的参数,并将其变成外键。
希望能有所帮助
https://stackoverflow.com/questions/55131502
复制相似问题