2009-07-16 1 views
15

Я смущен о том, что означает правило обновления и удаления в SQL Server 2008 Management Studio, когда мы определяем ограничения внешнего ключа. Я также не нашел соответствующие справочные документы (например, справка F1).Понимание правил обновления и удаления отношений в SSMS 2008

Вот скриншот экрана. Цените, если кто-нибудь может описать, что они означают, и рекомендовать некоторые связанные документы для чтения. :-)

enter image description here

ответ

22

Внешний ключ определяет отношения между родителями и дочерними элементами между двумя таблицами. Первичным ключом в родительской таблице является внешний ключ в строках до n дочерних таблиц.

Теперь, если этот первичный ключ в родительской таблице получает UPDATE, UPDATE RUL запускается. Либо все дочерние строки также обновлены, установлены значения NULL или что-то еще. Однако лучше всего иметь первичный ключ, который НИКОГДА не изменяется (фиксированный идентификатор или что-то еще), поэтому это менее важное правило.

Более важным является правило DELETE - что, если родительская строка удалена (например, заказ удален)? Вы также можете удалить все дочерние строки (все позиции заказа) с помощью CASCADE DELETE или вы можете установить их внешний ключ в NULL (у них больше нет родителя) - это полностью соответствует вашему конкретному сценарию.

В сценарии строк заказа/порядка может оказаться совершенно полезным удалить строки заказа, когда полный заказ будет удален, но вы, вероятно, не хотите удалять продукт, просто потому, что заказ, который ссылается на него, был deleted - нет ни одного ПРАВИЛЬНОГО ответа - это зависит от вашего сценария и вашего приложения.

Марк

+1

Спасибо Marc, я изучаю эту страницу MSDN, http://msdn.microsoft.com/en-us/library/ms186973%28SQL.90%29.aspx Одна путаница, упоминается «Если каскадные ссылочные действия также были определены в целевых таблицах ... », моя путаница кажется выше четырех действий (NO ACTION | CASCADE | SET NULL | SET DEFAULT), мы могли бы определить и другие действия? – George2

+1

Нет, вы можете определить одно из этих четырех действий для сценариев UPDATE и DELETE. О чем говорится в статье, является сценарий, в котором TableB ссылается на TableA и имеет «ON DELETE CASCADE», поэтому, если строка из таблицы A будет удалена, все дети в TableB также будут удалены. Если в этом случае есть таблица TableB, ссылающаяся на таблицуB с действием ON DELETE CASCADE, то это удаление в TableA переходит в TableB, а затем в TableC. –

+0

Спасибо, Марк, мне нравится ваш ответ! – George2

1

Внешний ключ поле может хранить только нуль или значение, определяемое полями первичного ключа.

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

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 имеет идентификатор modelID, равный 1, и это, если внешний ключ. Точно так же, если я пытаюсь обновить клиент 1234, чтобы иметь ModelID из 3 будет выдавать ошибку, потому что нет первичного ключа в таблице моделей, имеющего значение 3

Check this out

+0

Спасибо Крис, но ссылка, которую вы рекомендовали, не упоминает, что означает обновление и удаление правила в SMSS? В нем говорится об общей теории приоритетов. – George2

+1

heres ссылка на книги Google по этим правилам http://books.google.com/books?id=OgkmmR7-XxUC&pg=PP320&lpg=PP320&dq=sql+update+rule+and+delete+rule&source=bl&ots=OUmtEg2kNH&sig=6NxvAbBkCA9dpFnmrheIcEKVGOM&hl=ru&ei = DyRfSpjIIcqwtgfvo5XgAw & sa = X & oi = book_result & ct = result & resnum = 4 –

+0

Можем ли мы печатать содержимое книги Google? Я старался, но не могу распечатать. :-) – George2

1

MSDN page выглядит как хороший старт ,

+0

Спасибо AakashM, я нашел эту страницу очень полезной. Одна путаница, упоминается «Если каскадные ссылочные действия также были определены в целевых таблицах ...», моя путаница кажется выше четырех действий (NO ACTION | CASCADE | SET NULL | SET DEFAULT), мы могли бы также определить некоторые другие действия? – George2

+2

Я так не считаю - и я бы предположил, что одно из этих действий, а не более сложное поведение, как правило, было тем, что мы действительно хотели сделать. – AakashM

3

Похоже, что документация на Foreign Key Relationships Dialog Box.

BTW, F1 помог мне отлично справиться с SSMS 2008. Он взял меня прямо на вышеприведенную страницу (после того, как я, конечно, искал 1/2 часа в Интернете).

+0

Спасибо, John, к сожалению, помощь F1 не помогает мне , :-( – George2

+0

Я щелкнул правой кнопкой мыши по таблице и выбрал «Дизайн». Затем я щелкнул правой кнопкой мыши дизайнера и выбрал «Отношения». Затем я нажал F1 и получил помощь. Какую версию SQL Server вы используете? –

Смежные вопросы