Понимание правил обновления и удаления для отношений в SSMS 2008
Я смущен о том, что означает правило обновления и удаления в SQL Server 2008 Management Studio, когда мы определяем ограничения внешнего ключа. Я также не нашел соответствующие справочные документы (например, справку F1).
Вот скриншот экрана. Цените, если кто-нибудь может описать, что они означают, и рекомендовать некоторые связанные документы для чтения.: -)
![enter image description here]()
Ответы
Ответ 1
Внешний ключ определяет отношения между родителями и дочерними элементами между двумя таблицами. Первичным ключом в родительской таблице является внешний ключ в строках до n дочерних таблиц.
Теперь, если этот первичный ключ в родительской таблице получает UPDATE, UPDATE RUL запускается. Либо все дочерние строки также обновляются, устанавливаются в NULL или что-то еще. Однако лучше всего иметь первичный ключ, который НИКОГДА не изменяется (фиксированный идентификатор или что-то еще), так что менее важное правило.
Более важным является правило DELETE - что, если родительская строка удалена (например, заказ удален)? Вы также можете удалить все дочерние строки (все позиции заказа) с помощью CASCADE DELETE, или вы можете установить их внешний ключ в NULL (у них больше нет родителя) - это полностью зависит от вашего конкретного сценария.
В сценарии строк заказа/порядка может оказаться совершенно полезным удалить строки заказа, когда полный заказ будет удален, но вы, вероятно, не хотите удалять продукт, просто потому, что заказ, который ссылается на него, был удален - нет ни одного ПРАВИЛЬНОГО ответа - это зависит от вашего сценария и вашего приложения.
Марк
Ответ 2
Похоже, что документация находится в Диалоговое окно "Отношения с внешними ключами" .
BTW, F1 помог мне отлично справиться в SSMS 2008. Он взял меня прямо на вышеприведенную страницу (после того, как я, конечно, искал 1/2 часа в Интернете).
Ответ 3
Поле внешнего ключа может хранить только нуль или значение, определяемое полем первичного ключа.
Если вы попытаетесь изменить значение внешнего ключа на то, что не определено первичным ключом, вы получите сообщение об ошибке. Аналогично, если вы попытаетесь изменить первичный ключ с зависимостями внешнего ключа, вы получите сообщение об ошибке... в качестве примера
Models table
modelID (primary key) model
1 Jeep
2 Ford
Customer table
id customer modelID (foreign key of Models.modelID)
1 1234 1
2 2345 2
Если вы попытаетесь удалить Jeep-запись из моделей, вы получите сообщение об ошибке, потому что клиент 1234 имеет идентификатор модели, установленный в 1, и это, если внешний ключ. Аналогично, если я попытаюсь обновить клиент 1234, чтобы иметь идентификатор model из 3, он выдает ошибку, потому что в таблице моделей нет первичного ключа, имеющего значение 3
Проверьте это
Ответ 4
страница MSDN выглядит неплохо.