Podaci za svakoga

Tabele - normalizacija

vikson | 06 Februar, 2012 21:29

Običnim riječima jedna kupovina se može opisati ovako: Jutros sam bio/la u onom PKB ispod moje zgrade. Kupio/la sam 1 veknu hljeba, malo salame, 1 paklicu cigareta i 10 jaja. Sve me je koštalo oko 500 dinara, pa sam platio/la kešom. Radi neka nova prodavačica.

Podaci o kupovini su u bazi upisani precizno i bez ličnih utisaka. Šta to znači? Namjesto jutros upisan je tačan datum i vrijeme kupovine, namjesto malo salame, upisana je tačna količina, namjesto oko 500 dinara omogućen je izračun iznosa kupovine,..

Vratimo se na primjere iz predhodnog bloga. Podatke o kupovini smo opisali pomoću sledećih tabela:

  • Zaposlena osoba

  • Artikal/Usluga

  • Organizacijska jedinica

  • Način plaćanja

  • Račun

  • Element računa

Normalan čovjek će sada reći, e opet ti "programeri", samo nešto komplikuju. Zar to ne može sve da se čuva u tamo nekoj tabeli, a ne da moram da gledam u njih 7 da bi došao do informacije o nekoj kupovini. Baš zato da bi ti podaci bili tačni i jednoznačni je najbolje da su čuvani u tabele, koje opisuju prirodne objekte, a ne na jednu gomilu bez glave i repa.

Sledeći redovi će opisati kako iz te gomile neuredjenih podataka dolazimo do uredjenih tabela koje su medjusobno povezane.

Postupak uredjivanja podataka se zove normalizacija.

Normalizacija ima za cilj eliminisanje nepotrbnog ponavljanja podataka (redudantnost) i osiguravanje da su zavisnosti izmedju podataka logične. U praksi se koristi 6 normalnih formi, od čega su prve tri najčešće zastupljene:

  • Prva normalna forma

  • Druga normalna forma

  • Treća normalna forma

  • Boyce-Codova normalna forma

  • Četvrta normalna forma

  • Peta normalna forma

U ovom gradivu ćemo se ograničiti na postupke normalizacije od prve do treće normalne forme.

1NF - prva normalna forma

Podaci v nenormalizovanoj formi.

Šif.Rač Šif.Org.Jed Org.Jed Šif.Prod Prod Šif.NP NP RB Šif.art/usl Art/Usl JM Kol OS.Cjena Proc.Poreza
1 2A Trgovina - Stari Beograd 1 Petar K Keš 1 D001 Salama kg 0,15 123,8 8,5
              2 P002 Mlijeko - PKB l 2 80 8,5
              3 P123 Rakija - CGK l 1 1002 20
2 2A Trgovina - Stari Beograd 1 Petar G Gotovina 1 H023 Sapun - Palmolive - ruža kom 1 55 20
              2 H045 Omekšivač - Luna kom 2 332 20
              3 P002 Mlijeko - PKB l 3 80 8,5
              4 S346 Sir za mazanje - ABC kom 1 458 8,5
3 1B Trgovina - Zemun 2 Marija G Gotovina 1 L037 Crijevo r.4 m 3,2 552 20
4 1A Trgovina - Novi Beograd 1 Petar K Keš 1 P002 Mlijeko - PKB l 1 80 8,5
              2 D038 Zavjesa m2 1,2 567 20

Intuitivno bi kreirali tabelu koja bi imala kolone: Račun, rb1, rb2, rb3, rb4, art1, art2,art3,art4, .... Odmah se postavlja pitanje, šta ako kupimo više od 4 artikla na jednom računu. Znači nešto nije u redu.

Probajmo ponovo. U drugoj iteraciji bi kreirali tabelu koja bi mogla čuvati podatke o kupovini neograničenog broja artikala: Račun, rb, art. Podaci bi izgledali kao u donjoj tabeli.

Šif.Rač Šif.Org.Jed Org.Jed Šif.Prod Prod Šif.NP NP RB Šif.art/usl Art/Usl JM Kol OS.Cjena Proc.Poreza
1 2A Trgovina - Stari Beograd 1 Petar K Keš 1 D001 Salama kg 0,15 123,8 8,5
1 2A Trgovina - Stari Beograd 1 Petar K Keš 2 P002 Mlijeko - PKB l 2 80 8,5
1 2A Trgovina - Stari Beograd 1 Petar K Keš 3 P123 Rakija - CGK l 1 1002 20
2 2A Trgovina - Stari Beograd 1 Petar G Gotovina 1 H023 Sapun - Palmolive - ruža kom 1 55 20
2 2A Trgovina - Stari Beograd 1 Petar G Gotovina 2 H045 Omekšivač - Luna kom 2 332 20
2 2A Trgovina - Stari Beograd 1 Petar G Gotovina 3 P002 Mlijeko - PKB l 3 80 8,5
2 2A Trgovina - Stari Beograd 1 Petar G Gotovina 4 S346 Sir za mazanje - ABC kom 1 458 8,5
3 1B Trgovina - Zemun 2 Marija G Gotovina 1 L037 Crijevo r.4 m 3,2 552 20
4 1A Trgovina - Novi Beograd 1 Petar K Keš 1 P002 Mlijeko - PKB l 1 80 8,5
4 1A Trgovina - Novi Beograd 1 Petar K Keš 2 D038 Zavjesa m2 1,2 567 20

