Odštampajte tekst Odštampajte tekst

Priprema za test: Skica modela

fudbal_skica.jpgPrvi deo zadatka je da razumete i modelujete problem iz realnog života. Na osnovu zahteva koje budući korisnik vaše baze stavlja pred vas treba da odredite koliko tabela je potrebno da napravite, koja obeležja idu u koju tabelu, i kakve veze između tabela postoje. Bitan deo zadatka je da otkrijete kog tipa je koje obeležje.
Situacija bi mogla da glasi ovako:

Angažovao vas je Fudbalski Savez Nedođije da im izradite bazu podataka. Za svakog igrača potrebno je evidentirati ime i prezime, datum rođenja, klub za koji igra, kratku biografiju, da li je igrač stranac ili nije, broj žutih i broj crvenih kartona u dosadašnjem toku prvenstva, prosečnu ocenu i poziciju u timu (jedna od navedenih: golman, odbrana, sredina, napad). Za svaki klub evidentiramo naziv, mesto i ligu u kojoj igra. Svaka liga ima svoj naziv i maksimalan broj klubova koji može biti u toj ligi.

Iako u zadatku nisu opisani odnosi koji važe u ovoj situaciji, sasvim je prirodno da jedan igrač ne može istovremeno da igra u dva kluba. Recimo da i da jedan klub ne može istovremeno da igra u dve lige u zemlji. Jasno je i da u jednom klubu ima više igrača kao što i u jednoj ligi ima više klubova.
 

SAVET: Prvo napravite skicu modela na papiru. 

fudbal_skica.jpg

Evo objašnjenja:Najpre odredite koliko je tabela potrebno tj. uočite koji od entiteta koji se pominju u zadatku imaju neke osobine. Igrači imaju neke osobine, klubovi imaju osobine, lige imaju osobine. To bi značilo da nam trebaju 3 tabele: Igrači, Klubovi i Lige. (Obratite pažnju da je naziv tabele gotovo uvek u množini: nije Igrač nego Igrači, nije Liga nego Lige. To je zato što tabela predstavlja skup entiteta, više njih… a jedan entitet je jedan red tabele)

Napomena: Ne bi bila uopšte greška da kreirate i četvrtu tabelu Pozicije, u kojoj bi bile zabeležene sve pozicije u timu.

Zatim zabeležite sve pobrojane osobine.  Koje su osobine igrača, koje su osobine klubova itd…
Neke od njih bi možda i bili dobri kandidati za prirodni primarni ključ, ali rekli smo da sigurno nećemo pogrešiti ako napravimo veštački primarni ključ. Dakle, ovde nema dilema: za svaku tabelu zapišite i primarne ključeve npr. IgracID, KlubID, LigaID.

Sada uočite veze između tabela:
Jedno od obeležja svakog igrača je klub za koji igra. Taj klub je jedan od klubova koji su uneti u tabelu Klubovi. I eto veze: obeležje klub iz tabele Igraci spojite linijom sa primarnim klučem iz tabele Klubovi (klubID).
Isto tako: Jedno od obeležja kluba je liga u kojoj igra. Sve lige će se nalaziti u tabeli Lige. Pokažite to linijom.

Pre nego što se vratimo Access-u, ostaje još da odlučimo kog tipa je svako od obeležja koje smo zapisali. Spisak svih tipova već imate u svesci, sada samo mudro odaberite:

Oko primarnih ključeva nema dileme, to je AutoNumber.
Datum rođenja i svi drugi datumi su tipa Data/Time.
Za obeležja koja su strani ključevi, kao klub ili liga, koristimo LookUp Wizard.
Biografija
, i slična obeležja koja podrazumevaju puno teksta su tipa Memo.

Obratite sad pažnju. Kako zabeležiti da li je igrač stranac ili nije? Većina učenika će pomisliti da je u pitanju tekstualni podatak. To nije nemoguće rešenje, ali je loše. Ako mi ostavimo korisniku prostor da upiše reči “stranac” i “nije stranac” ili tako nešto, može se desiti da korisnik, u najmanju ruku, pogreši pri unosu. Ili da umesto “nije stranac” upiše “nije” ili da napiše “domaći”. Svašta se može desiti kada damo korisniku suviše slobode, što bi lupali glavu oko toga? Mnogi se učenici onda dosete da ponude korisniku da izabere sa spiska jedan od dva odgovora, uz pomoć LookUp Wizarda. Nije loše. Ali ako imamo samo dva ponuđena odgovora, idealan tip za to je Yes/No.
Ovaj tip primetnite kada treba izabrati da li je knjiga u biblioteci izdata ili je slobodna; da li je autobus parkiran ili nije; da li je plaćena članarina ili nije. Kad god su samo dve opcije u opticaju, opredelite se za Yes/No. Takva odluka će vam se isplatiti kada budete obrađivali podatke.

