【发布时间】:2018-04-25 21:44:17
【问题描述】:
我正在编写练习脚本,以下是 emp 和部门表:
Create table Employee
(
EmpId int,
Name varchar(30),
Designation varchar(50),
DateOfBirth date,
Salary int,
Department int,
Gender char(2),
Primary key(empId),
foreign key(empId) references Department(DeptId)
)
Create table Department
(
DeptId int,
Department varchar(30),
Primary key(DeptId)
)
当我在 Employee 表中插入行时,我收到以下错误:
消息 547,第 16 级,状态 0,第 2 行 INSERT 语句与 FOREIGN KEY 约束“FK_Employee_EmpId”冲突。冲突发生在数据库“Ramandeep”、表“dbo.Department”、列“DeptId”中。 该语句已终止。
下面是我要插入的行:
Insert into Employee(EmpId,Name,Designation,DateOfBirth,Salary,Department,Gender) values (4,'Sam','Accountant','1973-05-13',6500,4,'M')
并且值在部门表中可用
Insert into Department(DeptId,Department) values (1,'HR')
Insert into Department(DeptId,Department) values (2,'Operation')
Insert into Department(DeptId,Department) values (3,'IT')
Insert into Department(DeptId,Department) values (4,'Admin')
我不知道为什么会收到此错误。请帮忙解决。
【问题讨论】:
-
我认为你的设计是错误的。为什么要将作为该表的主键的 Employee.EmpId 设置为 Department 表的外键约束?这没有任何意义
-
设计确实看起来不对,但实际上并没有抛出错误。
-
@JayasuryaSatheesh 我在这里做错了什么,你能解释一下吗?
-
为什么要设置与主键和外键相同的 co.umn?根据设计,这意味着每个部门只能有 1 名员工。所以我建议你应该改变设计,在Employee表中添加一个新的Column来存储Department Id并将其设置为外键,而不是在EmpId列本身中设置外键
-
现在我明白了,我做错了,我必须将 Department 作为外键而不是 EmpId。感谢您指出问题
标签: mysql sql-server database tsql