Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pomoc oko relacionog modela

[es] :: Baze podataka :: Pomoc oko relacionog modela

[ Pregleda: 2690 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

batasson
Nikola Pasic
Beograd

Član broj: 96246
Poruke: 148
95.180.70.*



Profil

icon Pomoc oko relacionog modela09.02.2011. u 13:55 - pre 160 meseci
Pozdrav,

Posle dosta vremena, uzeo sam da opet "ucim" baze podataka i na moje veliko iznenadjenje tek sam sada video koliko sam zaboravio teoriju.
Naime, pravi malu bazu podataka za servis racunara (to mi je prvo palo na pamet kao tema za vebanje :) ).
Od podataka treba da unesem broj radnog naloga, datum prijema racunara, podatke o klijentu, podatke o racunaru (kvar, napomene, sta je uradjeno...).
Ja sam to zamislio ovako:

Code:

klijenti ($idklijenta, ime, prezime, telefon)

racunari ($idracunara, opis_kvara, opis_servisa, napomena, #idservisa)

servis ($idservisa, datum_prijema, racunar_zavrsen)

na_servisu ($broj_naloga, #idklijenta, #idracunara)


Kao sto se moze videti, u tabeli racunari imam spoljni kljuc koji je povezuje sa tabelom servis.
Tabela koja sadrzi broj radnog naloga (na_servisu), je povezana sa tebelama klijenti i racunari preko spoljnih kljuceva,
odakle dobija sve podatke koji se odnose na taj broj naloga.

Da li sam dobro ovo uradio i da li ima neko bolju ideju (ne sumnjam da ima :) )?

Hvala!
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Pomoc oko relacionog modela09.02.2011. u 14:30 - pre 160 meseci
Citat:
Naime, pravi malu bazu podataka za servis racunara (to mi je prvo palo na pamet kao tema za vebanje ).

Pozdravljamo zelju i napor da se pridruzis zabavi

Predlazem da promenis primer na kome vezbas. Uzmi neku prodaju, nesto kao "kupci narucuju robu preko narudzbi koje imaju stavke, a stavke dolaze iz neke liste artikala". To je mnogo lakse da se 'obnovi gradivo'. Mozes i ono "ucenici, ocene"

Baze za servise bilo cega (racunara, automobila) nisu da se na njima vezba. Ta vrsta problema je za jedan nivo teza od klasicne prodaje i nabavke. Posto ti je namera da osvezis znaje generalno, osvezi znanje s necim laksim, a posle mozemo da razgovaramo o slozenijim situacijama, kao sto su servisi. Nema svrhe da ti ispisemo dve strane gustog teksta o tome sta ne valja, ako ti to nece pomoci.

Promeni temu, uzmi nesto sto imas u knjigama. (Ni jedna knjiga ne daje kao primer servise ili lekarske ordinacije, najlblize servisima je video klub ili biblioteka, ali je i to obicno pogresno predstavljeno, pa te samo zbuni.)

Srecan rad

 
Odgovor na temu

Getsbi

Član broj: 124608
Poruke: 2831



+45 Profil

icon Re: Pomoc oko relacionog modela09.02.2011. u 14:47 - pre 160 meseci
Evo ovde imaš jedan primer oko servisiranja akumulatora. Čisto da vodiš o kojim još entitettima vredi razmišljati.
http://www.elitesecurity.org/t398349-1-Pomoc-oko-jedne-baze
 
Odgovor na temu

batasson
Nikola Pasic
Beograd

Član broj: 96246
Poruke: 148
95.180.70.*



Profil

icon Re: Pomoc oko relacionog modela09.02.2011. u 16:20 - pre 160 meseci
Hvala na podrsci. :)

