Tabela pracownicy ma klucz obcy wskazujący na tabelę dzialy. Aby po usunięciu działu jego pracownicy pozostali w tabeli, a w ich polu klucza obcego pojawiła się wartość NULL, w definicji klucza obcego należy użyć klauzuli
A. ON DELETE SET NULL
B. ON DELETE RESTRICT
C. ON UPDATE CASCADE
D. ON DELETE CASCADE
Poprawna klauzula to ON DELETE SET NULL. Mechanizm działania jest następujący: gdy rekord z tabeli nadrzędnej dzialy zostanie usunięty, baza danych nie usuwa powiązanych rekordów z tabeli pracownicy. Zamiast tego w kolumnie klucza obcego, która wskazywała usunięty dział, wpisywana jest wartość NULL. Typowa składnia fragmentu definicji klucza obcego wygląda tak: FOREIGN KEY (id_dzialu) REFERENCES dzialy(id) ON DELETE SET NULL. Warunkiem działania jest to, aby kolumna klucza obcego w tabeli pracownicy dopuszczała wartość NULL. Takie rozwiązanie stosuje się, gdy dane pracowników mają pozostać w bazie, ale informacja o ich przypisaniu do działu może zostać tymczasowo usunięta.
W tym przypadku chodzi o zachowanie rekordów pracowników po usunięciu powiązanego działu, dlatego właściwa klauzula to ON DELETE SET NULL. ON DELETE CASCADE działa inaczej - usuwa rekordy podrzędne razem z rekordem nadrzędnym, więc po skasowaniu działu zniknęliby także jego pracownicy. ON UPDATE CASCADE dotyczy zmiany wartości klucza w tabeli nadrzędnej, na przykład aktualizacji identyfikatora działu; nie określa skutków usuwania rekordu. ON DELETE RESTRICT blokuje usunięcie działu, jeśli istnieją pracownicy wskazujący na ten dział, więc nie pozwoliłoby wykonać opisanej operacji. Typowy błąd polega na kojarzeniu każdej akcji na relacji z CASCADE, bez rozróżnienia między usuwaniem rekordów, aktualizacją klucza i ustawianiem wartości NULL. W zadaniu podano wprost, że pracownicy mają pozostać w tabeli, a pole klucza obcego ma zostać wyczyszczone przez wpisanie NULL.