Šta je primarni ključ u bazi podataka

Šta je primarni ključ u bazi podataka

Primarni ključ je minimalan skup atributa koji je jedinstven za svaki zapis u bazi podataka.

Prirodni i surogat ključevi

Jedinstveni matični broj građana je prirodni ključ i verovatno jedini zapis koji sigurno pripada samo nama kao pojedincima. Broj lične karte se menja, adresa stanovanja takođe. Nije česta situacija, ali sasvim je legitimno da neko promeni i svoje ime. Datum i mesto rođenja takođe u teoriji nisu jedinstveni: da li je moguće da se u Beogradu u istom danu rode dva deteta po imenu Miloš Marković? Ne samo da je moguće, nego je i realno. Zato se uvodi JMBG kao skup od 13 cifara koji će nedvosmisleno ukazivati na pojedinca, bez obzira i ako se on zove John Smith i rođen je u New York-u. Osim JMBG-a, u prirodne ključeve spadaju i brojevi (oznake) ličnih dokumenata (lična karta, pasoš, index, zdravstvena i radna knjižica…).

Sa druge strane, postoje i alternativni, tzv. surogat ključevi. Surogat ključ najlakše se može opisati kao uvođenje kolone u tabeli za oznakom ID, čija vrednost je 1, i uvećava se kako se novi zapisi unose u tabelu. Stručnjaci za oblasti projektovanja BP imaju različita mišljenja o ovoj problematici.

JMBG KAO PRIMARNI KLJUČ

JMBG IME PREZIME POL
2111987640042 Miloš Matić m OK
0403957890024 Petar Mišić m OK
1302991880052 Milica Petrović z OK
2111987640042 GREŠKA

 

AUTO-INKREMENTALNI ID KAO PRIMARNI KLJUČ

ID IME PREZIME POL JMBG
1 Miloš Matić m 2111987640042 OK
2 Petar Mišić m 0403957890024 OK
3 Milica Petrović z 1302991880052 OK
4 Miloš Matić m 2111987640042 OK

 

Na ovom primeru vidi se da će baza dozvoliti unos dva zapisa sa istim JMBG-om u drugom slučaju.

Naravno, polazna osnova je rezultat koji nam je potreban. Ako realan sistem dozvoljava ponavljanje pojava, onda možemo napraviti situaciju kao u drugoj tabeli.

Primer za prvu tabelu bio bi evidencija studenata u jednoj nastavnoj grupi. Normalno je da tu nećemo dozvoliti dva zapisa u bazi koji se odnose na istog studenta.

Primer za drugu tabelu mogao bi biti evidencija izlaska na ispit. Tada je normalno da dozvolimo jednom studentu da više puta izađe na ispit. Osim ovih podataka, verovatno ćemo želeti da ispratimo i datum izlaska, predmet koji je polagao, koju je ocenu dobio i slično.

Međutim, nije nužno projektovati tabelu u bazi tako da ako želimo više ponavljanja, bez razmišljanja stavimo auto-inkrementalni ID za primarni ključ.

Pogledajte ovaj primer:

JMBG

DATUM

IME

PREZIME

POL

2111987640042

01.06.2011.

Miloš

Matić

m

OK

0403957890024

02.06.2011.

Petar

Mišić

m

OK

1302991880052

01.06.2011.

Milica

Petrović

z

OK

2111987640042

02.07.2011.

Miloš

Matić

m

OK

2111987640042

02.07.2011.

GREŠKA

 

Definicija kaže da je primarni ključ skup atributa, i to minimalan  (namerno sam naveo ovim redosledom),  potreban za nedvosmisleno određivanje jedne „torke“ (čitaj: reda u tabeli). Ako za primarni ključ stavimo kolone JMBG+DATUM, opisana manifestacija iz tabele 3 biće korektna.

Pod pojmom „minimalan“ podrazumeva se da nam za primarni ključ trebaju samo JMBG+DATUM. Ako bi u taj skup ubacili i npr. IME, onda bi baza dozvolila unos dva zapisa sa istim matičnim brojem i datumom, ali sa drugim imenom. Pošto je u realnosti (teoretski) nemoguća situacija da dve osobe imaju isti JMBG i različita imena, prim. ključ JMBG+DATUM+IME je loše projektantsko rešenje.

U tabeli 3 prikazan je tipičan primer evidencije neke pojave koja se ponavlja (izlazak na ispit, dolazak na sastanak i slično). Dakle, baza će dozvoliti dva ista JMBG-a ako su datumi različiti, i naravno dva ista datuma ako su JMBG-ovi različiti.

Ipak, moje skromno mišljenje je da je ovo dobro rešenje:

ID:

DATUM

IME

PREZIME

POL

JMBG

1

01.06.2011.

Miloš

Matić

m

2111987640042

OK
2

02.06.2011.

Petar

Mišić

m

0403957890024

OK
3

01.06.2011.

Milica

Petrović

z

1302991880052

OK
4

02.07.2011.

Miloš

Matić

z

2111987640042

GREŠKA

Greška bi nastala u slučaju označavanja JMBG-a kao primarnog ključa. Ako je ključ samo ID, četvrti zapis će proći, ali…

ID je primarni ključ, a kolona JMBG se može izostaviti. U situaciji kada imate dosta zapisa u bazi, a bitno vam je da znate da li se Miloš Matić iz našeg primera ranije pojavljivao u bazi, onda svakako nećete izostaviti JMBG. Primeri za to su:

  • izlazak na ispit (želite da znate koliko puta je neko izašao jer se posle trećeg puta prijave dodatno naplaćuju);
  • evidencija u video-klubu (da li je Miloš ostao dužan neke diskove od ranije, pa se posle dve godine registrovao kao novi član);
  • lista za stipendije (student može promeniti fakultet, samim tim i broj indeksa, pa ako ne pratite i JMBG nećete shvatiti da se radi o istoj osobi, a to je često bitno za donošenje odluke o stipendiranju);

Međutim, ako vodite evidenciju prodaje bureka u pekari i ne nameravate da benificirate lojalne kupce, svakako da vam JMBG ne treba i samo bi usporio poslovanje firme (zamislite da prodavac svakom kupcu traži JMBG dok ostali stoje u redu i čekaju).

Dakle, u našem primeru JMBG može biti prisutan i označen kao jedinstven ključ (sa aspekta ove teme to je skoro isto). Ukoliko pokušamo unos dva ista JMBG-a, baza će to odbiti i mi ćemo znati da je Miloš ranije upisan u bazu. Osim zabrane, možemo dozvoliti unos dva ista JMBG-a (naravno sa različitim ID), ali da nas baza upozori da taj zapis već postoji.

JMBG je, prema mom mišljenju, u bazama bitan podatak, ali samo u pojedinim situacijama. Ne treba ga izostavljati zbog razloga koje sam naveo i obrazložio, ali mesto primarnog ključa bolje je dodeliti surogat (alternativnom) ključu.

 

1 komentar

  • MisterEgo says:

    Hvala, lepo objasnjeno nekome koga interesuje, a ne radi sa bazama podataka cesto (skoro uopste).


Ostavite komentar

Switch to our mobile site