Удаление строк базы данных и их ссылок-лучшие практики - PullRequest
2 голосов
/ 03 декабря 2009

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

Нужно ли удалять каждую ссылку в соответствующем порядке, или есть «автоматический» способ сделать это, например, в linq to sql?

Ответы [ 3 ]

5 голосов
/ 03 декабря 2009

Если вы выполняете весь доступ к данным через хранимые процедуры, то об этом должна позаботиться ваша удаленная хранимая процедура для мастера. Вы должны поддерживать это, когда добавляете новую связанную таблицу, но IMO, которая требует, чтобы вы думали о том, что вы делаете, и это хорошо.

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

3 голосов
/ 04 декабря 2009

Во многих случаях лучший способ удалить что-либо в базе данных - просто «виртуально» удалить это, установив столбец IsDeleted, а затем проигнорировав строку во всех других запросах.

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

Вы можете просто оставить строки «IsDeleted» в системе навсегда (что может быть полезно для аудита) или вернуться назад и удалить их по-настоящему, когда система простаивает.

1 голос
/ 03 декабря 2009

если у вас есть внешние ключи, установленные с помощью ON DELETE CASCADE, он позаботится об удалении вашей базы данных только с помощью DELETE master WHERE id =: x

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...