Pravilno dizajnirana baza podataka pruža vam pristup ažuriranim, tačnim informacijama. Pošto je odgovarajući dizajn od suštinskog značaja za postizanje ciljeva u radu sa bazom podataka, ulaganje vremena u upoznavanje principa dobrog dizajna i te kako ima smisla. Na kraju ćete najverovatnije dobiti bazu podataka koja je u skladu sa vašim potrebama i može lako da se prilagodi promenama.
Ovaj članak pruža uputstva za planiranje baze podataka na radnoj površini. Saznaćete kako da odlučite koje informacije su vam potrebne, kako da podelite informacije u odgovarajuće tabele i kolone i kako se te tabele odnose jedna prema drugoj. Trebalo bi da pročitate ovaj članak pre nego što napravite svoju prvu bazu podataka radne površine.
U ovom članku
Neki termini baze podataka koje treba znati
Pristup organizuje informacije u tabele:liste redova i kolona podsećaju na blok računovođe ili na tabelu. U jednostavnoj bazi podataka možete da imate samo jednu tabelu. Za većinu baza podataka trebaće vam više tabela. Na primer, možete da imate tabelu koja skladišti informacije o proizvodima, drugu tabelu koja skladišti informacije o porudžbinama i još jednu sa informacijama o klijentima.
Svaki red se pravilnije zove zapis, a svaka kolona je polje. Zapis je smislen i dosledan način za kombinovanje informacija o nečemu. Polje je jedna stavka sa informacijama – tip stavke koji se pojavljuje u svakom zapisu. U tabeli „Proizvodi“, na primer, svaki red ili zapis sadržaće informacije o jednom proizvodu. Svaka kolona ili polje sadrže neki tip informacija o tom proizvodu, kao što su ime ili cena.
Šta je dobar dizajn baze podataka?
Određeni principi vode proces dizajniranja baze podataka. Prvi princip je da su duplirane informacije (koje se zovu i suvišni podaci) loše, zato što troše prostor i povećavaju verovatnoću grešaka i neusaglašenosti. Drugi princip je da su ispravnost i dovršenost informacija važne. Ako baza podataka sadrži neispravne informacije, svi izveštaji koji povlače informacije iz baze podataka sadržaće neispravne informacije. Kao rezultat, sve odluke koje donesete, a koje se zasnivaju na tim izveštajima sadržaće pogrešne informacije.
Stoga, dobar dizajn baze podataka je onaj koji:
-
Deli informacije u tabele zasnovane na temi za smanjivanje suvišnih podataka.
-
Pruža programu Access informacije koje zahteva za objedinjavanje informacija u tabelama po potrebi.
-
Pruža podršku i obezbeđuje tačnost i integritet vaših informacija.
-
Prilagođava podatke potrebama obrade i prijavljivanja.
Proces dizajniranja
Proces dizajniranja sastoji se od sledećih koraka:
-
Utvrđivanje svrhe baze podataka
Ovo vam pomaže da se pripremite za preostale korake.
-
Pronalaženje i organizovanje potrebnih informacija
Prikupite sve tipove informacija koje želite da zabeležite u bazi podataka, kao što su ime proizvoda i broj porudžbine.
-
Podela informacija u tabele
Podelite stavke sa informacijama u glavne entitete ili teme, na primer „Proizvodi“ ili „Porudžbine“. Svaka tema onda postaje tabela.
-
Pretvaranje stavki informacija u kolone
Odlučite koje informacije želite da uskladištite u svakoj tabeli. Svaka stavka postaje polje oi prikazuje se kao kolona u tabeli. Na primer, tabela „Zaposleni“ može da uključi polja kao što su „Prezime“ i „Datum zapošljavanja“.
-
Navođenje primarnih ključeva
Odaberite primarni ključ svake tabele. Primarni ključ je kolona koja se koristi za jedinstveno identifikovanje svakog reda. Primer može da bude ID proizvoda ili ID porudžbine.
-
Podešavanje relacija među tabelama
Pogledajte svaku tabelu i odlučite kako se podaci u jednoj tabeli povezuju sa podacima u drugim tabelama. Dodajte polja u tabele ili napravite nove tabele da biste po potrebi objasnili relacije.
-
Poboljšavanje dizajna
Analizirajte dizajn da biste otkrili greške. Napravite tabele i dodajte nekoliko zapisa sa probnim podacima. Pogledajte da li možete da dobijete rezultate koje želite iz tabela. Po potrebi izvršite prilagođavanja u dizajnu.
-
Primena pravila normalizacije
Primenite pravila normalizacije da biste videli da li su vaše tabele pravilno strukturisane. Po potrebi izvršite prilagođavanja u tabelama.
Utvrđivanje svrhe baze podataka
Preporučujemo vam da svrhu baze podataka napišite na papiru – njenu svrhu, kako očekujete da je koristite i ko će je koristiti. Za malu bazu podataka za posao od kuće, možete da napišite nešto poput „Baza podataka klijenata sadrži listu informacija o klijentima u cilju pravljenja pošte i izveštaja“. Ako je baza podatak složenija ili je koristi više osoba, što se često dešava u korporacijama, svrha može da bude pasus ili više i trebalo bi da obuhvata podatke kada i kako će svaka osoba koristiti bazu podataka. Ideja je imati dobro razvijenu izjavu o misiji na koju se može upućivati tokom procesa dizajniranja. Postojanje takve izjave vam pomaže da se fokusirate na ciljeve prilikom donošenja odluka.
Pronalaženje i organizovanje neophodnih informacija
Da biste pronašli i organizovali neophodne informacije, počnite sa postojećim informacijama. Na primer, možete da čuvate porudžbenice u glavnoj knjizi ili da čuvate informacije o klijentima u papirnom obliku u ormarićima za dokumente. Prikupite te dokumente i navedite sve tipove prikazanih informacija (na primer, svako polje koje popunjavate u obrascu). Ako nemate nijedan postojeći obrazac, zamislite da treba da dizajnirate obrazac za snimanje informacija o klijentima. Koje informacije biste stavili u obrazac? Koja polja za popunjavanje biste napravili? Identifikujte i navedite sve ove stavke. Na primer, recimo da trenutno čuvate listu klijenata na indeksnim karticama. Istraživanjem ovih kartica može da pokaže da svaka kartica sadrži ime klijenta, adresu, grad, državu, poštanski broj i broj telefona. Svaka od ovih stavki predstavlja potencijalnu kolonu u tabeli.
Dok pripremate listu, nemojte brinuti o tome da odmah bude savršena. Umesto toga, navedite svaku stavku koja vam padne na pamet. Ako će još neka osoba koristiti bazu podataka, pitajte i nju za ideju. Listu kasnije možete da suzite.
Zatim razmislite o tipovima izveštaja ili porukama koje ćete možda želeti da napravite iz baze podataka. Na primer, možda ćete hteti da izveštaj o prodaji proizvoda prikazuje prodaju po regionu ili izveštaj o rezimeu zaliha koji prikazuje nivoe zaliha proizvoda. Možda žete želeti da napravite pisma obrasce za slanje klijentima koja najavljuju događaj prodaje ili nude premiju. Dizajnirajte izveštaj u svojoj glavi i zamislite kako bi izgledao. Koje informacije biste stavili u izveštaj? Navedite svaku stavku. Uradite isto za pismo obrasca i za sve druge izveštaje u čijem kreiranju učestvujete.
Razmišljanje o izveštajima i porukama koje želite da napravite pomaže vam da identifikujete stavke koje će vam biti potrebne u bazi podataka. Na primer, recimo da date klijentima mogućnost da daju saglasnost (ili je odbiju) za periodična ažuriranja e-pošte i da želite da odštampate spisak onih koji su dali saglasnost. Da biste zabeležili te informacije, dodajte kolonu „Slanje e-pošte“ u tabelu klijenata. Za svakog klijenta možete da postavite polje na „Da“ ili „Ne“.
Zahtev za slanje e-poruka klijentima predlaže beleženje druge stavke. Kada saznate da klijent želi da dobija e-poruke, moraćete da znate adresu e-pošte na koju ćete ih slati. Stoga morate da zabeležite adresu e-pošte za svakog klijenta.
Logično je da napravite prototip svakog izveštaja ili liste izlaza i da razmislite koje stavke će vam biti potrebne za pravljenje izveštaja. Na primer, kada pregledate obrazac pisma, može doći do nekoliko stvari. Ako želite da uključite odgovarajući oslovljavanje – na primer, nisku "Mr.", "Mrs." ili "Ms". koja započinje pozdrav, morate da kreirate stavku oslovljavanja. Takođe, možete da započnete pismo sa "Dragi gospodine Smit", a ne "Dragi. G. Silvester Smit. To predlaže da obično želite da uskladištite prezime odvojeno od imena.
Ključna stvar koju treba da zapamtite jeste da biste trebali da razdvojite informacije na najmanje korisne delove. U slučaju imena, da biste prezime učinili dostupnim, razdvojićete ime na dva dela – ime i prezime. Da biste sortirali izveštaj po prezimenu, na primer, korisno je da prezime klijenta čuvate zasebno. Uopšteno uzevši, ako želite da sortirate, pretražujete, izračunate ili izveštavate na osnovu stavke sa informacijama, trebalo bi da stavite stavku u njeno sopstveno polje.
Razmislite o pitanjima na koja biste želeli da baza podataka da odgovor. Na primer, koliko prodaja reklamiranog proizvoda ste ostvarili prošlog meseca? Gde žive vaši najbolji klijenti ? Ko je dobavljač za najprodavaniji proizvod? Predviđanje ovih pitanja pomoći će vam da zavirite u dodatne stavke za beleženje.
Posle prikupljanja ovih informacija, spremni ste za sledeći korak.
Podela informacija u tabele
Da biste podelili informacije u tabele, odaberite glavne entitete ili stvari. Na primer, posle pronalaženja i organizovanja informacija za bazu podataka prodaje proizvoda, preliminarna lista bi mogla ovako da izgleda:
Glavni entiteti ovde prikazani su proizvodi, dobavljači, klijenti i porudžbine. Stoga ima smisla početi sa ove četiri tabele: jedna je za činjenice o proizvodima, druga za činjenice o dobavljačima, treća za činjenice o klijentima i četvrta za činjenice o porudžbinama. Iako ovo nije kompletna lista, dobra je početna tačka. Možete nastaviti s poboljšanjem liste dok ne dobijete dizajn koji odlično funkcioniše.
Kada prvi put pregledate preliminarnu listu stavki, možda ćete doći u iskušenje da ih sve stavite u jednu tabelu, umesto u četiri prikazane na prethodnoj slici. Ovde ćete saznati zašto je to loša zamisao. Za trenutak pogledajte prikazanu tabelu:
U ovom slučaju, svaki red sadrži informacije o proizvodu i njegovom dobavljaču. Pošto imate mnogo proizvoda od istog dobavljača, informacije o imenu i adresi dobavljača moraju više puta da se ponavljaju. To troši prostor na disku. Snimanje informacije o dobavljaču samo jednom u zasebnoj tabeli „Dobavljači“, a zatim povezivanje te tabele sa tabelom „Proizvodi“ jeste mnogo bolje rešenje.
Drugi problem sa dizajnom nastaje kada morate da izmenite informacije o dobavljaču. Na primer, recimo da morate da promenite adresu dobavljača. Pošto se ona pojavljuje na više mesta, može se slučajno desiti da promenite adresu na jednom mestu, a da zaboravite da promenite na drugim mestima. Čuvanje adrese dobavljača na samo jednom mestu rešava ovaj problem.
Kada dizajnirate bazu podataka, uvek probajte da samo jednom zabeležite svaku činjenicu. Ako primetite da vam se neke informacije ponavljaju na više mesta, na primer adresa za određenog dobavljača, postavite te informacije u zasebnu tabelu.
Na kraju, recimo da vam vinarija „Koja“ dostavlja samo jedan proizvod, i vi želite da izbrišete taj proizvod, ali želite da zadržite ime dobavljača i adresu. Kako ćete izbrisati zapis proizvoda, a da ne izbrišete informacije o dobavljaču? Nije moguće to uraditi. Pošto svaki zapis sadrži činjenice o proizvodu, kao i činjenice o dobavljaču, ne možete izbrisati samo jedno. Da biste ove činjenice držali zasebno, morate da razdvojite jednu tabelu u dve: jedna tabela za informacije o proizvodu, a druga tabela za informacije o dobavljaču. Brisanje zapisa proizvoda briše samo činjenice o proizvodu, ne i činjenice o dobavljaču.
Pošto ste odabrali predmet koji je predstavljen tabelom, kolone u toj tabeli bi trebalo da čuvaju činjenice samo o tom predmetu. Na primer, tabela proizvoda bi trebalo da čuva samo činjenice o proizvodima. Pošto je adresa dobavljača podatak o dobavljaču, a ne o proizvodu, ona pripada tabeli dobavljača.
Pretvaranje stavki informacija u kolone
Da biste odredili kolone u tabeli, odlučite koje informacije treba da pratite o temi snimljenoj u tabeli. Na primer, za tabelu "Klijenti", "Ime", "Adresa", "Grad-država-pošta", "Slanje e-pošte", "Oslovljavanje" i "E-adresa" sačinjuju dobru početnu listu kolona. Svaki zapis u tabeli sadrži isti skup kolona, tako da možete da uskladištite informacije "Ime", "Adresa", "Grad-država-zip", "Slanje e-pošte", "Oslovljavanje" i "E-adresa" za svaki zapis. Na primer, kolona adresa sadrži adrese klijenata. Svaki zapis sadrži podatke o jednom klijentu, a polje za adresu sadrži adresu tog klijenta.
Pošto ste odredili početni skup kolona za svaku tabelu, možete dalje da poboljšavate kolone. Na primer, preporučujemo vam da skladištite ime klijenta u dve zasebne kolone: ime i prezime, tako da možete da sortirate, pretražujete i indeksirate samo te kolone. Slično tome, adresa se zapravo sastoji od pet zasebnih komponenti: adrese, grada, države, poštanskog broja i zemlje/regiona i korisno je skladištiti ih u zasebnim kolonama. Ako želite da izvršite pretragu, recimo da filtrirate ili sortirate po državi, potrebno je da informacije o državi budu u zasebnoj koloni.
Takođe bi trebalo da razmislite da li će baza podata sadržati informacije koje su samo domaćeg porekla ili i međunarodnog. Na primer, ako planirate da skladištite međunarodne adrese, bolje je da imate kolonu „Region“ umesto „Država“ pošto takva kolona može da sadrži i domaće države i regione drugih zemalja/regiona. Isto tako, Poštanski broj ima više smisla od Zip kôd ukoliko planirate da skladištite međunarodne adrese.
Sledeća lista prikazuje nekoliko saveta za utvrđivanje kolona.
-
Nemojte uključivati izračunate podatke
U većini slučajeva, ne bi trebalo da skladištite rezultat izračunavanja u tabelama. Umesto toga, Access može da izvrši izračunavanja kada želite da vidite rezultat. Na primer, recimo da postoji izveštaj „Proizvodi po porudžbini“ koji prikazuje međuvrednost jedinica na porudžbini za svaku kategoriju proizvoda u bazi podataka. Međutim, ni u jednoj tabeli ne postoji kolona međuvrednosti „Jedinice na porudžbini“. Umesto toga, tabela „Proizvodi“ obuhvata kolonu „Jedinice na porudžbini“ koja čuva jedinice za svaki proizvod. Pomoću tih podataka, Access izračunava međuvrednost svaki put kada odštampate izveštaj. Sama međuvrednost neće biti uskladištena u tabeli.
-
Skladištenje informacija u najmanjim logičkim delovima
Možete doći u iskušenje da napravite jedno polje za puna imena ili za nazive proizvoda zajedno sa opisima proizvoda. Ako kombinujete više vrsta informacija u polju, teško je kasnije preuzeti pojedinačne činjenice. Probajte da razdvojite informacije na logičke delove; na primer, napravite zasebna polja za ime i prezime ili za naziv proizvoda, kategoriju i opis.
Pošto ste podesili kolone podataka u svakoj tabeli, spremni ste da odaberete primarni ključ svake tabele.
Navođenje primarnih ključeva
Svaka tabela treba da sadrži kolonu ili skup kolona koji na jedinstven način identifikuje svaki red uskladišten u tabeli. Ovo je često jedinstveni identifikacioni broj, na primer ID broj zaposlenog ili serijski broj. U terminologiji baze podataka ove informacije se nazivaju primarnim ključem tabele. Access koristi polja primarnog ključa za brzo povezivanje podataka iz više tabela i objedinjavanje podataka za vas.
Ako već imate jedinstveni identifikator za tabelu, kao što je broj proizvoda koji na jedinstven način identifikuje svaki proizvod u katalogu, možete da koristite taj identifikator kao primarni ključ tabele – ali samo ako će vrednosti u ovoj koloni uvek biti različite za svaki zapis. Nije moguće imati duplirane vrednosti u primarnom ključu. Na primer, nemojte koristiti imena ljudi kao primarni ključ, zato što imena nisu jedinstvena. Može se lako desiti da imate dve osobe sa istim imenom u istoj tabeli.
Primarni ključ uvek mora da ima vrednost. Ako vrednost kolone u nekom trenutku može da postane nedodeljena ili nepoznata (vrednost koja nedostaje), može se koristiti kao komponenta u primarnom ključu.
Trebalo bi uvek da odaberete primarni ključ čija se vrednost neće menjati. U bazi podataka koja koristi više tabela, primarni ključ tabele može da se koristi kao referenca u drugim tabelama. Ako se primarni ključ promeni, promena se mora primeniti svuda gde je ključ referenciran. Korišćenje primarnog ključa koji se neće menjati smanjuje mogućnost da primarni ključ može da postane nesinhronizovan sa drugim tabelama koje upućuju na njega.
Često se koristi proizvoljni jedinstveni broj kao primarni ključ. Na primer, svakoj porudžbini možete da dodelite jedinstveni broj porudžbine. jedina svrha broja porudžbine jeste da identifikuje porudžbinu. Kada se jednom dodeli, više se nikada ne menja.
Ako ne možete da se setite kolone ili skupa kolona koji bi mogli da budu dobar primarni ključ, razmislite o korišćenju kolone koja ima tip podataka „Automatsko numerisanje“. Kada koristite tip podataka „Automatsko numerisanje“, Access automatski dodeljuje vrednost za vas. Takav identifikator ne sadrži činjenice; on ne sadrži nikakve činjenične informacije koje opisuju red koji predstavlja. Identifikatori bez činjenica su idealni za korišćenje u vidu primarnog ključa zato što se ne menjaju. Primarni ključ koji sadrži činjenice o redu – broj telefona ili ima klijenta na primer – verovatno će se promeniti zato što se činjenične informacije mogu menjati.
1. Kolona postavljena na tip podataka „Automatsko numerisanje“ često kreira dobar primarni ključ. Nijedan dva ID-ja proizvoda nisu ista.
U nekim slučajevima, možda ćete želeti da koristite dva ili više polja, pružajući primarni ključ tabele. Na primer, tabela „Detalji porudžbine“ koja skladišti stavke reda za porudžbine koristiće dve kolone u svom primarnom ključu: ID porudžbine i ID proizvoda. Kada primarni ključ koristi više od jedne kolone, zove se i složeni ključ.
Za baze podatak prodaje proizvoda možete da napravite kolonu „Automatsko numerisanje“ za svaku od tabela koja će služiti kao primarni ključ: ID proizvoda za tabelu „Proizvodi“, „ID porudžbine“ za tabelu „Porudžbine“, ID klijenta za tabelu „Klijenti“ i ID dobavljača za tabelu „Dobavljači“.
Kreiranje relacija među tabelama
Sada kada ste podelili informacije u tabele, potrebno vam je da ponovo objedinite informacija na smislene načine. Na primer, sledeći obrazac sadrži informacije iz nekoliko tabela.
1. Informacije u ovom obrascu potiču iz tabele „Klijenti“…
2. ...tabela „Zaposleni“...
3. …tabela „Porudžbine“…
4. …tabela „Proizvodi“…
5. …i tabela „Detalji porudžbine“.
Access je sistem upravljanja relacionim bazama podataka. U relacionoj bazi podataka, informacije se dele u zasebne tabele zasnovane na temama. Možete po potrebi da objedinite informacije korišćenjem relacija između tabela.
Kreiranje relacije jedan-prema-više
Razmislite o ovom primeru: tabele „Dobavljači“ i „Proizvodi“ u bazi podataka porudžbina proizvoda. Dobavljač može da snabdeva bilo koji brojem proizvoda. Iz toga sledi da za svakog dobavljača predstavljenog u tabeli „Dobavljači“ može da postoji veliki broj proizvoda, predstavljen u tabeli „Proizvodi“. Relacija između tabela „Dobavljači“ i tabele „Proizvodi“ je stoga odnos jedan-prema-više.
Uzmite primarni ključ na strani relacije „jedan“ i dodajte ga kao dodatne kolone u tabelu na strani relacije „više“ kako biste u dizajnu baze podataka predstavili relaciju jedan-prema-više. U ovom slučaju, na primer, dodajete kolonu „ID dobavljača“ iz tabele „Dobavljači“ u tabelu „Proizvodi“. Access zatim može da koristi broj ID-ova dobavljača u tabeli „Proizvodi“ da bi pronašao odgovarajućeg dobavljača za svaki proizvod.
Kolona „ID dobavljača“ u tabeli „Proizvodi“ naziva se sporedni ključ. Sporedni ključ je primarni ključ druge tabele. Kolona „ID dobavljača“ u tabeli „Proizvodi“ je sporedni ključ zato što je takođe i sporedni ključ u tabeli „Dobavljači“.
Vi obezbeđujete osnovu za spajanje srodnih tabela uspostavljanjem parova primarnih i sporednih ključeva. Ako niste sigurni koje tabele bi trebalo da dele zajedničku kolonu, identifikovanje relacije jedan-prema-više osigurava da će dve povezane tabele, zaista, zahtevati deljenu kolonu.
Kreiranje relacije više-prema-više
Razmislite o relaciji između tabela „Proizvodi“ i „Porudžbine“.
Jedna porudžbina može da sadrži više proizvoda. S druge strane, jedan proizvod može da se pojavi u više porudžbina. Prema tome, za svaki zapis u tabeli „Porudžbine“ može da postoji više zapisa u tabeli „Proizvodi“. Osim toga, za svaki zapis u tabeli „Proizvodi“ može da postoji više zapisa u tabeli „Porudžbine“. Ova tip relacije se naziva relacija više-prema-više jer za svaki proizvod može da postoji veći broj porudžbina, a za svaku porudžbinu može da postoji veći broj proizvoda. Imajte u vidu da je važno da razmotrite obe strane relacije kako biste otkrili relacije više-prema-više između tabela.
Teme dve tabele – porudžbina i proizvoda – imaju relaciju više-prema-više. To predstavlja problem. Da biste razumeli problem, zamislite onda šta bi se desilo ako pokušate da kreirate relaciju između dve tabele tako što ćete dodati polje „ID proizvoda“ u tabelu „Porudžbine“. Da biste imali više proizvoda po porudžbini, potrebno vam je više zapisa u tabeli „Porudžbine“ po porudžbini. Ponavljaćate informacije porudžbine za svaki red koji se odnosi na jednu porudžbinu – što će dovesti do neefikasnog dizajna koji može dovesti do netačnih podataka. Možete naići na isti problem ako stavite polje „ID porudžbine“ u tabelu „Proizvodi“ – imaćete više zapisa u tabeli „Proizvodi“ za svaki proizvod. Kako da rešite ovaj problem?
Odgovor je da kreirate treću tabelu, koja se često naziva spojena tabela koja razdvaja relaciju više-prema-više na dve relacije jedan-prema-više. Umetnite primarni ključ iz svake od dve tabele u treću tabelu. Kao rezultat toga, treća tabela zapisuje svako pojavljivanje ili instancu relacije.
Svaki zapis u tabeli „Detalji porudžbine“ predstavlja jednu stavku na porudžbini. Primarni ključ tabele „Detalji porudžbine“ sastoji se od dva polja – sporednih ključeva iz tabele „Proizvodi“ i tabele „Porudžbine“. Korišćenje samo polja „ID porudžbine“ ne funkcioniše kao primarni ključ za ovu tabelu zato što jedna porudžbina može da ima više stavki reda. ID porudžbine se ponavlja za svaku stavku reda u porudžbini, tako da polje ne sadrži jedinstvene vrednosti. Korišćenje samo polja „ID porudžbine“ takođe ne funkcioniše, zato što jedan proizvod može da se pojavi u više porudžbina. Ali zajedno, dva polja koja uvek kreiraju jedinstvenu vrednost za svaki zapis.
U bazi podataka prodaje proizvoda, tabela „Porudžbine“ i tabela „Proizvodi“ nisu međusobno direktno povezane. Umesto toga, povezane su indirektno preko tabele „Detalji porudžbine“. Relacija više-prema-više između porudžbina i proizvoda predstavljena je u bazi podataka pomoću dve relacije jedan-prema-više:
-
Tabele „Porudžbine“ i „Detalji porudžbine“ imaju relaciju jedan-prema-više. Svaka porudžbina može imati više od jedne stavke reda, ali svaka stavka je povezana sa samo jednom porudžbinom.
-
Tabele „Proizvodi“ i „Detalji porudžbine“ imaju relaciju jedan-prema-više. Svaki proizvod može da ima više stavki reda povezanih sa njim, ali svaka stavka reda upućuje na samo jedan proizvod.
Iz tabele „Detalji porudžbine“ možete da odredite sve proizvode na određenoj porudžbini. Takođe možete da odredite sve porudžbine za određeni proizvod.
Posle ubacivanja tabele „Detalji porudžbine“, lista tabela i polja bi mogla da izgleda otprilike ovako:
Kreiranje relacije jedan-prema-jedan
Drugi tip relacije jeste relacija jedan-prema-jedan. Na primer, pretpostavimo da treba da snimite neke specijalne dopunske informacije o proizvodu koje će vam retko zatrebati ili koje se primenjuju samo na nekoliko proizvoda. Pošto vam te informacije nisu često potrebne i pošto skladištenje informacija u tabeli „Proizvodi“ može dovesti do praznog prostora za svaki proizvod na koji se ne odnosi, postavite ih u zasebnu tabelu. Kao i tabelu „Proizvodi“, koristite ID proizvoda kao primarni ključ. Relacija između ove dodatne tabele i tabele „Proizvod“ je relacija jedan-prema-jedan. Za svaki zapis u tabeli „Proizvod“ postoji jedan podudaran zapis u dodatnoj tabeli. Kada identifikujete takvu relaciju, obe tabele moraju da dele zajedničko polje.
Kada otkrijete potrebu za relaciju jedan-prema-jedan u bazi podataka, razmislite o tome da li možete da objedinite informacije iz dve tabele u jednu tabelu. Ako to ne želite da uradite iz nekog razloga, možda zato što bi to izazvalo mnogo praznog prostora, sledeća lista prikazuje kako bi trebalo da predstavite relaciju u dizajnu:
-
Ako dve tabele imaju istu temu, verovatno možete da podesite relaciju pomoću istog primarnog ključa u obe tabele.
-
Ako dve tabele imaju različite teme sa različitim primarnim ključevima, odaberite jednu od tabela (bilo koju od njih) i umetnite njen primarni ključ u drugu tabelu kao sporedni ključ.
Utvrđivanje relacija između tabela pomaže da se uverite da imate odgovarajuće tabele i kolone. Kada postoji relacija jedan-prema-jedan ili jedan-prema-više, uključene tabele treba da dele zajedničku kolonu ili kolone. Kada postoji više-prema-više relacija, treća tabela je potrebna da biste predstavili relaciju.
Poboljšavanje dizajna
Kada imate potrebne tabele, polja i relacije, trebalo bi da napravite i popunite tabele sa uzorkom podataka i pokušate da radite sa informacijama: kreiranje upita, dodavanje novih zapisa i tako dalje. Na taj način ćete istaći potencijalne probleme – na primer, možda ćete morati da dodate kolonu koju ste zaboravili da umetnete tokom faze dizajniranja ili možda imate tabelu koja bi trebalo da razdelite u dve tabele da biste uklonili dupliranje.
Pogledajte da li možete da koristite bazu podataka za dobijanje odgovora koje želite. Kreirajte okvirne radne verzije obrazaca i izveštaja i vidite da li prikazuju očekivane podatke. Potražite nepotrebno dupliranje podataka, i kada ga pronađete, izmenite dizajn da biste ga eliminisali.
Pošto isprobate početnu bazu podataka, verovatno ćete otkriti prostor za poboljšanje. Evo nekoliko stvari koje možete da proverite:
-
Da li ste zaboravili neke kolone? Ako jeste, da li informacije pripadaju postojećim tabelama? Ako su te informacije o nečemu drugom, možda ćete morati da kreirate drugu tabelu. Napravite kolonu za svaku stavku informacija koju treba da pratite. Ako informacije iz drugih kolona nije moguće izračunati, verovatno će vam trebati nova kolona za njih.
-
Da li su neke kolone nepotrebne zato što mogu da se izračunaju iz postojećih polja? Ako stavka informacija može da se izračuna iz drugih postojećih kolona – na primer, cena sa popustom izračunata iz maloprodajne cene – obično je bolje da uradite baš to i izbegavajte pravljenje nove kolone.
-
Da li iznova unosite duplirane podatke u jednu od tabela? Ako je tako, verovatno je potrebno da podelite tabelu na dve tabele koje imaju relaciju jedan-prema-više.
-
Da li imate tabele sa mnogo polja, ograničen broj zapisa i mnogo praznih polja u pojedinačnim zapisima? Ako je tako, razmislite o ponovnom dizajniranju tabele tako da sadrži manje polja, a više zapisa.
-
Da li su sve stavke informacija razdvojene na najmanje korisne delove? Ako vam je određena stavka informacija potrebna za izveštavanje, sortiranje, pretraživanje ili izračunavanje, stavite tu stavku u sopstvenu kolonu.
-
Da li svaka kolona sadrži činjenicu o temi tabele? Ako kolona ne sadrži informacije o temi tabele, pripada drugoj tabeli.
-
Da li su sve relacije između tabela predstavljane, bilo zajedničkim poljima ili trećom tabelom? Relacije jedan-prema-jedan i jedan-prema-više zahtevaju zajedničke kolone. Relacije više-prema-više zahtevaju treću tabelu.
Poboljšavanje tabele „Proizvodi“
Pretpostavimo da svaki proizvod u bazi podataka prodaje proizvoda spada pod opštu kategoriju, kao što su pića, začini ili plodovi mora. Tabela „Proizvodi“ može da sadrži polje koje prikazuje kategoriju svakog proizvoda.
Pretpostavimo da posle ispitivanja i poboljšavanja dizajna baze podataka odlučite da uskladištite opis kategorije zajedno sa njenim imenom. Ako dodate polje „Opis kategorije“ u tabelu „Proizvodi“, morate da ponovite opis kategorije za svaki proizvod koji se nalazi u okviru kategorije – to nije dobro rešenje.
Bolje rešenje je da pretvorite „Kategorije“ u novu temu za bazu podataka za praćenje, sa sopstvenom tabelom i sopstvenim primarnim ključem. Zatim možete da dodate primarni ključ iz tabele „Kategorije“ u tabelu „Proizvodi“ kao sporedni ključ.
tabele „Kategorije“ i „Proizvodi“ imaju relaciju jedan-prema-jedan: kategorija može da sadrži više proizvoda, ali proizvod može da pripada samo jednoj kategoriji.
Kada pregledate strukture tabela, obratite pažnju na grupe koje se ponavljaju. Na primer, razmotrite tabelu koja sadrži sledeće kolone:
-
ID proizvoda
-
Ime
-
ID1 proizvoda
-
Ime1
-
ID2 proizvoda
-
Ime2
-
ID3 proizvoda
-
Ime3
Svaki proizvod je ponavljajuća grupa kolona koja se razlikuje od drugih samo po dodavanju broja na kraj imena kolone. Kada vidite ovako numerisane kolone, trebalo bi da ponovo razmotrite dizajn.
Takav dizajn ima nekoliko mana. Za početak, to nameće da postavite gornju granicu na broj proizvoda. Čim premašite ograničenje, morate da dodate novu grupu kolona u strukturu tabele, što predstavlja glavni administrativni zadatak.
Drugi problem je da će ti dobavljači koji imaju manje od maksimalnog broja proizvoda izgubiti malo prostora, pošto će dodatne kolone biti prazne. Najozbiljniji nedostatak takvog dizajna je da otežava izvršavanje mnogih zadataka, na primer sortiranje ili indeksiranje tabele po ID-u proizvoda ili po imenu.
Kad god vidite ponavljajuće grupe, detaljnije pregledajte dizajn imajući u vidu razdvajanje tabele na dve. U gorenavedenom primeru je bolje koristiti dve tabele, jednu za dobavljače i drugu za proizvode, povezane po ID-u dobavljača.
Primena pravila normalizacije
Možete primeniti pravila normalizovanja podataka (ponekad se prosto nazivaju pravila normalizacije) kao sledeći korak u dizajnu. Možete da koristite ova pravila da biste videli da li su vaše tabele pravilno strukturisane. Proces primene pravila na dizajn baze podataka zove se normalizacije baze podataka ili samo normalizacija.
Normalizacija je najkorisnija pošto predstavite sve stavke informacija i stignete do preliminarnog dizajna. Ideja je da se uverite da ste podelili stavke informacija u odgovarajuće tabele. Ono što normalizacija ne može da uradi jeste da obezbedi da imate sve ispravne stavke podataka sa kojima će početi da radite.
Možete primeniti pravila redom, obezbeđujući da u svakom koraku dizajn postaje ono što zovemo „normalnim obrascima“. Pet normalnih obrazaca su široko prihvaćeni – od prvog do petog normalnog obrasca. Ovaj članak sadrži objašnjenja o prva tri, zato što predstavljaju sve što je potrebno za većinu dizajniranja baza podataka.
Prvi normalni obrazac
Prvi normalni obrazac navodi da u preseku svakog reda i kolone u tabeli postoji jedna vrednost, a nikada lista vrednosti. Na primer, ne možete da imate polje pod imenom „Cena“ u koje ćete staviti više od jedne cene. Ako svaki presek redova i kolona posmatrate kao ćeliju, svaka ćelija može da sadrži samo jednu vrednost.
Drugi normalni obrazac
Drugi normalni obrazac zahteva da svaka kolona bez ključa bude potpuno zavisna od celog primarnog ključa, a ne samo od dela ključa. Ovo pravilo se primenjuje kada imate primarni ključ koji se sastoji od više od jedne kolone. Na primer, pretpostavimo da imate tabelu koja sadrži sledeće kolone, gde „ID porudžbine“ i „ID proizvoda“ obrazuju primarni ključ:
-
ID porudžbine (primarni ključ)
-
ID proizvoda (primarni ključ)
-
Ime proizvoda
Ovaj dizajn krši drugi normalni obrazac, zato što „Ime proizvoda“ zavisi od ID-a proizvoda, ali ne od ID-a porudžbine, tako da ne zavisi od celog primarnog ključa. Morate da uklonite „Ime proizvoda“ iz tabele. Ono pripada drugoj tabeli (proizvodi).
Treći normalni obrazac
Treći normalan obrazac zahteva da ne zavisi svaka kolona bez ključa od celog primarnog ključa, već da kolone bez ključa budu nezavisne međusobno.
Drugačije rečeno, svaka kolona bez ključa mora da zavisi od primarnog ključa i isključivo od njega. Na primer, recimo da imate tabelu koja sadrži sledeće kolone:
-
ID proizvoda (primarni ključ)
-
Ime
-
PMC
-
Popust
Pretpostavimo da popust zavisi od predložene maloprodajne cene (PMC). Ova tabela krši treći normalni obrazac zato što kolona bez ključa „Popust“ zavisi od druge kolone bez ključa „PMC“. Nezavisnost kolone podrazumeva dabi trebalo da promenite bilo koju kolonu bez ključa bez uticaja na druge kolone. Ako promenite vrednost u polju „PMC“, popust će se promeniti shodno tome i tako prekršiti to pravilo. U ovom slučaju „Popust“ treba premestiti u drugu tabelu koja je ključ za PMC.