DELETE z tabel z relacjami

0

Witam. Posiadam dwie tabele: druzyny oraz zawodnicy
Składają się one z poszczególnych kolumn:

Tabela druzyny:
ID_Druzyny | nazwa | trener | kierownik | masazysta
ID_Druzyny to PrimaryKey

Tabela zawodnicy:
ID_Zawodnika | ID_Druzyny | numer | imie | nazwisko | pozycja
ID_Zawodnika to PrimaryKey
ID_Druzyny to ForeignKey

a to relacja (FK_zawodnicy_druzyny) tych tabel:

Foreign Key Base Table: zawodnicy
Foreign Key Columns: ID_Druzyny
Primary/Unique Key Base Table: druzyny
Primary/Unique Columns: ID_Druzyny

Do tabeli druzyny dodawane są druzyny. Po wybraniu odpowiedniej druzyny do tabeli zawodnicy dodawani sa zawodnicy, gdzie do wiersza ID_Druzyny wpisywana jest wartosc ID_Druzyny z wybranej aktualnie druzyny.
Problem tkwi w tym, że podczas gdy chcę usunąć jakąś drużynę, która posiada w tabeli zawodnicy zawodników to wyskakuje mi błąd. Gdy usuwam natomiast drużynę dla której nie mam przypisanych zadnych zawodników nie ma błędu i mogę usunąć dana drużynę.

Zapytanie usunięcia:
string delQuery = "DELETE FROM druzyny WHERE nazwa = @wybranadruzyna ";

Oto komunikat błędu:

The DELETE statement conflicted with the REFERENCE constraint "FK_zawodnicy_druzyny". The conflict occurred in database "HANDBALL2.MDF", table "dbo.zawodnicy", column 'ID_Druzyny'.
The statement has been terminated.

Rozumiem, że chodzi o to, że gdy chcę usunąć daną drużynę, a jacyś zawodnicy są przypisani do tej drużyny następuje błąd?

Dlaczego się tak dzieje? Myślę, że rozsądnym było by usunięcie także zawodników którzy odpowiadają wybranej do usunięcia drużynie? Jak to zrobić?

0

To zależy co chcesz uzyskać. Niejawne usuwanie wierszy z innych tabel nie zawsze jest pożądane. Czasem lepiej właśnie chronić przed usunięciem rekordy wykorzystywane w innych tabelach. Oczywiście możesz sam decydować tworząc klucz obcy. Poczytaj o ON DELETE i ON UPDATE przy tworzeniu klucza obcego.

1 użytkowników online, w tym zalogowanych: 0, gości: 1