Evo novih primedbi od mene:
1, Nesviđa mi se ime 'ISBNBroj'. U skracenici ISBN ono N je skraćenica od engleske reči 'Number' odnosno u prevodu 'Broj'. Kada bi se skracenica ISBN prevela na srpski i "produžila" onda bi se onaj izraz 'ISBNBroj' zvao "internacionalni standardni
broj knjige
broj"! Dva puta se u terminu 'ISBNBroj' pojavljuje reč "broj", što je besmisleno. Taj termin je sasvim dovoljno označavati samo sa 'ISBN' što nas dovodi do sledeće primedbe
2. 'ISBNBroj' (odnosno preciznije samo 'ISBN') uopšte
nije entitet! To je atribut entiteta 'Primerak'. Modeliranjem na ovaj način, gubi se potreba za naknadno uvedenim 'RedniBrojISBN'. Ovim 'RedniBrojISBN' je (neuspešno) pokušano rešenje problema, koji se nebi ni pojavio da je u startu 'ISBN' ispravno modeliran kao atribut!
Ovde ću dati još tumačenje tog nesretnog 'RedniBrojISBN' - Produženo i prevedeno to znači "redni broj internacionalnog standardnog broja knjige", odnosno ako izvučem suštinu dobijam "redni broj broja"! Tavko nešto jednostavno nepostoji! Postoji "broj" i postoji "redni broj" ali ne postoje "redni broj broja". Uporno insistiram na ispravnoj semantičkoj (značenje pojmova) analizi problema jer ona pomaže da se izbegnu mnogi problemi u modelu.
3. Nismo dobili kompletne i tačne definicije za 'Knjiga' i 'Primerak' pa je teško da se ispravno sagleda problem, ali mi se čini da 'BrojStrana', 'Dimenzija', 'VrstaPoveza', 'GodinaIzdavanja' uopšte nisu atributi knjige već su to atributi primerka! Knjiga "Gospodar Prstenova" je štampana u više izdanja sa više vrsta poveza, u raznim dimenzijama i s raznim ukupnim brojevima strana, ali je u suštini to
ista knjiga! Opet napominjem, bez precizne definicije pojmova je ovo veoma teško modelirati.
4. Izdavač ne izdaje knjigu nego primerak knjige, tako da bi relacija 'Publikuje' trebala da povezuje entitete 'Izdavac' i 'Primerak'. (Ovde opet problem predstavlja nepostojanje definicija za entitete 'Knjiga' i 'Primerak'. Posle izmena iz 3 i 4 zaista mi se postavlja pitanje 'Šta je to knjiga?'. Posle svega - čini mi se da knjigu određuju autor(i), naslov i sadržaj, dok je forma same knjige ustvari ono što određuje konkretan primerak.)
5. Atributi 'StatusOstecenja' i 'StatusIzdavanja' entiteta 'Primerak' su izvedeni (izračunljivi) atributi te im stoga nije mesto u modelu podataka! On se uvek (i što je bitnije ispravno) mogu izračunati iz podataka smeštenih u 'IzdavanjeKnjige' i 'Ostecenje'. Mada... verovatno bi onda negde trebalo zabeležiti i da je knjiga reparirana.
6. Atribut 'Pozicija' ne pripada entitetu 'Primerak'. Pozicija primerka knjige na polici nikako ne određuje taj primerak. Promenom pozicije na polici primerak ostaje nepromenjen! Atribut 'Pozicija' verovatno pripada relaciji 'se čuva u' koja bi spajala entitete 'Primerak' i (zasada nepostojeći enitet) 'SkladisniProstor' (ili nesto slicno poput 'Polica'). Tačan naziv ovog novog eniteta bi trebalo utvrditi sa domen ekspertom koji je u ovom slučaju bibliotekar.
7. Ceo deo modela oko evidentiranja članarina mi nedeluje ispravno. Šta nije dobro? Ne mogu da kažem jer ne postoje dobre definicije za pojmove 'Clanarina' i 'PeriodClanarine'. "Definicije" ovih pojmova počinju sa "Ovo je entitet ..." (naravno da je entitet!) i "Ovo je sifarnik ..." a već sam ranije rekao da to
nisu definicije. To eventualno može biti nekakva napomena osobe koja modelira sistem. Da su definicije ispravne tada ovakve napomene uopšte nebi ni trebale, tako da su te rečenice apsolutno nepotrebne!
Još jedan znak da sa ovim delom modela nešto nije u redu je sklapanje rečenica od imena entiteta i relacija koje ih povezuju, pa tako dobijamo:
- Članarina daje vrednost periodu članarine.
- Period članarine čita vrednost članarine.
Ove rečenice nemaju smisla (ili se to samo meni čini?), ali je rečenica 'Čitaoc plaća članarinu' daleko realnija i verovatno treba da nađe svoje mesto u modelu. Doduše... reč "plaća" je nesvršena radnja. Da li će čitaoc platiti članarinu i sledeće godine? To niko nemože da predvidi. Zbog toga je daleko primerenije da se koristi "je platio", pa bi rečenica glasila "Čitaoc je platio članarinu", a to je ujedno i činjenica koja je od bitnosti za poslovanje biblioteke. (Meni se i dalje više sviđa termin "Član biblioteke" ("Radovan III" :) ) od termina "Čitaoc". Ali... Šta ja znam, valjda je bibliotekar potvrdio da je termin "čitaoc" ispravan za korišćenje.)
8. Da se vratim malo i na IDEF0 model. Tu se pojavljuje kontrolni tok 'Broj uzetih knjiga'. Mislim da bi primerenije bilo da se taj tok zove 'Uputstvo o poslovanju', 'Pravilnik o poslovanju', ili nekako slično jer je to dokument kojim se propisuje maksimalan broj (jednovremeno) uzetih knjiga koje član biblioteke može da drži kod sebe. Ovim pravilnikom se verovatno propisuje i
- maksimalan broj dana koliko član može da zadrži knjigu kod sebe,
- broj dana koliko član može da neplati novu članarinu (odnosno da produži staru)
i ko zna šta se sve propisuje takvim pravilnikom.
Ako bi se zadržalo ime kontrolnog toka 'Broj uzetih knjiga' onda bi se za svako novo pravilo morao uvoditi nov kontrolni tok. Zamislimo da postoji 50 pravila o poslovanju biblioteke. Tada bi smo imali 50 kontrolnih tokova (što bi model učinilo nečitljivim i neupotrebljivim), dok se suštinski možda radi o jedno, dva ili maksimalno tri kontrolna toka (dokumenta) kojim se uređuje poslovanje biblioteke.
9. Dekompozicija osnovne aktivnosti 'Poslovanje biblioteke' je preterano kompleksna, jer je dekompozicija urađena na
7 podaktivnosti. Dekompoziciju aktivnosti bi trebalo raditi na maksimalno 4-5 podaktivnosti (Gde je u svojoj knjizi Prof. Veljović izvršio dekompoziciju na 6 ili 7 podaktivnosti?). Takvom metodologijom dekomponovanja, bi iole složeniji realni sistem bio dekomponovan na 20-30 podaktivnosti prvog nivoa!
@biske86. Za kraj jedno pitanje - Da li si pričao sa nekim bibliotekarom (ili još bolje bibliotekarkom ("Varljivo leto" :) ) o svom modelu biblioteke?
PS: @biske86: Reci ako te davim svojim komentarima, pa ću prestati.
"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