2009-07-16 12 views
15

Nie rozumiem, co oznacza zasada aktualizacji i usunięcia w SQL Server 2008 Management Studio, gdy definiujemy ograniczenia klucza obcego. Nie znalazłem też powiązanych dokumentów pomocy (np. Pomocy F1).Zrozumienie reguł aktualizacji i usuwania powiązań w SSMS 2008

Tutaj jest zrzut ekranu. Doceń, czy ktokolwiek może opisać, co mają na myśli i polecić przeczytanie niektórych powiązanych dokumentów. :-)

enter image description here

Odpowiedz

22

Klucz obcy definiuje relację rodzic - dziecko między dwiema tabelami. Kluczem podstawowym w tabeli nadrzędnej jest klucz obcy w wierszach z wierszami o maksymalnej długości do n.

Teraz, jeśli klucz podstawowy w tabeli nadrzędnej otrzyma ZAKTUALIZACJĘ, rozpoczyna się ZAKTUALIZACJA. Wszystkie wiersze potomne są również aktualizowane, ustawione na NULL lub cokolwiek innego. Najlepszą praktyką jest jednak posiadanie klucza podstawowego, który NIGDY się nie zmienia (stały identyfikator lub coś takiego), więc jest to mniej ważna zasada.

Ważniejszą z nich jest reguła DELETE - co się stanie, jeśli wiersz nadrzędny zostanie usunięty (np. Zamówienie zostanie usunięte)? Możesz również usunąć wszystkie wiersze podrzędne (wszystkie elementy zamówienia) za pomocą CASCADE DELETE, lub możesz ustawić ich klucz obcy na NULL (nie mają już rodzica) - to zależy od konkretnego scenariusza.

W scenariuszu zamówienia/kolejność zamówień może być całkowicie przydatne usunięcie linii zamówienia po usunięciu całego zamówienia, ale prawdopodobnie nie chcesz usuwać produktu, tylko dlatego, że zamówienie, które się nim posługuje, zostało usunięte usunięte - nie ma jednej, właściwej odpowiedzi - zależy to od Twojego scenariusza i Twojej aplikacji.

Marc

+1

Dzięki Marc, uczę się na tej stronie MSDN, http://msdn.microsoft.com/en-us/library/ms186973%28SQL.90%29.aspx Jedno zamieszanie, jest wspomniane "Jeśli kaskadowe działania referencyjne mają również zostały zdefiniowane w tabelach docelowych ... ", moje zamieszanie wydaje się być poza czterema działaniami (BEZ AKCJI | KASKADU | ZESTAWU NULL | USTAWIONE W DOMU), możemy również zdefiniować inne akcje? – George2

+1

Nie, możesz zdefiniować jedną z tych czterech akcji dla scenariusza AKTUALIZACJI i USUŃ. O czym mówi artykuł to scenariusz, w którym TableB odwołuje się do TableA i ma "ON DELETE CASCADE", więc jeśli wiersz z TableA zostanie usunięty, wszystkie dzieci w TableB również zostaną usunięte. Jeśli w tym przypadku istnieje tabela B odwołująca się do Table B z akcją ON DELETE CASCADE, to usunięcie w tabeli A przechodzi do TableB, a następnie do TableC. –

+0

Dzięki Marc, podoba mi się twoja odpowiedź! – George2

1

Pole klucz obcy może przechowywać wartości null lub wartość określoną przez pola klucza podstawowego.

Jeśli spróbujesz zmienić wartość klucza obcego na coś, co nie jest zdefiniowane przez klucz podstawowy, pojawi się błąd. Podobnie, jeśli starają się zmienić klucz podstawowy, który ma klucz obcy zależności dostaniesz błąd ... jako przykład

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 

Jeśli spróbujesz usunąć rekord z modeli Jeep dostaniesz błąd, ponieważ klient 1234 ma identyfikator modelID na 1, a ten, jeśli klucz obcy. Podobnie, jeśli staram się aktualizować klienta 1234 mieć ModelID z 3 to wygeneruje błąd, ponieważ nie ma klucza podstawowego w tabeli modeli o wartości 3

Check this out

+0

Dzięki Chris, ale link, który poleciłeś, nie wspomina o tym, co oznacza aktualizacja i usuwanie w SMSS? Mówi o ogólnej teorii klucza forrign. – George2

+1

Oto odwołanie do google booków na temat tych zasad: http://books.google.com/books?id=OgkmmR7-XxUC&pg=PP320&lpg=PP320&dq=sql+update+rule+i+delete+rule&source=bl&ots=OUmtEg2kNH&sig=6NxvAbBkCA9dpFnmrheIcEKVGOM&hl=en&ei = DyRfSpjIIcqwtgfvo5XgAw & sa = X & oi = book_result & ct = result & resnum = 4 –

+0

Czy możemy wydrukować zawartość książki Google? Próbowałem ciężko, ale nie mogę drukować. :-) – George2

1

MSDN page wygląda jak dobry początek .

+0

Dzięki AakashM, ta strona jest bardzo pomocna, jedno pomieszanie, jest wspomniane "Jeśli kaskadowe działania referencyjne zostały również zdefiniowane w tabelach docelowych ...", Moje zamieszanie wydaje się poza czterema działaniami (NIE AKCJA | KASKADUJ | ZESTAW NULL | USTAWIONY NA DOMU), moglibyśmy zdefiniować także inne akcje? – George2

+2

Nie wierzę - i zgaduję, że to jedno z tych działań, a nie bardziej złożone zachowanie, generalnie byłby tym, co chcieliśmy zrobić. – AakashM

3

Wygląda na to dokumentacja jest w Foreign Key Relationships Dialog Box.

BTW, F1 pomógł mi dobrze pracować w SSMS 2008. Zabrało mnie to na powyższą stronę (po tym, jak szukałem 1/2 godziny online, oczywiście).

+0

Dzięki John, niestety, pomoc F1 nie pomaga mi . :-( – George2

+0

Kliknąłem prawym przyciskiem myszy na stół i wybrałem "Projekt", a następnie kliknąłem projektanta prawym przyciskiem myszy i wybrałem "Relacje", a następnie wcisnąłem F1 i otrzymałem pomoc. Jakiej wersji SQL Serveru używasz? –

Powiązane problemy