Pre nekih 3 godine sam diplomirao na temi "Baza podataka u domu zdravlja". Bila je evidencija o pacijentima, kartonima, dijagnozama i sve sto prati to.
Nije da se hvalim, ali zaista sam bio dobro uradio :) Ali nakon toga nisam bio u kontaktu sa bazama. Sticajem okolnosti, radio sam u servisu racunara, pa otud i moja zelja da napravim bazu za to. Da budem precizniji, zainatio sam se sebi da uradim bas to jer baza koju smo koristili tamo je bila totalni krs i pomislio sam u sebi milion puta da bi ja to mnogo bolje uradio.

Ono sto sam zamislio jeste da baza bude sto jednostavnija i da nema bespotrebnih stvari. Program ne bi nikome prodavao ili tako nesto, tako da za pocetak zelim samo osnovne stvari da sadrzi, a kako bi moje podsecanje i dalje ucenje napredovalo, tako bi sirio i program. Koristio bi PHP i MySQL.

Da sumiram:

1. Na pocetnoj strani (prijem racunara) budu polja za unos podataka o klijentu (licni podaci), o problemu koji racunar ima, datum prijema i radni broj naloga.
Sve bi se to unosilo u bazu nakon klika na jedno dugme;
2. Druga strana bi bila rezervisana za servisere. Znaci samo jedan UPDATE vec postojecih zapisa u tabelama gde bi se dodao opis uradjenog posla i da je
racunar zavrsen;
3. Osnovni izvestaji. Pregled cele baze i prikaz zavrsenih ili nezavrsenih racunara, u zavisnosti od atributa koji serviser izmeni u stavci 2.
4. Pretraga baze po broju naloga.

To je tacno ono sto zelim da imam za pocetak. Nadam se da razumete taj moj inat da uradim bas ovo, jer onda znam da sam ispunio ono sto sam rekao sebi.

Unapred hvala na pomoci!

p.s. Da li su oni entiteti i atributi sto sam naveo gore dobri?
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Pomoc oko relacionog modela09.02.2011. u 18:21 - pre 160 meseci
Citat:
Da sumiram:

1. Na pocetnoj strani (prijem racunara) budu polja za unos podataka o klijentu (licni podaci), o problemu koji racunar ima, datum prijema i radni broj naloga.
Sve bi se to unosilo u bazu nakon klika na jedno dugme;
2. Druga strana bi bila rezervisana za servisere. Znaci samo jedan UPDATE vec postojecih zapisa u tabelama gde bi se dodao opis uradjenog posla i da je
racunar zavrsen;
3. Osnovni izvestaji. Pregled cele baze i prikaz zavrsenih ili nezavrsenih racunara, u zavisnosti od atributa koji serviser izmeni u stavci 2.
4. Pretraga baze po broju naloga.

To je tacno ono sto zelim da imam za pocetak. Nadam se da razumete taj moj inat da uradim bas ovo, jer onda znam da sam ispunio ono sto sam rekao sebi.


Ti ne pricas o bazi, nego o aplikaciji, kako si zamislio da izgleda i sta da radi. Bazu imas i zelis da je pregledamo. OK, da je pogledamo. Molim te da budes strplijiv ida procitas sve do kraja, da se ne naljutis negde u sredini :-)

Za pocetak, nije data kompletna definicija baze. Date su samo tabele i osnovni atributi. Nedostaju ogranicenja. Dobro, mozda ono $ predstavlja PK a ono # predstavlja FK.
Code:

