Prvo bih ponovio Getsbijevu primedbu na imenovanje entiteta. U imenovanju treba biti jednoobrazan, odnosno treba koristiti ili jedninu ili množinu!
Ja predlažem da se za imenovanje entiteta koristi množina jer se tako naglašava da se radi o skupu istovrsnih elemenata, a da tih elemenata može biti više. Naravno postoje i odstupanja od ovog pravila pa je za imenovanje nekih entiteta potrebno upotrebiti jedninu. Primer ovog odstupanja je recimo entitet kojim se modelira Bog. Jasno je da je Bog samo jedan i da se tu neradi o nikakvom skupu uzvišenih bića već o jednom jedinom uzvišenom biću. Tada se za takav entiet uoptrebljava jednina pa bi se entitet zvao 'Bog' i tom jedninom bi bilo naglašeno da je to jednočlani entitet. Naravno, ovde sam mislio na Boga sa velikim B, dok bi se panteon Grčkih, Rimskih, itd bogova modelirao na drugi način.
Dalje bih se osvrnuo na definicije koje prate entitete. Definicija služi da se jasno iskaže šta se modelira konkretnim entitetom. Definicija mora biti jasna, precizna i nesme se pozivati sama na sebe.
Evo i konkretnih primedbi vezanih za imenovanje i definianje entiteta:
1. Neki entiteti nemaju definiciju - Trebalo bi dati definicije za SVE entitete. Ako entitet nemože da se definiše, vrlo je verovatno da se uopšte i neradi o entitetu!
Na priimer:
- Entitet 'Autor' nema definiciju, a trebao bi da je ima.
- Entitet 'BrojUzetihKnjiga' takođe nema definiciju. (Za trenutak zanemarimo da je već rečeno i usaglašeno da ovo nije entitet) Šta je to 'BrojUzetihKnjiga'? Kako ovo definisati? Da probam - Broj uzetih knjiga je ukupan broj knjiga koje je član pozajmio iz biblioteke. Da li ovo zvuči dobro? Ne! U samoj definiciji sam opet upotrebio sve reči 'broj', 'knjiga', 'uzeto'. Faktički sam pojam definisao sa samim njim! To jednostavno nesme da se dogodi u definiciji! Nemogućnost davanja dobre definicije takođe jasno ukazuje da se ovde uopšte neradi o entitetu.
2. Neke definicije su loše.
Primer:
- Entitet 'Citaoc'. Njegova definicija glasi - 'Ovo je sifarnik svih citaoca.'
Da li bi bilo koji bibliotekar na zemaljskoj kugli na pominjanje termina "čitaoc" rekao: "Čitaoc je šifarnik svih čitaoca."?!
Naravno da nebi! To je pokazatelj da je definicija loša. Da podsetim - Definicija mora biti jasna! Definicija mora biti jasna kako projektantu tako i ekspertu iz oblasti koja se projektuje, pa čak i laiku sa strane. Sa rečenicom "Čitaoc je šifarnik svih čitaoca" bismo ubili u pojam kako bibliotekara tako i sve čitaoce. Evo, ja čitam knjige, dakle ja sam čitaoc. ali ja za sebe nikada nebih rekao da sam šifarnik svih čitaoca!
Definicija za entitet 'Citaoc' bi trebala da glasi ovako nekako: "Čitaoc je osoba koja čita knjige." Ovo me dovodi do treće primedbe.
3. Imena nekih entiteta nisu primerena (ovde zanemarujem mešanje jednine i množine)
Primer: Upravo gore spominjani entitet 'Citaoc' je dobar primer jer je proces njegovog definisanja doveo do toga da se zaključi da taj enitet uopšte nema dobro ime! Kako?
Čitaoc je osoba koja čita knjige. Čitaoc je bilo koja osoba na zemaljskoj kugli koja čita knjige. Da li je naša biblioteka zainteresovana da vodi evidenciju o svim čitaocima na planeti zemlji? Naravno da nije. Biblioteka je zainteresovana da vodi evidenciju o njenim ČLANOVIMA. Dakle, entitet 'Citaoc' bi u stvari trebao da se zove 'Clanovi' s definicijom: Član je osoba koja pozajmljuje knjige iz biblioteke.
Znači nedostatak definicije ili loša definicija entiteta govore da sa tim entitetom nešto nije u redu!
Citat:
Getsbi: U pitanjuje je iskustvo koga verovatno ne poseduješ, pa mi stoga entiteti : „MaksimalanBrojUzetihKnjiga“, „BrojUzetihKnjiga“ , „Periodi“ i „Primerak“ bodu oči.
Sve ovo što je naveo Getsbi se uklapa u gornju rečenicu o nedostatku definicije ili o lošoj definiciji. Iskustvo pomaže da se ovakve stvari uoče i bez eksplicitnog navođenja definicije (ali se te definicije podsvesno vrzmaju po glavi).
Trebalo bi proći kroz listu postojećih eniteta i dodeliti im dobre definicije. Nakon ovoga će i ceo domen koji se modelira biti mnogo jasniji nama koji to pratimo (laici sa strane), a na taj način će se možda izvršiti izbacivanje nekih entiteta, pa čak i ubacivanje novih.
Još jedna primedba za kraj:
Pojam 'MaksimalnaBrojUzetihKnjiga' jednostavno nema dobru definiciju da bi bio proglašen za entitet! To jednostavno nije entitet već data element, odnosno atribut. Postavlja se pitanje - kom entitetu treba dodeliti ovaj atribut?
Na čega nas asociraju reči 'maksimalan broj uzetih knjiga'? Asociraju na ograničenje koje je propisala biblioteka. Biblioteka! To je pravi entitet da udomimo naš atribut 'MaksimalnaBrojUzetihKnjiga'.
I došli smo do primera jednočlanog entiteta u našem informacionom sistemu, a to entitet 'Biblioteka'. I ovde mi jednina u imenu entiteta naglašava da se radi o jednoj jedinoj biblioteci koju obuhvata naš IS (Setite se Boga s početka teksta)! Naravno, ovaj naš entitet ima još atributa poput nametljivih prirodnih atributa:
- ime biblioteke,
- adresa,
- broj telefona.
Kasnijim proširenjem pravila poslovanja biblioteke, ovom entitetu bi se verovatno pridodao i recimo atribut 'MaksimalanBrojDana', i ko još zna šta sve.
Sa tehnikom "na koji entitet me asocira ovaj atribut?" sam se prvi put susreo u knjizi od Michael J. Hernandez "Database Design for Mere Mortals: A Hands-On Guide to Relational Database Design".
[Ovu poruku je menjao chachka dana 20.08.2008. u 00:55 GMT+1]
"The best code is no code at all."
- Zidar (ES član)
"Biggest obstacle to learning
SQL is unlearning procedural
programming." - Joe
Celko
"Minimize code, maximize data."
- A. Neil Pappalardo