Или вы можете временно отключить проверку ограничения внешнего ключа:
pragma foreign_keys = off;
Но в этом не должно быть необходимости.
Другая проблема заключается в том, что в настоящее время это записано как отношение «многие ко многим». Это будет означать, что несколько назначений могут относиться к одной задаче. Вероятно, не удастся удалить задачу только потому, что одно из назначений, ссылающихся на нее, было удалено. Вместо этого вам необходимо убедиться, что на задачу больше не ссылаются, прежде чем удалять ее.
В качестве альтернативы, если вы действительно хотели, чтобы каждая задача принадлежала только одному назначению, вы можете настроить свою схему следующим образом:
CREATE TABLE Assignment (assignment_id int PRIMARY KEY);
CREATE TABLE Task (
task_id int PRIMARY KEY,
assignment_id int FOREIGN KEY REFERENCES Assignment ON DELETE CASCADE
);
Бит ON DELETE CASCADE
приводит к удалению записи Задачи в случае удаления присвоения, к которому она относится. Конечно, это работает, только если включены ограничения внешнего ключа. Если назначение удаляется с помощью триггера или из-за какого-либо другого каскада, вам может потребоваться включить рекурсивные триггеры также с pragma recursive_triggers = on
.
Другая возможность (если вы хотите сохранить исходную схему) состоит в том, чтобы ссылки внешнего ключа в таблице AssignmentTask выполняли каскадное удаление. Таким образом, эти строки удаляются автоматически при удалении задач. Затем вы можете удалить Назначение, как только об этом позаботятся.