复合键 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
的查询
如果我想为这个已经规范化的数据库编写 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
的查询