Szczerze nie pamiętam tych studenckich "wymagań" więc napiszę Ci jak ja bym to zbudował jako osoba pracująca z bazami od lat.
Ogólnie nie jest źle jednak w tabeli Nobel.Noblista dodałbym dwa FK jeden do Swiat.Osoba.ID drugi do Swiat.Instytucja.ID. W takim podejściu tabela Nobel.TypNoblisty nie jest potrzebna. Pierwsze podejści z dwoma FK pozwoli Ci na łatwiejsze pisanie selectów (bez potrzeby odwoływania się do dwóch tabel) i pozwoli ci założyć constraint, że jeśli jest już IDInstytucji to nie można wpisać IDOsoby i na odwrót.
Z tym TypemNoblisty nie byłbym taki pewien. Wyobrażam sobie, że za 30lat jakiś Android może wygrać...i ja już będę na to przygotowany ;)
Ok rozumiem, że zamiast LaureatId zrobić 2 FK. Głupie pytanie, ale nie mogę znaleźć, a raczej nie wiem jak sformułować pytanie do google:
- Jak ustawić contraint w takim przypadku, mógłbyś podesłać przykład?
Ewentualnie możesz to rozbić na dwie tabele Nobel.NoblistaOsoba Nobel.NoblistaInstytucja oba podejścia mają kilka minusów i kilka plusów.Dwie tabele mają większy poziom separacji ale trzeba pamiętać, że jak będziesz chciał wyszukać wszystkich noblistów z np 2004 roku to trzeba będzie szukać w dwóch tabelach :)
- w jaki sposób w przypadku 2 tabel Nobel.NoblistaOsoba oraz Nobel.NoblistaInstytucja połaczyć to z Nobel.Nagroda? Rozumiem, że tutaj również usuwamy tabelę Nobel.TypNoblisty.