小编典典

“为此列列表匹配唯一或主键”。主键确实存在

sql

因此,我正在为测试练习一些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来做到这一点


阅读 172

收藏
2021-04-28

共1个答案

小编典典

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

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

要解决该问题,可以使表格EMP_ID的主键Employees(这看起来很直观,因为每个员工都应该有一个唯一的ID),或者在上添加一个单独的唯一约束EMP_ID

正如注释中指出的那样,如果您创建EMP_ID主键,那么 (EMP_ID, EXPERT_ID)扩展名也将是唯一的。

2021-04-28