Несоответствие внешнего ключа при вставке (SQLite) - PullRequest
1 голос
/ 20 февраля 2020

Итак, вот мой sqlite-код ..

CREATE TABLE "performance" (
    "title" TEXT,
    "date"  date,
    "theaterID" INTEGER,    

PRIMARY KEY("title","date","theaterID"),

    FOREIGN KEY("title") REFERENCES "movies"("title"),
    FOREIGN KEY("theaterID") REFERENCES "theater"("theaterID")
);

CREATE TABLE "reservation" (
    "userName"  TEXT,
    "reservationID" INTEGER auto_increment,
    "date"  date,
    "theaterID" INTEGER,
    PRIMARY KEY("userName","reservationID","date","theaterID"),
    FOREIGN KEY("date") REFERENCES "performance"("date"),
    FOREIGN KEY("userName") REFERENCES "user"("userName"),
    FOREIGN KEY("theaterID") REFERENCES "theater"("theaterID")
);

И я делаю следующие вставки в указанном c порядке:

INSERT INTO performance(title,date,theaterID) 
VALUES("The Godfather", 20200230, 9);



INSERT INTO reservation(userName,reservationID,date,theaterID)
VALUES("user1", 1 , 20200230, 9);

Все работает, пока я не попытаюсь вставить бронирование. Я получаю следующую ошибку:

"ошибка несоответствия внешнего ключа - 'оговорка' ссылается на" производительность ""

Не могу найти причину этого? Какие изменения я должен сделать?

Ответы [ 2 ]

1 голос
/ 20 февраля 2020

У вас есть:

FOREIGN KEY("date") REFERENCES "performance"("date"),

Однако первичный ключ на performance состоит из ТРЕХ частей:

PRIMARY KEY("title", "date", "theaterID"),

Вам необходимо сослаться на все три - в правильном порядке - - в объявлении внешнего ключа:

FOREIGN KEY("date") REFERENCES "performance"("title", "date", "theaterID"),

Однако, "title" отсутствует в таблице, поэтому вы должны добавить это.

ИЛИ, просто добавить автоинкрементный первичный ключ на "performance" и используйте это для справки.

Кроме того, отбросьте двойные кавычки. Они просто делают SQL труднее писать и читать. И ответы сложнее написать.

1 голос
/ 20 февраля 2020

проверить это сообщение Что вызывает ошибку несоответствия внешнего ключа?

Проблема может быть:

  • Столбцы родительского ключа, названные в ограничении внешнего ключа, не первичный ключ родительской таблицы и не подлежат уникальному ограничению с использованием последовательности упорядочения, указанной в CREATE TABLE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...