Какова стоимость удаления записи из дочерней таблицы, имеющей ограничение внешнего ключа с родительской таблицей

Например, есть 20 таблиц, у которых есть внешний ключ таблицы, назовем ее дочерней. Теперь, когда я удаляю запись из Child, она проверяет, есть ли ссылка на запись откуда-то или нет, так ли это или какой-то другой сценарий. Мой вопрос в том, как это отношение внешнего ключа влияет на производительность операции удаления.

На самом деле я использую спящий режим, и у меня есть объект, который имеет только 3 столбца и используется во многих других сопоставлениях Entities (один к одному). Я думаю сделать этот объект встраиваемым для настройки производительности, потому что, если я сохраню его, сопоставление между таблицами будет выполняться с использованием внешнего ключа. Хотя, когда я удаляю объект, выполняется только два запроса: - удалить родительский объект, затем удалить дочерний элемент. Но поскольку на внешний ключ ребенка ссылаются из многих других таблиц с большим количеством записей, он будет проверять, существует ли ссылка на запись в дочернем элементе в некоторых таблицах или нет, если нет, то удалите при удалении дочерней записи. Поэтому я хочу решить эту проблему, сделав дочерний элемент встраиваемым, в результате чего столбцы дочернего элемента будут включены в родительские таблицы. Поможет ли это?


person Gajendra Kumar    schedule 24.05.2016    source источник


Ответы (1)


Производительность во многом зависит от того, какую СУБД вы используете, как ваши таблицы спроектированы, индексируются и хранятся, а также от того, сколько данных у вас есть.

Как правило, ограничения внешнего ключа экономят время и усилия и предотвращают ошибки. Без ограничения внешнего ключа вам придется самостоятельно обеспечивать целостность.

Например, каскадное удаление или обновление вручную может выполняться за несколько циклов обращения к базе данных, которые обычно заключаются в транзакции. Ручная проверка связанных записей для ограничения изменений также потребует дополнительных запросов и передачи данных между сервером и клиентом.

Если вы что-то пропустили или другой пользователь изменил связанные данные между вашими запросами, вы можете получить неверные данные, что может оказаться очень дорогостоящим - как с точки зрения времени администратора баз данных, так и с точки зрения удовлетворенности клиентов.

person reaanb    schedule 24.05.2016
comment
Я отредактировал свой вопрос, дайте мне знать ваш совет - person Gajendra Kumar; 24.05.2016
comment
Извините, я не использую объектно-реляционные преобразователи и не могу посоветовать вам ситуацию. Я удалю свой ответ, если вы сочтете его неуместным. - person reaanb; 24.05.2016