31 lines
1.9 KiB
MySQL
31 lines
1.9 KiB
MySQL
|
|
-- 0013_project_delete_cascade — удаление проекта администратором (каскадом).
|
|||
|
|
--
|
|||
|
|
-- Удаление проекта — действие админа (DELETE /projects/:id, RequireRole
|
|||
|
|
-- "admin"). Решение: проект удаляется вместе с заявками, а не запретом 409
|
|||
|
|
-- на непустой проект. Каскады событий/фото на tickets (0006/0008) и
|
|||
|
|
-- объектов/участий на projects (0004) уже есть — здесь пересоздаются
|
|||
|
|
-- только два FK из tickets, чтобы и заявки уходили вместе с проектом:
|
|||
|
|
--
|
|||
|
|
-- tickets (object_id, project_id) → project_objects (id, project_id)
|
|||
|
|
-- каскад нужен, чтобы объекты проекта уносили свои заявки;
|
|||
|
|
-- tickets (project_id, client_id) → projects (id, client_id)
|
|||
|
|
-- каскад: заявка проекта уходит вместе с проектом.
|
|||
|
|
--
|
|||
|
|
-- Ограничения профилей из заявок (client_id/worker_id/assigned_by →
|
|||
|
|
-- profiles) остаются NO ACTION: удаление клиента с заявками — по-прежнему
|
|||
|
|
-- 409 «отключите вместо удаления».
|
|||
|
|
--
|
|||
|
|
-- Применённый файл не редактировать (checksum в schema_migrations).
|
|||
|
|
|
|||
|
|
ALTER TABLE tickets DROP CONSTRAINT IF EXISTS tickets_object_project_fk;
|
|||
|
|
ALTER TABLE tickets ADD CONSTRAINT tickets_object_project_fk
|
|||
|
|
FOREIGN KEY (object_id, project_id)
|
|||
|
|
REFERENCES project_objects (id, project_id)
|
|||
|
|
ON DELETE CASCADE;
|
|||
|
|
|
|||
|
|
ALTER TABLE tickets DROP CONSTRAINT IF EXISTS tickets_project_client_fk;
|
|||
|
|
ALTER TABLE tickets ADD CONSTRAINT tickets_project_client_fk
|
|||
|
|
FOREIGN KEY (project_id, client_id)
|
|||
|
|
REFERENCES projects (id, client_id)
|
|||
|
|
ON DELETE CASCADE;
|