klijenti ($idklijenta, ime, prezime, telefon)
racunari ($idracunara, opis_kvara, opis_servisa, napomena, #idservisa)
servis ($idservisa, datum_prijema, racunar_zavrsen)
na_servisu ($broj_naloga, #idklijenta, #idracunara)


Tabela Klijenti je nezavisna, nema FK, ne gleda ni u jednu drugu tabelu, redovi se mogu dodavati po volji. Mali problem je sto kiljent (ime Bata, prezime Son, tel 123-456-789) moze da bude unesen 9999 puta u tabelu, ali to mozemo da zanemarimo za trenutak, mozda tako i treba.

Jos jedna nezavisna tabela je servis ($idservisa, datum_prijema, racunar_zavrsen). Ne gleda ni u jednu drugu tabelu, sve se unosi po volji. Mogu da unesem 100 redova odmah, sa istim ili razlicitim datumom, a mogu i da upisem i da je racunar_zavrsen = TRUE. Nista me ne sprecava, osim mozda briljantno programiranje u PHP. Svejedno je sta upisem, ionako mi nista ne kaze ni koji je racunar, ni koji je klijent u pitanju.

Ostale tabele su zavisne od ove dve. Tabela racunari ($idracunara, opis_kvara, opis_servisa, napomena, #idservisa) zavisi od #ID servisa. Znaci, iz onih 100 odabranih servisa, izaberem neki i dodelim ga bilo kom racunaru. opis_kvara ce mi kazati klijent, opis_servisa ne znma, jer jos nisam nista uradio, tek sam primio racunar, napomena ne znam cemu sluzi i sta predstavlja. Ali me nsita i ne sprecava da unesem opis servisa unapred.

Posto sam lepo uneo racunar u tabelu, sada lepo mogu da unesem novi red u tabelu na_servisu ($broj_naloga, #idklijenta, #idracunara). Neku unique vrednost dodelim u kolonu broj_naloga, to je jel'te PK. #Idklijenta prepisem iz tabele Kiljenti, i IDracunara prepisem iz tabele Racunari. Moram samo nekako da unesem tacno onaj racunar koji je doneo doticni klijent. Pri tom mogu lako da napravim gresku, jer me nista u tabelama ne sprecava da je napravim. Osim mozda opet briljantno programiranje u PHP.

U bazam apodataka generalno se trudimo da ne zavisimo od programiranja, da nam podatke (integritet podataka) cuva sama baza, ako je ikako moguce. To je prva, generalna greska.

Druga, konkretna greska je izbor i konstrukcija tabela, tako da integritet podataka nije ama bas nikako obezbedjen. - proizasla iz prekrsenog prvog pravila.

Treca greska je sto data baza ne odgovara ni izbliza realnosti u servisnoj firmi. Ako pretpostavimo da se nikada ne ide na teren, znaci musterija donese racunar u firmu. Onda se saslusa sta ga muci. Onda se pogleda racunar, odrade neki testovi, da bi se postavila dijagnoza. Onda se racunar ili popravi - promene se delovi koji ne valjaju, ako treba, ili se narucuju delovi, ako ih nemamo. Ako su delovi mnogo skupi, ponekad moramo da zovnemo klijenta i da pitamo za dozvolu, ili potvrdu. On moze da se slozi ili odbije. Ako se slozi, narucujemo delove (i cekamo na njih nekoliko dana) i na kraju ih ugradimo. Onda korisnik preuzme racunar, ali se ponekad desi da bas i ne radi kako smo predvideli, pa ga vrati - reklamacija, cime se problem ponovo otvara. Ako se klijent ne slozi sa kupovinom delova, ceo posao se obustavlja i gledamo kako da naplatimo vreme utroseno na dijagnozu.

Kao sto vidis, ima mnogo koraka koje treba proci, iako se ne prolaze uvek svi koraci, od momenta donosenja racunara u servis, do zavrsetka ili obustave posla. Imamo tacno jedan pocetak, sa dva moguca ishoda, i promenljivim brojem koraka izmedju pocetka i kraja procesa. Osim ako sve to ne upisemo u kolonu 'napomene'. U skoli te nisu ucili nazalost kako se ovakve situacije resavaju, jer se tuo us kolama generalno ne uci. Zato sam ti rekao da promenis temu. A ti se zainatio.

Modal na koji te Getsbi uputio je nesto bolji, tamo se zna ko je doneo koji akumulator na pregled, to bar ne moze da se izmesa. Zapisuje se na bolji nacin sta fali akumulatoru - dozvoljava se vise od jedne 'greske' po 'evidenciji'. Evidencija tamo odgovara nakakvom 'radnom nalogu'. Takodje je bolje opisano sta je radjeno - u tabeli EvidencijaNacinaResavnja. I dozvoljavaju se reklamacije. Medjutim, i taj model ne prati desavanja u toku procesa, osim mozda kroz kolonu Evidencija.Napomena. Isto, kod reklamacije se ne vidi sta se to reklamira, nema ukazatelja ne neki prethodni servis - evidenciju. Lepo je sto se u tom modelu mislilo i na pozajmicu - nekome pozajmimo akumulator dok ne popravimo njegov. Ali ne vidimo da li je pozajmljeni akumulator i vracen, kada i u kakvom stanju na primer.

Sve u svemu, i taj model tek 'moze da prodje' ako zazmurimo za neke stvari. Iako je mnogo truda, znanja i iskustva ulozeno. A taj program nije radio neki neznalica ili pocetnik, stavise, radio ga je majstor vredan svakog postovanja. problem nije do majstora, nije ni do tebe, problem je jednostavno takav da se tesko resava. Ono sto je potrebno za ovakav problem, za sada se ne uci u skoli, ni kod tebe u Srbiji ili bivsoj YU, ni ovde u Kanadi, ni u USA. Pisu se sistemi koji 'mogu da prodju', i prolaze, i rade i to dobro rade, pa se sve pusi. Ali nisu dobar primer za ucenje baza jer nema sta iz njih da se nauci.

Zato treba izabrati nesto drugo, za vezbanje i za pocetak, ako su baze podatak cilj. Ako je cilj pokazati kako se kreativnim progarmiranjem mogu prebroditi problemi za koje naoko nemamo resenja u bazam, onda je OK, ovo je pravi primer za to.

Nadam se da se ne ljutis, samo sam pokusao da to ustedim vreme.

:-)
 
Odgovor na temu

batasson
Nikola Pasic
Beograd

Član broj: 96246
Poruke: 148
95.180.70.*



Profil

icon Re: Pomoc oko relacionog modela09.02.2011. u 22:45 - pre 160 meseci
Nema ljutnje uopste :)
Sasvim je normalno prihvatati kritike i ispravke. Izmedju ostalog, uvek ima neko ko zna vise.
Ali mislim da se nismo razumeli najbolje.

Mozda je zvucalo da pricam u one 4 stavke o aplikaciji, ali hteo sam da kazem sta ja zelim od svega toga. Kompletna aplikacija sa bazom podataka nece ici u nikakvu komercijalnu upotrebu tako da ne bih zalazio do svih detalja. To vise dodje kao neka evidencija racunara koji su na servisu i koji su zavrseni. Mozda se nisam dobro izrazio u startu, ali to je ono sto zelim da uradim.

Klijent donese racunar na servis, racunar se zavede u bazu podataka sa svim potrebnim informacijama o stanju (kvaru) racunara. Kasnije, nakon izvrsenog servisa, serviser zavede sta je uradio na racunaru i oznaci da je racunar zavrsen. To je sve. Tako smo radili u tom servisu (znam da nije profi, ali tako smo radili), a za nabavku delova smo koristili drugi program (Panteon).
Znaci, za pocetak bi napravio tu evidenciju, a kasnije kad nju zavrsim, onda bi dodavao te elemente za nabavku delova i status racunara u slucaju da pozove klijent.

Sta bi mi ti predlozio da budu entiteti?



Citat:

U bazam apodataka generalno se trudimo da ne zavisimo od programiranja, da nam podatke (integritet podataka) cuva sama baza, ako je ikako moguce. To je prva, generalna greska.

Potpuno se slazem. Zelim da aplikacija bude samo izvrsni alat, a da se sva sustina nalazi u bazi.
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Pomoc oko relacionog modela10.02.2011. u 14:37 - pre 160 meseci
OK, vazno je da nema ljutnje i nesporazuma.
Citat:
Klijent donese racunar na servis, racunar se zavede u bazu podataka sa svim potrebnim informacijama o stanju (kvaru) racunara. Kasnije, nakon izvrsenog servisa, serviser zavede sta je uradio na racunaru i oznaci da je racunar zavrsen.

Za ovo ti je dovoljna jedna jedina tabela:

Code:

-- ovo je samo pesude -code, cut/psate najverovatnije  nece raditi 
-- svrha pseudo-koda je da pokaze kako treba da izgleda kompletna definicija tabele
CREATE TABLE RadniNalozi
(NalogID int PRIMARY KEY
, DatumNaloga dattime NOT NULL
, KlijentTel varchar(9) NOT NULL
, KlijentIme varchar(25) NOT NULL
, OpisKvara varchar(2000) NOT NULL  
, DatumZavrsetka datetime NULL  -- nije poznato na pocetku, pa ga ostavljamo prazno
, StajeUradjeno varchar(2000) NULL     -- nije poznato na pocetku, pa ga ostavljamo prazno
, CONSTRAINT ck_OdnosDatume CHECK DatumZavrsetka>=DatumNaloga  -- ovo je ocigledno
-- Podatke o zavrsetku ili iammao, ili nemamao, svi su NULL ili nijedn nije NULL
, CONSTRAINT ck_PodaciOizvrsenomPoslu CHECK ((OpisKvara IS NULL AND DatumZavrsetka IS NULL AND StajeUradjeno IS NULL)
OR (OpisKvara IS NOT NULL AND DatumZavrsetka IS NOT NULL AND StajeUradjeno IS NOT NULL))
)


Mozes mozda da klijente odvojis u posebnu tabelu ako bas hoces, pa napravis FOREIGN KEY...
Mozes i za OpisKavara ili StajeUradjeno da imas neke predefinisane vrednosti, u nekim drugim tabelama, pa napravis FOREIGN KEY i to je to. Onda model pocinje da lici na ono sto ti je Getsbi pereporucio.

Ova jedna tabela to daje mogucnost da upises sve podatke koje si naveo, u momentu donosenja racunara na popravku. Tri kolone na kraju ostavis prazne jer to jos ne znas. Kad bude zavrsen kavr, onda se dopisu tri kolone na kraju. One moraju da budu il sve tri prazne, ili sve tri popunjene. Zato nam trebaju ogranicenja - CONSTRAINTS. Tek kad dodamo ogranicenja definicja baze psotaje kompletna.

 
Odgovor na temu

batasson
Nikola Pasic
Beograd

Član broj: 96246
Poruke: 148
95.180.70.*



Profil

icon Re: Pomoc oko relacionog modela12.02.2011. u 11:51 - pre 160 meseci
Nisam ni svestan toga koliko sam zaboravio :(
Neverovatno je kako se lako moze zaboraviti kad nisi u kontaktu sa tim.

U slucaju da bi se podaci o klijentu izdvojili u zasebnu tabelu,
da li bi se mogao izvrsavati i kako bi izgledao upit koji bi unosio podatke u obe tabele?
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Pomoc oko relacionog modela16.02.2011. u 16:24 - pre 160 meseci
Citat:
U slucaju da bi se podaci o klijentu izdvojili u zasebnu tabelu,
da li bi se mogao izvrsavati i kako bi izgledao upit koji bi unosio podatke u obe tabele?

Cuvanje kupaca u zasebnoj tabeli komplikuje stvari i ima smisla samo ako se radi sa manje-vise istom grupom kupaca. Ako je suprotno, kupci su uglavniom nepoznati, onda je resenje sa jednom tabelom bolje.

Ako ipak ides sa dve tabele, treba ti deo programa koji odrzava tabelu kupaca, potpuno nezavisno od ostatka baze i programa. Znacim unos, izmene, brisanje i promene indiovidualnih kupaca.

Deo programa koji se bavi odrzavanjem liste naloga tada samo dodeli kupca nalogu. Znaci, otvoris nalog, pa kazes za kog kupca je taj nalog (izaberes kupca iz neke padajkuce liste nekako) i to je sve. Ovo podrazumeva da kad neko dodje sa pokvarenim racunarom, prvo identifikujes osobu - kupca, pa tek onda otvras nalog. Ako kupca nisi nasao u listi kupaca, onda prvo ides da ga uneses, pa tek onda pokusavas da otvoris nalog, jer nalog ne moze da postoji bez kupca. Ovo se sve moze lakse prikazati diajgramima i bilo bi razumljivije. To je do analize postojeceg procesa. Ako si radio diplomski iz oblasti progarmiranja i baza podataka, z atoliko bi morao da se setis.

 
Odgovor na temu

batasson
Nikola Pasic
Beograd

Član broj: 96246
Poruke: 148
95.180.70.*



Profil

icon Re: Pomoc oko relacionog modela16.02.2011. u 20:46 - pre 160 meseci
Citat:

Ako si radio diplomski iz oblasti progarmiranja i baza podataka, z atoliko bi morao da se setis.


Od tog diplomskog je proslo 3 godine. A na zalost, do sada nisam imao nikakav kontakt sa bazama. Nije bio komplikovan rad, 6-7 tabela u Access-u sa uglavnom predefinisanim zapisima. Ostalo se svodilo na izvodjenje raznoraznih upita.

Ali, ako bi sve uvrstio u jednu tabelu, zar ne bi tu dolazilo do mnogo ponavljanja zapisa? A sam tim bi se rusilo prvo pravilo normalizacije?

Citat:

Cuvanje kupaca u zasebnoj tabeli komplikuje stvari i ima smisla samo ako se radi sa manje-vise istom grupom kupaca. Ako je suprotno, kupci su uglavniom nepoznati, onda je resenje sa jednom tabelom bolje.


Jeste, najvise ce dolaziti razliciti klijenti, ali ako uzmemo u obzir da ce se tu raditi i racunari koji su u garanciji i los kvalitet danasnjih delova koji ce se menjati (iskustvo iz prve ruke :)), onda ce se sigurno ponavljati isti klijenti i to vise puta.

Meni se cini da jeste bolja varijanta da se bar klijenti izvuku u posebnu tabelu, pa onda, kao sto si rekao, da se prvo identifikuje klijent, pa onda da se pravi nalog.
 
Odgovor na temu

Zidar
Canada

Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Pomoc oko relacionog modela16.02.2011. u 22:45 - pre 160 meseci
Citat:
ali ako uzmemo u obzir da ce se tu raditi i racunari koji su u garanciji i los kvalitet danasnjih delova koji ce se menjati (iskustvo iz prve ruke ), onda ce se sigurno ponavljati isti klijenti i to vise puta.

Ako je tako, onda vise tabela. Medjutim, kao sto rekoh na pocetku, naprosto odvajanje kupaca u drugu tabelu ne resava mnogo toga, vise komplikuje stvari. No, ako je za vezbu, onda je sve dovoljno dobro.

Srecan rad


 
Odgovor na temu

biske86
Ivan Biševac
Zubin Potok

Član broj: 62435
Poruke: 979
*.dynamic.isp.telekom.rs.

Sajt: biske.rs


+39 Profil

icon Re: Pomoc oko relacionog modela19.09.2011. u 21:48 - pre 153 meseci
@Nikola, šta bi sa ovom bazom, jesi li uradio nešto od ovoga? Ako jesi možeš li da podeliš iskustvo sa nama?
 
Odgovor na temu

[es] :: Baze podataka :: Pomoc oko relacionog modela

[ Pregleda: 2690 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.