SQL Server: Удаление строк с Ограничениями Внешнего ключа: Транзакции могут переопределить ограничения?

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

Действительно ли возможно переопределить эти ограничения путем вызова нескольких, удаляет в рамках транзакции, конкретно "TransactionScope" в C# или расположенном каскадом удалении абсолютно требуется?

6
задан OMG Ponies 29 April 2010 в 19:24
поделиться

4 ответа

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

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

14
ответ дан 8 December 2019 в 04:29
поделиться

Единственный способ "переопределить" ограничение внешнего ключа предназначено для его отключения:

Отключение ограничения FOREIGN KEY позволяет изменять данные в таблице без проверки ограничений. Отключите ограничение FOREIGN KEY во время инструкций INSERT и UPDATE, если новые данные будут нарушать ограничение или если ограничение должно применяться только к данным, уже находящимся в базе данных.

Вам нужно использовать команду ALTER TABLE , чтобы отключить ограничение, используя ключевое слово NOCHECK . IE:

ALTER TABLE dbo.cnst_example NOCHECK CONSTRAINT salary_cap;

Единственная альтернатива - удалить ограничение и при необходимости добавить его заново.

Необходимость сделать это должна привести к дискуссиям о том, как моделировать таблицы, поэтому в этом нет необходимости.

7
ответ дан 8 December 2019 в 04:29
поделиться

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

1
ответ дан 8 December 2019 в 04:29
поделиться

Вы не можете отменить ограничения FK, если бы вы могли, какой смысл был бы в их создании?

2
ответ дан 8 December 2019 в 04:29
поделиться
Другие вопросы по тегам:

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