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
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
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. –
Dzięki Marc, podoba mi się twoja odpowiedź! – George2