"此列列表没有匹配的唯一或主键"。虽然

时间:2016-04-10 20:25:00

标签: sql oracle unique

所以我正在练习一些sql编码进行测试,但我无法获得外键来引用主键。

这是不起作用的表格:

CREATE TABLE ASSIGNMENT(
ASSIGN_ID NUMBER(2) NOT NULL,
START_DATE DATE,
END_DATE DATE,
BUDGET NUMBER (10,2),
MANAGER_ID NUMBER(2),
  PRIMARY KEY (ASSIGN_ID,MANAGER_ID),
  FOREIGN KEY (MANAGER_ID) REFERENCES EMPLOYEE(EMP_ID)
);

这是它引用的表格:

CREATE TABLE EMPLOYEE(
EMP_ID NUMBER(2) NOT NULL,
NAME VARCHAR(40),
OFFICE VARCHAR(20),
EXPERT_ID NUMBER(2),
  PRIMARY KEY (EMP_ID,EXPERT_ID),
  FOREIGN KEY (EXPERT_ID) REFERENCES EXPERTISE(EXPERT_ID)
);

每当我尝试运行脚本时,它总会返回:

  

错误报告 -
  SQL错误:ORA-02270:此列列表没有匹配的唯一键或主键   02270. 00000 - "此列列表没有匹配的唯一或主键"
  *原因:CREATE / ALTER TABLE语句中的REFERENCES子句
             给出一个没有匹配的唯一或主要列的列表              参考表中的关键约束   *操作:使用ALL_CONS_COLUMNS查找正确的列名称              目录视图

我环顾四周但似乎无法找到问题所在。任何帮助将不胜感激。

这里有完整的代码(尚未测试过最后一张表):

CREATE TABLE EXPERTISE(
EXPERT_ID NUMBER(2) NOT NULL,
DESCRIPTION VARCHAR(50),
HOURLY_RATE NUMBER(3,2),
CHARGE_RATE NUMBER(3,2),
  PRIMARY KEY(EXPERT_ID)
);

CREATE TABLE EMPLOYEE(
EMP_ID NUMBER(2) NOT NULL,
NAME VARCHAR(40),
OFFICE VARCHAR(20),
EXPERT_ID NUMBER(2),
  PRIMARY KEY (EMP_ID,EXPERT_ID),
  FOREIGN KEY (EXPERT_ID) REFERENCES EXPERTISE(EXPERT_ID)
);

CREATE TABLE ASSIGNMENT(
ASSIGN_ID NUMBER(2) NOT NULL,
START_DATE DATE,
END_DATE DATE,
BUDGET NUMBER (10,2),
MANAGER_ID NUMBER(2),
  PRIMARY KEY (ASSIGN_ID,MANAGER_ID),
  FOREIGN KEY (MANAGER_ID) REFERENCES EMPLOYEE(EMP_ID)
);


CREATE TABLE ALLOCATION(
EMP_ID NUMBER(3) NOT NULL,
ASSIGN_ID NUMBER(3) NOT NULL,
DAYS_WORKED_ON DATE,
HOURS_WORKED_ON DATE,
  PRIMARY KEY(EMP_ID,ASSIGN_ID),
  FOREIGN KEY(EMP_ID) REFERENCES EMPLOYEE(EMP_ID),
  FOREIGN KEY(ASSIGN_ID) REFERENCES ASSIGNMENT(ASSIGN_ID)
);

我正在使用Oracle SQL Developer来实现它

2 个答案:

答案 0 :(得分:6)

  

*原因:CREATE / ALTER TABLE语句中的REFERENCES子句给出了一个列表,其中没有匹配的唯一键或主键   引用表中的约束。

问题是EMP_ID(本身)不是表Employees的主要或唯一键,而是有一个复合主键(EMP_ID, EXPERT_ID)

要解决此问题,请将EMP_ID作为Employees表的主键(这似乎很直观,因为每个员工都应具有唯一ID)或在{{1}上添加单独的唯一约束}。

正如评论中所指出的,如果您将EMP_ID作为主键,那么EMP_ID也将是唯一的扩展名。

答案 1 :(得分:1)

如错误所示,您引用外键的列与父表上的唯一约束/ pk不匹配。特别是对于主键EMP_ID,EXPERT_ID仅引用EMP_ID。