如何在Oracle中创建外键

如何在Oracle中创建外键,oracle,oracle11g,Oracle,Oracle11g,如何将manager项目中的MgrId链接到Employee表中的EmpId? 这是我试过的: CREATE TABLE Employee(EmpId varchar2(5), EmpName varchar2(25), DeptId varchar2(3), Salary Number(8), Constraint PK_addn primary key

如何将
manager项目中的
MgrId
链接到
Employee
表中的
EmpId
? 这是我试过的:

CREATE TABLE Employee(EmpId varchar2(5), 
                       EmpName varchar2(25), 
                       DeptId varchar2(3),
                       Salary Number(8),
Constraint PK_addn primary key (EmpId, DeptId),
Constraint fk_Department foreign key (DeptId) references Department (DeptId));
但未能创建第二个表:

CREATE TABLE ManagerProject(ProjId varchar2(4),
                            MgrId varchar2(5),
                            StartDate Date,
                            EndDate Date,
Constraint fk_managerproject foreign key (MgrId) references Employee (EmpId),
Constraint PK_Managerproject Primary key(ProjId, MgrId, StartDate));
它显示

ORA-02270:此列列表没有匹配的唯一键或主键


错误消息表示您正在尝试创建引用列的FK,该列上没有唯一键或主键约束

假设您不想将列
DeptId
添加到
ManagerProject
,则需要在
employee
上添加唯一键:

alter table Employee add constraint empId_UK unique ( empId)
但这在很大程度上取决于您的模式应该是什么


如果要将列
DeptId
添加到
ManagerProject
,则需要编辑FK,以便在引用
employee
时同时使用
EmpId
DeptId
,它显示ORA-02270:尝试创建ManagerProject表时,此列列表没有匹配的唯一键或主键,请提供帮助为什么表
employee
上的主键是两列
(empid,deptid)
上的复合键?它应该只在一列上,
empid
——除非您的业务非常奇怪和不寻常。MgrId应该是ManagerProject表中的一个promary键,并且应该引用Employee表中的empid;DeptId引用另一个名为Department的表。部门关系创建表Department(DeptId varchar2(3)主键,DeptName varchar2(30)Unique不为空);如果要创建FK以引用表中的列,则需要确保被引用列中的值是唯一的。我认为在开始创建表之前,您应该更好地理解模式的结构。