Probaj da definises uslove integriteta, ali logicno, pusti teoriju. Evo pretpostavki:
1) Dete je osoba.
2) Dete ima dva roditelja, koji su takodje osobe.
3) Majka je roditelj zenskog pola.
4) Otac je roditelj muskog pola.
5) Roditelji moraju biti stariji od deteta.
6) Roditelji moraju biti uneseni u tabelu, pre nego sto se dodele detetu
Ovi uslovi u praksi ne bi prosli, ali su za seminarski sasvim dovoljni.
CREATE TABLE Osobe (ID int, Pol varchar(1), Majka int, Otac int, DatumRodjejna DateTime)
Potrebni CONSTRAINTS:
ID = PRIMARY KEY, nema razloga da to ne bude maticni broj, ali nema veze, neka je samo UNIQUE a potrebe zadatka
FK_Majka: moze biti bilo koji ID koji postoji u tabeli i da je zenskog pola i da je ID(majka) > ID(Osoba)
FK_Otac: moze biti bilo koji ID koji vec postoji u tabeli i da je muskog pola i da je ID(Otac) > ID (osoba)
U oba slucaja imas self-referencing, ali po dve kolone - ID i Pol. Pokusaj sam da napravis FK, pokazi nam dkle si stigao, pa cemo pomagati ako bas zapne.
U praksi, dete bi moglo da ima dva, jednog ili ni jednog roditelja (podaci nepoznati, beba nadjena u korpi ispred opstinskih vrata i slicno). Takodje, nije dovoljno reci da roditelji budu stariji od deteta. Mora postojati neka razumna bioloska razlika u godinama, recimo 12 godina ili nesto slicno (ovo se jako tesko odredjuje i u praksi)
Dalje, JMBG je sasvim dobar PK. To je uvedeno pre 40 godina i valjda do danas svi imaju taj broj i broj mora da je jedinstven. Ako ga svi imaju i jedinstven je - eto ga PK. To sto bi mozda integer bio 'brzi' i uzeo 'manje prostora' ostavi za DB administartora da misli. Ti postavljas logicki model. JMBG sadrzi u sebi i datum rodjenja pa se lako uspostavlja kontrola unosa datuma rodjenja. Lose bi bilo reci 'ako imam JMBG ne treba mi datum rodjenja' jer bi se greskom mogao uneti ispravan JMBG, ali koji pripada nekom drugom, poznatom ili nepoznatom. Postojanje oba podatka, datum rodjenja i JMBG smanjuje verovatnocu greske.