Pravilo 1NF definiše atomarnost tabele. To znači da u jednom redu tabele ne možemo imati duple podatke. Tabela mora imati primarni ključ (Šif.Rač, RB). Pored toga ne možemo imati duple kolone za isti atribut (rb,Šif.art/usl, Art/Usl, JM, Kol., Os.Cjena, Proc.Poreza).

2 NF - druga normalna forma

Dobili smo uredjenu tabelu podataka. Ali, šta kažete na toliko ponavljanje podataka? Mislite o tome da te podatke neko unosi u tabelu.

U gornjem primjeru je podatke uredjivala "programerka". Šta bi bilo ako bi Prodavac u svakom redu podatke koji se ponavljaju napisao malo drugačije (npr: način plaćanja može se napisati: Keš, kš, novac, dinari...).

I šta sad? Opet gledamo kako eliminisati ponavljanje podataka. To znači da bi trebali identificirati podatke koji se ponavljaju i odrediti za njih podključe (identifikatore). Potom te podatke izdvojiti u novu tabelu. U našem primjeru ih imamo više:

Organizacijske jedinice: Šif.Org.Jed, Org.Jed

Zaposlena osoba: ŠifProd, Prod

Način plaćanja: Šif.NP, NP

Artikal/Usluga: Šif.Art/Usl, Art/Usl

I tako je nastala tabela, koja nema opise za podatke koji se ponavljaju. U "glavnoj tabeli" su nam ostale samo šifre (šif.rač, šif.org.jed, šif.prod, šif.np, šif.art/usl, jm) i podaci o kupovini (količina, os.cijena, proc.poreza).

Šif.Rač Šif.Org.Jed Šif.Prod Šif.NP RB Šif.art/usl JM Kol OS.Cjena Proc.Poreza
1 2A 1 K 1 D001 kg 0,15 123,8 8,5
1 2A 1 K 2 P002 l 2 80 8,5
1 2A 1 K 3 P123 l 1 1002 20
2 2A 1 G 1 H023 kom 1 55 20
2 2A 1 G 2 H045 kom 2 332 20
2 2A 1 G 3 P002 l 3 80 8,5
2 2A 1 G 4 S346 kom 1 458 8,5
3 1B 2 G 1 L037 m 3,2 552 20
4 1A 1 K 1 P002 l 1 80 8,5
4 1A 1 K 2 D038 m2 1,2 567 20

3 NF - treća normalna forma

Sad će se normalni ljudi pitati, i šta bi ti "programeri" još htjeli, kad nam/vam već sada podaci izgledaju nerazumljivi. Ne čini li se da imamo još uvijek nepotrebnog ponavljanja podataka. Sada nam se podaci Šif.Rač, Šif.Org.Jed, Šif.Prod, Šif.NP ponavljaju.

Šta bi bilo ako bi Prodava za svaki račun napisao malo drugačije šifre (npr: za račun br. 1 podaci o načinu plaćanja se mogu unijeti i tako: 1-K, 2-G,3-K) . Ne bi znali da li je račun plaćen kešom ili karticom.

Žašto ne bi i njih izdvojili u posebnu tabelu. I eto nama tabela skoro bez nepotrebno ponavljajućih podataka:

Račun: Šif.Rač, Šif.Org.Jed, Šif.Prod, Šif.NP

Element računa: Šif.Rač., RB, Šif.art/usl, JM, Kol, OS.Cjena, Proc.Poreza

Tako smo dobili naše tabele relacijsko povezane preko svojih Primarnih ključeva i Podključeva.

 

 

Cilj 3NF je da izdvoji kolone koje ne zavise u potpunosti od primernog ključa u drugu tabelu. S tim dobijamo tabele u kojima se podaci skoro ne ponavljaju.

NAPOMENA

Iz gornjih redova ćete zaključiti da nismo skroz do kraja eliminisali ponavljanje podataka (ali skoro da jesmo). Dalja eliminacija bi se mogla uraditi u dijelu koji se odnosi na artikle/usluge u elementu računa. Naime, mogli bi još eliminisati kolone JM i Os.Cijena. Ta vrsta liminacije bi se mogla odraditi pomoću viših nivoa normalizacije tabela, mada se u praksi rijetko srećemo.

Komentari

Dodaj komentar





Zapamti me

 
Powered by blog.rs