Насколько я знаю, в SQLite 3 нет прямой возможности иметь ограничения внешнего ключа. У меня есть таблица «многие ко многим», которая нуждается в этом, поэтому я создаю триггер, который вызывает ABORT, когда внешний ключевое ограничение нарушено. Мое утверждение выглядит так:
CREATE TRIGGER fkFooBar
BEFORE INSERT ON Foo_Bar
FOR EACH ROW BEGIN
SELECT RAISE (ABORT, 'Insert on Foo_Bar violates foreign key')
WHERE ((SELECT id as fId FROM FOO WHERE fId = NEW.fooId) IS NULL) || ((SELECT id as bId FROM BAR WHERE bId = NEW.barId) IS NULL);
END;
Но это ограничивает присутствие barId, а не fooId. Я только смутно знаком с SQL, и раньше не имел дело с триггерами, так что я немного растерялся в этом. Почему это не работает? Я поступаю об этом неправильно? Должно ли это быть намного проще? (то есть в одном операторе SELECT)