Задать вопрос
@utsiye

Когда использовать рекурсивное удаление?

У меня есть таблица с id, этот id является ForeignKey в другой таблице и так далее.
Как лучше удалять в таком случае объект из первой таблицы? Через рекурсию или по очереди?
Если вручную, то всего выходит 5 операций удаления и еще 1 операция soft delete.
  • Вопрос задан
  • 143 просмотра
Подписаться 1 Простой 4 комментария
Помогут разобраться в теме Все курсы
  • Stepik
    PRO C#. Базы данных
    2 месяца
    Далее
  • Яндекс Практикум
    Python-разработчик
    10 месяцев
    Далее
  • Merion Academy
    Базы данных с нуля
    2 месяца
    Далее
Решения вопроса 1
Удаляй через update выставляя соответствующий флаг аля "признак актуальности".
Рекурсивно без уведомления конечного пользователя лучше всё-таки ничего не удалять, обычно - тут подумай, как лучше сделать уведомление.
Если нужно рекурсивно "удалить" все записи, которые на неактуальную ссылаются (а нужно ли удалять или можно оставить заглушку, что старая запись не актукальна?), то тогда рекурсивно нужно будет по всем пройтись - для этого можно сделать триггер на апдейт флага неактуальности.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@rPman
при создании индекса foreignkey можно было настроить constraint, что делать при удалении - удалять cascade или ставить set null, соответственно если так выставить то удаление всех записей произойдет автоматически
ADD CONSTRAINT ... FOREIGN KEY ... REFERENCES ... ON DELETE CASCADE

Осторожно удаляйте, в 99% случаев нужно не удалять, а убирать связь (править значения), пример - вы создали классификатор - таблица color (id,name) и у вас есть таблица object (... color_id) ссылающаяся на классификатор, если вы удалите запись из color, то будут удалены все записи из object, в которых прописано это значение, а правильно - сначала изменить значение color_id в них на другое и только потом удалять.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы