Итак, у меня возникла проблема, когда внешний ключ моей таблицы неправильно ссылается на предыдущую таблицу. Я кодирую в DB2 для IBM i (используя старый язык, в котором вместо SCHEMA используются COLLECTIONS — это часть учебной программы в моем колледже)
точное сообщение об ошибке:
Состояние SQL: 42890 Код поставщика: -573 Сообщение: [SQL0573] Таблица EMPLOYEE в UMALIK5 не имеет соответствующего родительского ключа. Причина . . . . . : Список ссылающихся столбцов был указан в предложении FOREIGN KEY для ограничения CAMPUS_FK в UMALIK5. Родительская таблица EMPLOYEE в UMALIK5 не имеет соответствующего ключа PRIMARY или UNIQUE. Если файл разбит на разделы, путь доступа к родительскому файлу не должен быть разделен на разделы. Ограничение не может быть добавлено. Восстановление . . . : выполните одно из следующих действий и повторите запрос: -- Укажите таблицу в предложении FOREIGN KEY, которая имеет ключ 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));
Я в недоумении, что мне нужно делать, таблица Employee прекрасно создается, когда я запускаю свой сценарий DB2, но по какой-то причине таблица CAMPUS этого не делает.
Что я делаю неправильно?
Спасибо за помощь.