Treba da malo preuredis tabele:
Ti imas:
Citat:
Ime_Ucenika (primary key)
Maticni_Broj (Number)
te imam popis predmeta koje ima taj ucenik (Tablica_Predmeti):
Predmeti (Primary key)
Ime_Ucenika
a trebalo bi:
Code:
tablica Ucenici:
Ime_Ucenika
Maticni_Broj (Number, primary key)
Tablica_Predmeti:
Predmeti (Primary key)
Maticni_Broj (primary_key)
i jost ti treba relacija sa tablice Ucenici na tablicu Predmeti "u tablici predmeti ne moze da postoji Maticni_Broj ako ne postoji u tablici Ucenici isti taj maticni broj". Znaci, na strani 1 je Ucenici, na strani vise je Predmeti, vezno polje Maticni_broj, enforce referential integrity.
Zasto ovako?
Ime_Ucenika nije dobar primary key, pre ili kasnije pojavice se dva ucenika sa istim imenom i prezimenom. Maticni broj je jedinstven i ako se pojave dva ucenika sa istim maticnim brojem, onda je sigurno u pitanju greska u kucanju.
Posto smo proglasili MaticniBroj za PK u tabeli Ucenici, prenecemo taj PK u tabelu predmeti. U tabeli Predmeti, PK je kombinacija polja (MaticniBroj, PredmetID). Posto PK mora biti jedinstven, svaki student moze imati svaki predmet najvise jedan put, dva puta ne moze. Znaci, ovo ti ispunjava zahtev koji is postavio na pocetku - da se jedniom uceniku ne dodeli isti predmet dva puta.
Kako garantovati da svaki ucenik ima sve predmete koje treba, da ne feli neki? Na nivou tabela, ne moze se garantovati. U momentu kad uneses novog ucenika on nema ni jeda predmet. Onda mu na neki nacin dodelis sve predmete koji trebaju, jedan po jean, ili ceo paket. To moze da se isprogramira, ili rucno da se dodaju predmeti, koliko treba.
:-)