Broj zutih kartona, ocena, maksimalan broj klubova u ligi… To su sve brojčani podaci, dakle tipa Number.  Ali ovde treba donete još jednu odluku. Koji Number?
Igrač ne može imati -3 kartona, ili 3,24 kartona, niti će imati više od 255 kartona. Dakle, ovde se radi o celim, pozitivnim, malim brojevima. Za to je idealan tip Byte.
Prosečna ocena bi međutim mogla biti decimalan broj. Ne baš veliki, i ne na puno decimala. Ovde će dobro da pasuje Single.
Evo još par primera:
Broj stranica neke knjige bi mogao da bude Integer, ceo broj ali ne baš mali. Broj stanovnika opštine, ili broj posetilaca stadiona je baš veliki broj, i tu bi nam trebao Long Integer.

Obeležja kao što su imena, nazivi, opisi, mesta, adrese, pa i brojevi telefona, su tipa Text.

Kod obeležja pozicija korisnik treba da odabere jednu od ponuđenih pozicija. Za to ćemo koristiti LookUp Wizard i to onu varijantu gde sami ukucavamo opcije.
(Ako hoćemo fleksibilnije rešenje, takvo da recimo korisnik sam može da unosi nove pozicije u timu, onda bi nam trebala nova tabela Pozicije. I još jedna veza. Ali da ne komplikujemo dalje.)

Kada imate skicu modela, veoma je lako napraviti tabele u Access-u.
Provežbajte i slobodno pitajte sve što vam nije jasno.
I meni će biti lakše da odgovaram na pitanja, nego da vodim monolog.

Uskoro ću opisati još neke situacije, i prikazati skice modela.
 
 
 
 


3 komentara na “Priprema za test: Skica modela”

  1. Profesore, pa vi ste CAR!!! Priznajem da mi je u pocetku zvucalo kao smor ideja ovaj sajt, - ovo je prvi put da ga posecujem i mislim da je malo reci da sam ODUSEVLJENA!!!:) A i ova fora sa postavljanjem primera za testove mi se mnogo svidja!!!! Dobicu 5 u cetvrtak…………yuupppiiiiiiiii!!!:):):)
    Svaka cast, samo nastavite tako!!! POZZZZ

  2. Pa super ste ovo razradili mada molio bih malu pomoc.Treba da napravim bazu u accessu za ispitni projekat.Tema mi je Futbalski Klub.Sve mi je ok jasno,osim cinjenice kako da napravim na kojem je mestu klub u ligi.Pozdrav

  3. Cao Zlatko,
    koliko je ozbiljan taj ispitni projekat?
    Ako ti treba najnajprimitivnije resenje onda ces samo ovaj model prosiriti tako sto ces u tabelu Klubovi dodati novo polje npr. Plasman. To polje je tipa Number i to Byte.

    Malo bolje bi bilo da umesto plasmana uvedes polje Broj poena, i onda da napravis jedan prost upit koji bi prikazao klubove sortirane po broju poena i to Descending, tako da najbolji bude na vrhu tabele.

    Ako ti treba jos bolje resenje, onda umesto plasmana uvedi polja broj pobeda, broj poraza, broj remija (svi su tipa Number-Byte), a plasman klubova i broj poena se racuna na osnovu tih podataka u jednom upitu. Taj upit bi imao ovakvo polje:
    Broj bodova: [broj pobeda]*3+[broj remija]*1
    (Ukoliko pobeda nosi 3 boda, a nereseno jedan bod).
    Onda bi taj upit kao i prosli sortirao po broju bodova.

    Najbolje bi, medjutim, bilo da imas evidenciju o svim odigranim utakmicama. To znaci da ti treba nova tabela koja bi izmedju ostalog trebala da ima i polja domacin i gost, kao i polja: golovi domacin i golovi gost. Pa bi se onda malo slozenijim upitima doslo do toga koliko koji klub ima pobeda, remija i poraza, tj. koliko ima poena.

    Vodi racuna da je ovaj model malo uproscen ogranicenjem da jedan klub igra samo u jednoj ligi, a u praksi isti klub igra u vise liga. To znaci da je odnos tabela Klubovi i Lige odnos Vise prema Vise, a za taj odnos treba nova tabela.

    Eto, to su neke smernice, a na konkretnije pitanje vrlo rado cu konkretnije odgovoriti.

    Jos nesto: mozes li da kazes o kojoj skoli/fakultetu se radi, koja godina i iz kog predmeta je ispitni projekat?

    Svoje ucenike nagradicu plusicem za svaki dobar predlog ili ideju u vezi sa ovim projektom.

Napišite komentar:

Ukoliko prvi put komentarišete, komentar mora biti odobren pre nego što bude objavljen.