我正在尝试创建 3 个表,在创建第 3 个表 EMPLOYEE_VALUES
时,我收到一条错误消息,指出此列列表没有匹配的唯一键或主键。我已经浏览了相同的堆栈溢出帖子并尝试了不同的方法,但无法弄清楚是什么导致了这个问题。不胜感激是否有人可以对此有所了解
CREATE TABLE P_EMPLOYEE_TYPE (
ID NUMBER(22) NOT NULL,
NAME VARCHAR2(50) NOT NULL,
PRIMARY KEY (ID)
);
CREATE TABLE P_EMPLOYEE(
P_ID NUMBER NOT NULL,
EMPLOYEE_TYPE_ID NUMBER NOT NULL,
FOREIGN KEY (P_ID) REFERENCES P(ID),
FOREIGN KEY (EMPLOYEE_TYPE_ID) REFERENCES P_EMPLOYEE_TYPE(ID),
PRIMARY KEY(P_ID,EMPLOYEE_TYPE_ID)
);
-- The following table is causing the issue
CREATE TABLE EMPLOYEE_VALUES(
ID NUMBER(4) NOT NULL,
P_ID NUMBER,
EMPLOYEE_TYPE_ID NUMBER,
VALUE VARCHAR2(100),
PRIMARY KEY(ID,P_ID,EMPLOYEE_TYPE_ID),
FOREIGN KEY (P_ID,EMPLOYEE_TYPE_ID) REFERENCES P_EMPLOYEE(P_ID,EMPLOYEE_TYPE_ID)
);
答案 0 :(得分:1)
你错了; employee_values
不会失败,但是 p_employee does
因为它引用了不存在的 p
表。这个:
SQL> -- This table is missing
SQL>
SQL> CREATE TABLE p
2 (
3 id NUMBER CONSTRAINT pk_p PRIMARY KEY
4 );
Table created.
现在,剩下的表格。
NOT NULL
;他们无论如何都不能NULL
所以:
SQL> CREATE TABLE P_EMPLOYEE_TYPE
2 (
3 ID NUMBER (22) CONSTRAINT pk_emptyp PRIMARY KEY,
4 NAME VARCHAR2 (50) NOT NULL
5 );
Table created.
SQL> CREATE TABLE P_EMPLOYEE
2 (
3 P_ID NUMBER,
4 EMPLOYEE_TYPE_ID NUMBER,
5 --
6 CONSTRAINT fk_empl_p FOREIGN KEY (P_ID) REFERENCES P (ID),
7 CONSTRAINT fk_empl_emptyp FOREIGN KEY (EMPLOYEE_TYPE_ID)
8 REFERENCES P_EMPLOYEE_TYPE (ID),
9 CONSTRAINT pk_empl PRIMARY KEY (P_ID, EMPLOYEE_TYPE_ID)
10 );
Table created.
SQL> CREATE TABLE EMPLOYEE_VALUES
2 (
3 ID NUMBER (4),
4 P_ID NUMBER,
5 EMPLOYEE_TYPE_ID NUMBER,
6 VALUE VARCHAR2 (100),
7 --
8 CONSTRAINT pk_empval PRIMARY KEY (ID, P_ID, EMPLOYEE_TYPE_ID),
9 CONSTRAINT fk_empval_emp FOREIGN KEY (P_ID, EMPLOYEE_TYPE_ID)
10 REFERENCES P_EMPLOYEE (P_ID, EMPLOYEE_TYPE_ID)
11 );
Table created.