1

所以我遇到了这个问题,我的表的外键没有正确引用前一个表。我正在为 IBM i 使用 DB2 进行编码(使用使用 COLLECTIONS 而不是 SCHEMA 的旧语言——它是我大学课程的一部分)

确切的错误信息是:

SQL 状态:42890 供应商代码:-573 消息:[SQL0573] UMALIK5 中的表 EMPLOYEE 没有匹配的父键。原因 。. . . . : 在 UMALIK5 中的约束 CAMPUS_FK 的 FOREIGN KEY 子句中指定了引用列列表。UMALIK5 中的父表 EMPLOYEE 没有匹配的 PRIMARY 或 UNIQUE 键。如果文件是分区的,则父文件的访问路径必须是非分区的。无法添加约束。恢复 。. . :执行以下操作之一并再次尝试请求: -- 在 FOREIGN KEY 子句中指定一个表,该表具有与引用列列表匹配的 PRIMARY 或 UNIQUE 键。-- 更改引用列列表以匹配父表上定义的 PRIMARY 或 UNIQUE 键的定义。-- 如果父文件有分区,则添加非分区访问路径。

我在 IBM 的支持页面上查找的错误比这更令人困惑。

这是我的代码:

CREATE TABLE UMALIK5.POSITION (
POSNCODE VARCHAR (10) CONSTRAINT UMALIK5.POSITION_PK PRIMARY KEY,
POSNDESC VARCHAR (50));

SELECT * FROM UMALIK5.SYSTABLES;
SELECT * FROM UMALIK5.SYSCOLUMNS
 WHERE TABLE_NAME = 'EMPLOYEE';
CREATE TABLE UMALIK5.EMPLOYEE (
EMP_NUM VARCHAR (10) CONSTRAINT UMALIK5.EMPLOYEE_PK PRIMARY KEY,
EMP_F_NAME VARCHAR (50),
EMP_L_NAME VARCHAR (50),
MANAGER_NUM VARCHAR (10),
SUPERVISOR_CODE VARCHAR (10),
PAYRATE VARCHAR (20),
POSNCODE VARCHAR (10),
HIREDATE VARCHAR (50),
CONSTRAINT UMALIK5.EMPLOYEE_FK FOREIGN KEY (POSNCODE)
REFERENCES UMALIK5.POSITION(POSNCODE));

CREATE TABLE UMALIK5.CAMPUS (
CAMPUS_ID VARCHAR (10) CONSTRAINT UMALIK5.CAMPUS_PK PRIMARY KEY,
CAMPUS_NAME VARCHAR (30),
MANAGER_NUM VARCHAR (10),
CONSTRAINT UMALIK5.CAMPUS_FK FOREIGN KEY (MANAGER_NUM)
REFERENCES UMALIK5.EMPLOYEE(MANAGER_NUM));

我不知道我需要做什么,当我运行我的 DB2 脚本时,Employee 表创建得很好,但由于某种原因 CAMPUS 表没有。

我究竟做错了什么?

感谢您的帮助。

4

1 回答 1

4

从字面上理解错误信息。为了有一个外键,你必须在父表中引用一些东西,它会只返回一条记录。您正在尝试引用 manager_num ,它不仅不是唯一的,而且实际上可能为空。这就是 db2 对您咆哮的原因。

于 2013-12-02T17:20:05.080 回答