Ну расскажи тогда как проверять энтот ключ при удалении мастер-записи
Я это представляю в виде системных триггеров:
1) При создании ключа на каждый вариант WHEN создаются почти такие же
триггеры, как щас на обычные ВК, только во все проверки добавляется
условие, прописанное в WHEN
2) При удалении MASTER-записи грохаются все дочерние записи, в которых
значения ключевых полей совпадают + выполняется условие.
Ну например создал я ключ типа как я в примере написал:
ALTER TABLE "Child"
ADD CONSTRAINT "Child_fk"
FOREIGN KEY ("ParentId")
REFERENCES
WHEN "ParentTypeId" = 1 THEN
"Parent1" ("Id") ON DELETE NO ACTION ON UPDATE NO ACTION
WHEN "ParentTypeId" = 2 THEN
"Parent2" ("Id") ON DELETE NO ACTION ON UPDATE NO ACTION
При вставке и обновлении тут яснее некуда. Сначала вычисляет по
"ParentTypeId" в какой таблице искать MASTER-запись, а потом делает
стандартную проверку как и щас.
При удалении записи из "Parent2" должно выполниться что-то типа:
DELETE FROM "Child" WHERE "ParentTypeId" = 2 AND "ParentId" = OLD."Id";
Я тут вижу проблему в случае если в условии WHEN будет подзапрос или
какое-то дурацкое условие типа там сегодняшний день - чётный. Но ты ведь
лично делал индексы по выражениям и эта проблема там тоже стоит, но ты
её оставил на откуп программисту. Я думаю здесь можно поступить так
же... Или разрешить в условии использовать только имена полей и литералы.