Когда я вставляю данные в таблицу ASSIGNMENTS, все работает отлично, за исключением значений HARDWARE и SOFTWARE, которые кодируются точно так же, как и другие. Я просто не понимаю.Почему родительский ключ не найден?
Это работает:
INSERT INTO ASSIGNMENTS (ASSIGNMENT_ID, PROJECT_ID, STAFF_ID, JOB_ID)
VALUES ('A0005','B0002','ST002','J0002');
Но когда я пытаюсь включить значения для аппаратного или программного обеспечения, как это:
INSERT INTO ASSIGNMENTS (ASSIGNMENT_ID, PROJECT_ID, STAFF_ID, JOB_ID, HARDWARE_ID)
VALUES ('A0005','B0002','ST002','J0002','H0002');
Я просто получаю следующее сообщение об ошибке: SQL Error: ORA-02291 : нарушение целостности (JAS1224.SYS_C0028418) нарушено - родительский ключ не найден 02291. 00000 - «ограничение целостности (% s.% s) нарушено - родительский ключ не найден» * Причина: значение внешнего ключа не имеет соответствующего значения первичного ключа , * Действие: удалите внешний ключ или добавьте соответствующий первичный ключ.
Вот весь код, и все таблицы были заселены правильно (таблицы аппаратного и программного обеспечения закодированы в точно таком же формате, что и таблица персонала):
CREATE TABLE PROJECT
(PROJECT_ID CHAR(5) NOT NULL,
PROJECT_NAME CHAR(20),
PROJECT_TYPE CHAR(20),
START_DATE DATE,
END_DATE DATE,
PRIMARY KEY (PROJECT_ID));
CREATE TABLE HARDWARE
(HARDWARE_ID CHAR(5) NOT NULL,
HARDWARE_NAME CHAR(20),
PRIMARY KEY (HARDWARE_ID));
CREATE TABLE SOFTWARE
(SOFTWARE_ID CHAR(5) NOT NULL,
SOFTWARE_NAME CHAR(20),
PRIMARY KEY (SOFTWARE_ID));
CREATE TABLE STAFF
(STAFF_ID CHAR(5) NOT NULL,
STAFF_NAME CHAR(20),
PRIMARY KEY (STAFF_ID));
CREATE TABLE JOB
(JOB_ID CHAR(5) NOT NULL,
JOB_TYPE CHAR(20),
JOB_GRADE CHAR(20),
PRIMARY KEY (JOB_ID));
CREATE TABLE ASSIGNMENTS
(ASSIGNMENT_ID CHAR(5) NOT NULL,
PROJECT_ID CHAR(5),
STAFF_ID CHAR(5),
JOB_ID CHAR(5),
HARDWARE_ID CHAR(5),
SOFTWARE_ID CHAR(5),
PRIMARY KEY (ASSIGNMENT_ID),
FOREIGN KEY (PROJECT_ID) REFERENCES PROJECT(PROJECT_ID),
FOREIGN KEY (STAFF_ID) REFERENCES STAFF(STAFF_ID),
FOREIGN KEY (JOB_ID) REFERENCES JOB(JOB_ID),
FOREIGN KEY (HARDWARE_ID) REFERENCES HARDWARE(HARDWARE_ID),
FOREIGN KEY (SOFTWARE_ID) REFERENCES SOFTWARE(SOFTWARE_ID));
Действительно ли у вас есть строка в таблице «HARDWARE», где «HARDWARE_ID =« H0002 »? Вы понимаете, как работают первичные ключи и внешние ключи, ссылающиеся на первичные ключи? – mathguy
Я делаю, и когда я задал этот вопрос, я был уверен, что данные уже вставлены и что все было там - но я, должно быть, допустил ошибку, и у меня не было таких рядов, как я был так уверен. Весь код был написан и готов, я просто не должен его выполнять, хотя я думал, что сделал. – JadstaSeven
:-) Не беспокойтесь, это случается со всеми. – mathguy