Jak przyzwolić NULL kiedy jest ustawiony FOREIGN KEY

0

Cześć, szukałem odpowiedzi ale nie znalazłem i chciałbym, żeby mi ktoś wytłumaczył solucje tego problemu.
Są 2 tabele - Jedna ma kolumne Department i ustawiony FOREIGN KEY do tabeli Departments i kolmny ID.

Niestety, ustawiłem wcześniej opcje w tej tabeli NOT NULL w kolumnie Department. Niestety, jednak bym chciał przyzwolić na NULL, po prostu jest możliwość jego nie posiadania. Nie moge tego zmodyfikować 'by query' ani z interfejsu MSSMS.

Może mi ktoś wytłumaczyć, czemu i jak się z taką sytuacją obchodzić?

screenshot-20210224132859.png

Rozumiem, że kolumny są te zależne od siebie, ale jednak stwierdziłem, że chcę, żeby można było mieć NULL. Pomyślałem, że można by było w większych bazach może obejść dodając jeden rekord do Departments z nazwą 'nothing' czy coś w ten deseń, ale nie w tym rzecz.

Mógłbym od nowa całą tą baze czy tabele zrobić, ale nie w tym rzecz, chce wiedzieć dlaczego nie mogę tego zmienić.
Wiem, szukałem i są wytłumaczenia na tym stackoverflow ale już sę tyle naczytałem, że zgłupiałem.

Za każdą pomoc z góry dziękuje!

4

Masz jeden Matka do wielu Dziecko
matka ma tylko pk
dziecko ma swoje pk i fk wskazujące na id matki

Matka może nie mieć Dziecka - OK
Czy Dziecko może nie mieć Matki (nie urodzić się - nie jest z probówki)?( Nie ma znaczenia, że matka aktualnie już nie żyje.)

Dwa tematy dla ciebie: agregacja i kompozycja

Kompozycja: Dom i Pokoje. Dom ma Pokoje. Zniszczysz dom (spadła bomba), to nie mogą dalej istnieć same Pokoje, po zbombardowaniu domu.
Agregacja: Projekt i Programiści. Projekt ma Programistów. Projekt padł/zakończył się sukcesem - koniec projektu. Programiści sobie żyją i pracują dalej (samodzielnie albo w innym Projekcie)

Pomyśl, co z FK gdy masz 1 do wiele i co z FK gdy masz wiele do wiele z trzecią tabelą "w środku".

Inny przypadek
Mężczyzna i Kobieta - niezależni, każdy ma swoje PK i tylko kobieta ma FK, które jest domyślnie NULL
Zawierają związek małżeński. Kobieta zmienia FK z null na PK Męża.
Czy Kobieta może się rozwieść i znowu ustawić FK na NULL? OK, może.
(1 do 1 zdefiniowane przez PK-FK)

W zależności od tego co modelujemy (Matka-Dziecko czy Mąż-Żona) decydujemy, czy FK po jednej ze stron może być null czy nie może. I dopiero wtedy ma sens rozważanie jak ustawić FK na null.

2

A dlaczego nie możesz zmodyfikować? Masz jakiś błąd. Jak robisz z SSMS to narzędzie robi tak, że najpierw usuwa tabelkę, a potem ja zakłada na nowo. To może nie przejść przez jakieś powiązania. Ale alter powinien przejść bez porobelemów - w drugą stronę może być problem, jak masz nulle w tabelce.

ALTER TABLE
  myworkers
ALTER COLUMN
  department
    int NULL;

Powinno zadziałać, ale nie testowałem.

6

Jedyny błąd jaki mi przychodzi do głowy w ssms to brak odznaczenia opcji:

screenshot-20210224144445.png

Ale alter będzie szybszy, bo designer "lubi" tworzyć tabele na nowo co wydajnosciowo może boleć

0

Odznaczyłem opcje i faktycznie działa.
@Edit
No to jeszcze jak to re-creatuje wszystko, to mam pytanie czy przy większych bazach danych też tak się robi?

0

No to jeszcze jak to re-creatuje wszystko, to mam pytanie czy przy większych bazach danych też tak się robi?

Tak, dlatego warto nauczyć się DDL-a

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