Zidar Canada
Član broj: 15387 Poruke: 3085 *.100.46-69.q9.net.
|
Koju god temu da izaberes, nemoj poceti sa nabrajanjem entiteta. Pocni sa opisom poslovnog problema, onako kako ste to u skoli radili na primeru sa mlekom. Na primer, mozes da kazes: "Preduzece X ima nekoliko otkupnih stanica za voce. Voce se otkupljuje od individualnih proizvodjaca. Pri otkupu, meri se kolicna I kvalietet voca. Pri otkupu, pravi se priznanica za otkup - document na kome pise koliko je cega otkupljeno I od koga, na osnovu koga se vrsi placanje. Za otkupleno voce, placa se u roku od 7 dana na bankovni racun proizvodjaca. Cene se utvrdjuju jednom godisnje za svako ovce I kategoriju, pa se po tom cenovniku placa......" Kad zavrsis opis, onda u opisu trazis imenice - to ce biti entiteti. Onda svaki entitet opises jednom prosto prosirenom recenicom. Na primer, za imenicu 'otkupna stanica' uvodis entitet OtkupnaStanica. O njemu mozes da kazes ovo, na primer:
1) "Otkupna stanica ime neki ID, nalazi se na nekoj adresi, I ima telefon, fax I e-mail adresu, sef stanice je neka osoba." Sad I u toj recenici imas neke nove imenice. Za svaku imanicu uvedes nekakav naziv, pa napises recenicu ovako:
2) "Otkupna stanica oznacena kao [OtkStanID] nalazi se u mestu [Mesto] na adrsi [Adr], ima telefon [Tel], fax [Fax] I e-maila adresu [Email], sef stanice je [Sef]"
Ovo se zove "predikati relacija" ili "znacenje predikata relacija"
To ti je jedan entitet, OtkupnaStanica, I to se formalno prikazuje ovako, kao nekakav skup:
OtkupnaStanica = {[OtkStanID], [Mesto], [Adr], [Tel], [Fax], [Email], [Rukovodilac]}
Sad pogledas u elemente skupa OtkupnaStanica - to ce ti biti atributi. Atributi se definisu nazivom I tipom, pa treba da dodas tipove, ovako nekako:
OtkupnaStanica = {([OtkStanID], int);([Mesto], text(255)); ([Adr], text (255));( [Tel], text (8));([Fax], text(8)); ([Email],text(255));([Rukovodilac],int)}
I tako za sve entitete koje mozes da uocis u tekstu. Ako ne uspe od prve, radis sledecu iteraciju, nesto dodas, nesto oduzmes.
Onda se vratis na teks koji opisuje process, pa ga napises u drugoj verziji. U ovom korku, pokusavs da uocis kako se entiteti odnose jedan prema drugom, I to zapisujes u kratkim recenicama, svaku recenicu numerises I pises u posebnom redu. Na primer:
1) "Otkupna stanica otkupljuje voce od proizvodjaca" Ovo ne mora da pise u opisu bas ovako, ali ti zakljucujes iz opisa problema da se u sustini ovo desava. Onda ides dalje, pa vidis da:
2) Proizvodjacu se izadje priznanica za otkup.
3) Na osnovu priznanice, vrsi se isplata proizviodjacu ne njegov bankovni racun, na osnovu cenovnika.
4) Pravi se cenovnik za svaku godinu.
To su glavni odnosi za opis koji sam ja dao. Tvoj ce opis verovatno biti detaljniji (trebalo bi da bude, a ne da prepisujes moj opis), pa ce I ove recenice izgledati malkice drugacije, ali u sustini to je to. Na osnovu ove cetiri recenice mozes da pocnes da crtas ER dijagram. Da pocnes, a dok ga zavrsis ima jos posla.
U sledecem koraku se vracas na definicije entiteta (oni skupovi, sa ili bez tipova podataka). Za svaki atribut pises ogranicenja. da bi to uradio, moras da napises attribute kao vertikalnu listu, ovako:
OtkupnaStanica :{
[OtkStanID], NOT NULL, int > 0
[Mesto], NOT NULL
[Adr], NOT NULL
[Tel], NOT NULL, dozvoljene samo cifre, duzina tacno 8 karaktera
[Fax], NOT NULL, dozvoljene samo cifre, duzina tacno 8 karaktera
[Email], NULL, ako nije null onda ne sme biti veci od 255 karaktera, mora da ima @ znak, bar jednu tacku iza @, @ ne sme da bude prvi znak, tacka ne sme da bude poslednji znak, izmedju @ I tacke mora da postoji bar jedan zank, iza tacke mora da bude 2 ili 3 znaka
[Rukovodilac], NOT NULL int >0, mora da bude iz skupa zaposlenih u firmi X
}
Obrati paznju na poslednje ogranicenje, Rukovodilac mora da bude iz skupa zaposlenih u firmi X. To znaci da mora da ostoji entitete ZaposleniUFirmiX, koji sadrzi identifikacione brojeve za radnike. Neki od tih radnika bice rukovodioci otkupnih stanica. Ukoliko si u prethodnoj analizi propustio da definises entitet ZaposleniUfirmiX, ovo ce te podsetiti da to uradis. Ja sam propustio da navedem taj entitet, ali zahvaljujuci ovom dodatnom koraku u analizi propust je na vreme uocen. Slicnu situaciju imas kad definises sta se otkupljuje - samo voce koje je definisano negde, sa kategorijama koje su definisane negde, I samo definisano voce I kategorije mogu se nalaziti na cenovnikui, a u priznanicu ide samo ono sto se nalazi u cenovniku.
Dodatna korist od zapisivanja ogranicenja jeste da kad budes pravio tabele, znaces da postavis pravila validacije podatka, sto mnogi zaborave pa dobar model u praksi kljakavo radi. Model nije samo ER dijagram, nego skup {ER dijagram, Ogranicenja, Znacenja predikata relacija}
Sad ovo procitaj jako polako, deo po deo I uradi sta je predlozeno. Samo citanje je posao od 2-4 sata, a razvoj modela (posto napravis dobar opis) ce ti uzeti nekoliko dana. Za skolu je verovatno dovoljno da im odneses prvu iteraciju ER modela, I scve appire koje si napisao da bi do tog koraka dopsao (ovo sto smo pokazali u tekstu).
U praksi, mnogo je lakse kad neko uradi anlizu I modelovanje, pa ti kao mladi programmer pocetnik samo kodiras ogranicenja I pravis interfejs za procese koji se desavaju u sistemu. Nekad je tako I bilo, najiskusniji I najobuceniji ljudi su bili analiticari baza podataka I data-modeleri. Danas se ocekuje da svako sve zna I zato se danas pravi softver mnogo losijeg kvaliteta nego pre 20 godina. Tuzno, ali tako je.
Srecan rad
:-)
|