Прежде всего, я извиняюсь, что имена таблиц и т.д. Находятся на другом языке.
Этот вопрос я не могу добавить внешний ключ с именем ID_KOPIE из таблицы KOPIA_KNIHY в таблицу Skład по какой - то причине. Когда он получает добавление внешнего ключа в таблицу SKLAD, он выдает ошибку 1215. Вот код:
CREATE TABLE BOOK (
BOOK_NAME VARCHAR(30) NOT NULL,
YEAR CHAR(4) NOT NULL,
NAME_OF_EDITOR VARCHAR(30) NOT NULL,
WRITER_ID INTEGER NOT NULL,
ISBN VARCHAR(17) NOT NULL,
BOOK_ID INTEGER NOT NULL,
PRIMARY KEY (BOOK_ID),
);
CREATE TABLE BOOK_COPY(
BOOK_ID INTEGER NOT NULL,
LANGUAGE_CODE CHAR(3) NOT NULL,
COPY_ID INTEGER NOT NULL,
BOOK_PICTURES CHAR(1) NOT NULL
CHECK (BOOK_PICTURES IN ("Y", "N")),
PRIMARY KEY (BOOK_ID, LANGUAGE_CODE, COPY_ID)
FOREIGN KEY(BOOK_ID)
REFERENCES BOOK(BOOK_ID),
);
CREATE TABLE STORAGE (
BOOK_ID INTEGER NOT NULL,
COPY_ID INTEGER NOT NULL,
BUILDING_ID INTEGER NOT NULL,
ROOM_NUMBER NUMERIC(4,0) NOT NULL,
SHELF_NUMBER NUMERIC(4,0) NOT NULL,
PRIMARY KEY(BOOK_ID, BUILDING_ID, COPY_ID),
FOREIGN KEY(COPY_ID)
REFERENCES BOOK_COPY(BOOK_ID),
)
Я исследовал код ошибки 1215 в Интернете, я не нашел ничего плохого в моей базе данных. Я проверил, есть ли опечатка или я не забыл добавить ссылку.
Это ошибка:
0 769 18:19:37 CREATE TABLE STORAGE (
BOOK_ID INTEGER NOT NULL,
COPY_ID INTEGER NOT NULL,
BUILDING_ID INTEGER NOT NULL,
ROOM_NUMBER NUMERIC(4,0) NOT NULL,
SHELF_NUMBER NUMERIC(4,0) NOT NULL,
PRIMARY KEY(BOOK_ID, BUILDING_ID, COPY_ID),
FOREIGN KEY(COPY_ID)
REFERENCES BOOK_COPY(BOOK_ID),
)
Error Code: 1215. Cannot add foreign key constraint 0.016 sec
Мой вопрос в том, как это можно зафиксировать, что это сработает.
Помощь будет принята с благодарностью.
Попробуйте это. Пожалуйста, ON UPDATE... ON DELETE
синтаксис ON UPDATE... ON DELETE
в этом примере с тем, который вам нужен.
CREATE TABLE 'KNIHA' (
'NAZOV_KNIHY' VARCHAR(30) NOT NULL,
'ROK_PRVEHO_VYDANIA' CHAR(4) NOT NULL,
'NAZOV_VYDAVATELA' VARCHAR(30) NOT NULL,
'ID_AUTORA' INTEGER NOT NULL,
'ISBN' VARCHAR(17) NOT NULL,
'ID_KNIHY' INTEGER NOT NULL,
PRIMARY KEY ('ID_KNIHY')
);
CREATE TABLE 'KOPIA_KNIHY' (
'ID_KNIHY' INTEGER NOT NULL,
'KOD_JAZYKA' CHAR(3) NOT NULL,
'ID_KOPIE' INTEGER NOT NULL,
'ORAZKY_V_KNIHE' CHAR(1) NOT NULL
CHECK ('OBRAZKY_V_KNIHE' IN ("A", "N")),
INDEX('ID_KOPIE'),
PRIMARY KEY ('ID_KNIHY', 'KOD_JAZYKA', 'ID_KOPIE'),
CONSTRAINT 'idx_1' FOREIGN KEY 'idx_1' ('ID_KNIHY') REFERENCES 'KNIHA'('ID_KNIHY') ON UPDATE CASCADE ON DELETE CASCADE
);
CREATE TABLE 'SKLAD' (
'ID_KNIHY' INTEGER NOT NULL,
'ID_KOPIE' INTEGER NOT NULL,
'ID_BUDOVY' INTEGER NOT NULL,
'CISLO_MIESTNOSTI' NUMERIC(4,0) NOT NULL,
'CISLO_REGALU' NUMERIC(4,0) NOT NULL,
PRIMARY KEY('ID_KNIHY', 'ID_BUDOVY', 'ID_KOPIE'),
CONSTRAINT 'idx_2' FOREIGN KEY 'idx_2' ('ID_KOPIE') REFERENCES 'KOPIA_KNIHY'('ID_KOPIE') ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT 'idx_3' FOREIGN KEY 'idx_3' ('ID_KNIHY') REFERENCES 'KNIHA'('ID_KNIHY') ON UPDATE CASCADE ON DELETE CASCADE
);
Попробуйте на SQL Fiddle
,
ID_KOPIE
какINDEX
в вашей таблицеKOPIA_KNIHY
.