Зависимости внешнего ключа при удалении таблицы - PullRequest
1 голос
/ 21 января 2020

В моем Postgresql у меня есть главная таблица TABLE_MAIN , содержащая 10 столбцов, в которых 7 столбцов являются внешними ключами первичных ключей других 7 таблиц.

Теперь в одной из таблиц ( не TABLE_MAIN ) давайте назовем это child_table , когда я нажимаю кнопку Refre sh в пользовательском интерфейсе, я очищаю все данные в child_table , используя следующий запрос Django ORM, а затем вставьте соответствующие данные.

child_table.objects.all().delete()

У меня есть много важных данных в TABLE_MAIN около 1000 строк и, к моему удивлению, всякий раз, когда я нажимаю кнопку Refre sh в пользовательском интерфейсе (которая удаляет все данные в child_table ), я обнаруживаю, что TABLE_MAIN данные полностью исчезают.

Что здесь происходит? Это из-за зависимостей внешнего ключа ??

и другие данные child_tables полностью безопасны, но данные TABLE_MAIN потеряны.

Удаление одного первичного ключа в child_table , для которого он является внешним ключ из поля TABLE_MAIN повлияет на потерю всех данных в TABLE_MAIN?

1 Ответ

1 голос
/ 21 января 2020
Поле ForeignKey

Django предоставляет специальную опцию on_delete , которая позволяет указать Django, что делать в случае удаления связанных моделей. Возможно, у вас установлено значение CASCADE , которое удаляет все объекты, содержащие ForeignKey, всякий раз, когда вы удаляете какой-либо объект из БД. Если вам не нужно это поведение, вам следует рассмотреть возможность передачи опции PROTECT , SET_NULL , SET_DEFAULT в on_delete в ваших полях ForeignKey.

...