Sql ORA-00957尝试使用3个外键引用同一主键时出现重复列名错误
我在创建表时遇到问题:Sql ORA-00957尝试使用3个外键引用同一主键时出现重复列名错误,sql,oracle,Sql,Oracle,我在创建表时遇到问题: CREATE TABLE EMPLOYEE ( employee_id NUMBER(5) NOT NULL UNIQUE, position VARCHAR2(100) NOT NULL, name VARCHAR2(255) NOT NULL, salary NUMBER(6) NOT NULL CONSTRAINT employee_pk PRIMARY KEY (employee_id) ); CREATE TABLE PROJECT ( project_id
CREATE TABLE EMPLOYEE
(
employee_id NUMBER(5) NOT NULL UNIQUE,
position VARCHAR2(100) NOT NULL,
name VARCHAR2(255) NOT NULL,
salary NUMBER(6) NOT NULL
CONSTRAINT employee_pk PRIMARY KEY (employee_id)
);
CREATE TABLE PROJECT
(
project_id NUMBER(5) NOT NULL UNIQUE,
name VARCHAR(100) NOT NULL,
budget NUMBER(6) NOT NULL,
consultant_leader NUMBER(5) NOT NULL,
developer_leader NUMBER(5) NOT NULL,
project_leader NUMBER(5) NOT NULL,
CONSTRAINT project_pk PRIMARY KEY (PROJECT_ID),
CONSTRAINT fk_leader
FOREIGN KEY (consultant_leader, developer_leader, project_leader)
REFERENCES EMPLOYEE (employee_id, employee_id, employee_id)
);
在最后一节中,当我尝试引用雇员的表employee_id时,我得到了ORA-00957。我认为这是因为3种不同的领导类型的外键引用了相同的员工id,但据我所知,这应该不是问题。语法错误吗?您当前的问题是需要三个外键关系,而不是一个有三列的外键关系 但是,不需要将
主键
声明为唯一
。因此,我建议:
CREATE TABLE EMPLOYEE (
employee_id NUMBER(5) NOT NULL PRIMARY KEY,
position VARCHAR2(100) NOT NULL,
name VARCHAR2(255) NOT NULL,
salary NUMBER(6) NOT NULL
);
CREATE TABLE PROJECT (
project_id NUMBER(5) NOT NULL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
budget NUMBER(6) NOT NULL,
consultant_leader NUMBER(5) NOT NULL,
developer_leader NUMBER(5) NOT NULL,
project_leader NUMBER(5) NOT NULL,
CONSTRAINT fk_leader FOREIGN KEY (consultant_leader)
REFERENCES EMPLOYEE (employee_id),
CONSTRAINT fk_leader FOREIGN KEY (developer_leader)
REFERENCES EMPLOYEE (employee_id),
CONSTRAINT fk_leader FOREIGN KEY (project_leader)
REFERENCES EMPLOYEE (employee_id)
);
当然,您不需要将
主键
约束串联起来。单独声明的好处是,您可以根据自己的喜好为约束命名。我认为您应该创建三个不同的FK:FK_顾问、FK_开发人员、FK_项目负责人我认为您应该创建三个不同的FK