Problem s dizajnom baze-hitno!

poruka: 15
|
čitano: 3.170
|
moderatori: XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
13 godina
neaktivan
offline
Problem s dizajnom baze-hitno!

Radim program za analizu rada djelatnika i kreirao sam bazu sa sljedećim tablicama:

 

RADNICI:SifraRadnika(PK), Ime, Prezime, DatumRodenja, Mjesto, Ulica, KucniBroj...

POSLOVI:SifraPosla(PK), VrstaPosla, MjernaJedinica, Cijena...

 

Moj je cilj na temelju ove dvije tablice izračunati plaću radnika, pa sam kreirao tablicu

PLACA:Kljuc(PK), Datum, SifraRadnika(FK), SifraPosla(FK), KolicinaPosla, Cijena, UkupniIznos.

 

Problem je sljedeći: sve štima dok se ne mijenjaju podaci u primarnim tablicama RADNICI I POSLOVI. Pošto moram imati arhivu plaća mene zanima kako riješiti problem koji nastaje ukoliko se naprimjer u tablici RADNICI promijene i ime i prezime ili ako se promijeni cijena posla? Na taj način u tablici PLAĆA dobivam da je netko drugi radio određeni posao ili automatski mijenjam cijene i ukupne iznose za sve recorde.

 

Ukoliko npr. neki radnik više ne radi i ja ga izbrišem iz tablice RADNICI onda više ne znam tko je radnik pod izbrisanom šifrom u tablici PLAĆA...

 

Ne znam kako formirati tablicu PLACA (ili vise drugih tablica ako je potrebno) pa vas molim za pomoc. Jedino što mi pada na pamet je u tu tablicu dodati kolone ImeRadnika,PrezimeRadnika,OpisPosla,Kolicina,Cijena,UkupniIznos, al mislim da to onda i nema previše veze s relacijskim bazama podataka i normalizacijom?!

 

Hvala unaprijed na odgovoru!

 
0 0 hvala 0
17 godina
offline
Problem s dizajnom baze-hitno!

Da dodas jos jednu tabelu radnik2 gdje ce ti svaka "izmjena" radnika biti "novi radnik" i to povezes sa placom? Isto napravis i sa tabelom "Posao" ili kako se vec zove. Tako mozes pratiti sve izmjene na pojedinom radniku, poslu, a vrlo lako mozes izvuci sve place (sa izmjenama radnika i posla)

I am creationist. I believe man created god.
 
0 0 hvala 2
16 godina
neaktivan
offline
Re: Problem s dizajnom baze-hitno!
mi41514 kaže...

... Jedino što mi pada na pamet je u tu tablicu dodati kolone ImeRadnika,PrezimeRadnika,OpisPosla,Kolicina,Cijena,UkupniIznos, al mislim da to onda i nema previše veze s relacijskim bazama podataka i normalizacijom?!

 

Hvala unaprijed na odgovoru!

Ovoje sasvim ok, jer ce ti ta tablica koiliko vidim sluziti cisto za evidenciju.

All religions are the same: religion is basically guilt, with different holidays.
16 godina
neaktivan
offline
Re: Problem s dizajnom baze-hitno!

Malo si to krivo logički postavio. Zašto bi uopće brisao radnika koji više ne radi iz evidencije? Stavi još jedno polje tipa radi/ne radi i biti će ok. Em imaš evidenciju svih koji su ikada radili i nećeš imati problema tog tipa.

Ako već imaš polje u tablici plaća 'cijena', pa valjda tu pamtiš trenutačnu cijenu koja je u tom momentu u tablici poslovi zapisana, a kad se ona i promijeni u tablici plaća neka ostane cijena koja je bila na taj dan kada je plaća izračunata, u čemu je problem?

A radnike ionako nemoj pamtiti po imenima ili prezimenima već po nekoj šifri i nećeš imati problema niti ako netko promijeni ime ili prezime.

 

13 godina
neaktivan
offline
Re: Problem s dizajnom baze-hitno!

Sve mi je to jasno i na taj sam način i ja razmišljao, ali ono što mene zapravo muči je tvoja zadnja tvrdnja. Ja radnike ni ne pamtim po imenima i prezimenima nego po šifri.

 

Npr. Ja u tablici radnici imam radnika pod šifrom 3 koji se zove Pero Perić. U tablici plaća imam šifru radnika (3) koji je radio npr. 03.10.2011. određeni posao. Ukoliko ja promijenim ime i prezime radnika iz tablice radnici sa šifrom 3 u Marko Markić ispada da je 03.10.2011. radio Marko Markić, a ne Pero Perić!!

 

Meni je ključno da imam evidenciju i trenutno stanje za svaki dan u prošlosti. Znači da se zna tko je radio taj dan i po kojoj cijeni i koju vrstu posla.

 

Mislim da moram unijeti vremensku dimenziju u cijelu ovu priču ili jednostavno formirati tablicu kako je "drnde" naveo u svom odgovoru?! Pod vremensku dimenziju mislim da unesem i vrijeme svake promijene određenog podatka. Npr. kad radniku sa šifrom 3 promijenim i ime i prezime da znam datum kad je došlo do promjene pa da ga uspoređujem s datumom knjiženja plaće. Ni sam nisam siguran kako to jednostavno izvesti!

 

Nadam se da me sad kuzite.

13 godina
neaktivan
offline
Re: Problem s dizajnom baze-hitno!

Mislim da je to ono sto trazim! Pronasao sam na http://en.wikipedia.org/wiki/Slowly_changing_dimension nesto o mom problemu i mislim da je Type 4 iz tog članka ono što mi ti predlažeš.

 

Na temelju toga mislim napraviti dvije tablice kako si i rekao samo što ću još u njih dodati kolone VrijediOdDatuma i VrijediDoDatuma. Kad ću po prvi put dodati novog radnika u tablicu RADNICI u kolonu VrijediOdDatuma upisat ću datum kad dodajem novog radnika, a u kolonu VrijediDoDatuma ću upisati 31-12-9999. Kad dođe do neke promjene u tablici RADNICI će se nalaziti nove vrijednosti uključujući i onu u VrijediOdDatuma u kojoj će se upisati datum na koji se ta promjena događa. U drugu će se pak tablicu, koju ću npr. nazvati RADNICI_HISTORY, dodati novi redak s podacima iz tablice RADNICI prije promjene i u kolonu VrijediDoDatuma će se upisati datum kad je izvedena promjena u tablici RADNICI.

 

Je l' to ono što si mi predložio?

 

Hvala unaprijed!

13 godina
neaktivan
offline
Re: Problem s dizajnom baze-hitno!
tnakir kaže...

Da dodas jos jednu tabelu radnik2 gdje ce ti svaka "izmjena" radnika biti "novi radnik" i to povezes sa placom? Isto napravis i sa tabelom "Posao" ili kako se vec zove. Tako mozes pratiti sve izmjene na pojedinom radniku, poslu, a vrlo lako mozes izvuci sve place (sa izmjenama radnika i posla)

Mislim da je to ono sto trazim! Pronasao sam na http://en.wikipedia.org/wiki/Slowly_changing_dimension nesto o mom problemu i mislim da je Type 4 iz tog članka ono što mi ti predlažeš.

 

Na temelju toga mislim napraviti dvije tablice kako si i rekao samo što ću još u njih dodati kolone VrijediOdDatuma i VrijediDoDatuma. Kad ću po prvi put dodati novog radnika u tablicu RADNICI u kolonu VrijediOdDatuma upisat ću datum kad dodajem novog radnika, a u kolonu VrijediDoDatuma ću upisati 31-12-9999. Kad dođe do neke promjene u tablici RADNICI će se nalaziti nove vrijednosti uključujući i onu u VrijediOdDatuma u kojoj će se upisati datum na koji se ta promjena događa. U drugu će se pak tablicu, koju ću npr. nazvati RADNICI_HISTORY, dodati novi redak s podacima iz tablice RADNICI prije promjene i u kolonu VrijediDoDatuma će se upisati datum kad je izvedena promjena u tablici RADNICI.

 

Je l' to ono što si mi predložio?

 

Hvala unaprijed!

17 godina
offline
Re: Problem s dizajnom baze-hitno!
mi41514 kaže...

Sve mi je to jasno i na taj sam način i ja razmišljao, ali ono što mene zapravo muči je tvoja zadnja tvrdnja. Ja radnike ni ne pamtim po imenima i prezimenima nego po šifri.

 

Npr. Ja u tablici radnici imam radnika pod šifrom 3 koji se zove Pero Perić. U tablici plaća imam šifru radnika (3) koji je radio npr. 03.10.2011. određeni posao. Ukoliko ja promijenim ime i prezime radnika iz tablice radnici sa šifrom 3 u Marko Markić ispada da je 03.10.2011. radio Marko Markić, a ne Pero Perić!!

 

Meni je ključno da imam evidenciju i trenutno stanje za svaki dan u prošlosti. Znači da se zna tko je radio taj dan i po kojoj cijeni i koju vrstu posla.

 

Mislim da moram unijeti vremensku dimenziju u cijelu ovu priču ili jednostavno formirati tablicu kako je "drnde" naveo u svom odgovoru?! Pod vremensku dimenziju mislim da unesem i vrijeme svake promijene određenog podatka. Npr. kad radniku sa šifrom 3 promijenim i ime i prezime da znam datum kad je došlo do promjene pa da ga uspoređujem s datumom knjiženja plaće. Ni sam nisam siguran kako to jednostavno izvesti!

 

Nadam se da me sad kuzite.

Ali zasto bi mijenjao ime radnika za postojecu sifru? Pa to je protiv svih database pravila!!!

Preimenujmo smjeska *namigiva* u *namiguje*!!!
13 godina
neaktivan
offline
Re: Problem s dizajnom baze-hitno!
Maxxy kaže...
mi41514 kaže...

Sve mi je to jasno i na taj sam način i ja razmišljao, ali ono što mene zapravo muči je tvoja zadnja tvrdnja. Ja radnike ni ne pamtim po imenima i prezimenima nego po šifri.

 

Npr. Ja u tablici radnici imam radnika pod šifrom 3 koji se zove Pero Perić. U tablici plaća imam šifru radnika (3) koji je radio npr. 03.10.2011. određeni posao. Ukoliko ja promijenim ime i prezime radnika iz tablice radnici sa šifrom 3 u Marko Markić ispada da je 03.10.2011. radio Marko Markić, a ne Pero Perić!!

 

Meni je ključno da imam evidenciju i trenutno stanje za svaki dan u prošlosti. Znači da se zna tko je radio taj dan i po kojoj cijeni i koju vrstu posla.

 

Mislim da moram unijeti vremensku dimenziju u cijelu ovu priču ili jednostavno formirati tablicu kako je "drnde" naveo u svom odgovoru?! Pod vremensku dimenziju mislim da unesem i vrijeme svake promijene određenog podatka. Npr. kad radniku sa šifrom 3 promijenim i ime i prezime da znam datum kad je došlo do promjene pa da ga uspoređujem s datumom knjiženja plaće. Ni sam nisam siguran kako to jednostavno izvesti!

 

Nadam se da me sad kuzite.

Ali zasto bi mijenjao ime radnika za postojecu sifru? Pa to je protiv svih database pravila!!!

Ma ne bih, ali me muči sljedeće: korisnik npr. napravi neku pravopisnu grešku prilikom unosa imena i prezimena i kasnije to skuži i želi je ispraviti. Znači moram u svom C# programu dozvoliti izmjenu. Sve je ok ako ispravi tu greškicu, ali me zanima kako se onda osigurati da korisnik koji nista ne zna o bazama podataka izmijeni sve. Padne mu na pamet da bi bas super bilo da pod šifrom 3 ima nekog drugog i promijeni totalno i ime i prezime?!

Poruka je uređivana zadnji put ned 2.10.2011 22:44 (mi41514).
17 godina
offline
Problem s dizajnom baze-hitno!

Ne postoji "idiot proof" software! Jednostavno, izmjene takvih podataka moras dozvoliti samo onome tko zna sto radi. Ako dozvolis svim korisnicima da rade sve promjene, ubrzo ces imati kaos u bazi.

To dakle, nije problem dizajna baze, nego obuke korisnika!

Preimenujmo smjeska *namigiva* u *namiguje*!!!
Moj PC  
1 0 hvala 0
16 godina
neaktivan
offline
Re: Problem s dizajnom baze-hitno!
mi41514 kaže...

Ma ne bih, ali me muči sljedeće: korisnik npr. napravi neku pravopisnu grešku prilikom unosa imena i prezimena i kasnije to skuži i želi je ispraviti. Znači moram u svom C# programu dozvoliti izmjenu. Sve je ok ako ispravi tu greškicu, ali me zanima kako se onda osigurati da korisnik koji nista ne zna o bazama podataka izmijeni sve. Padne mu na pamet da bi bas super bilo da pod šifrom 3 ima nekog drugog i promijeni totalno i ime i prezime?!

Barem pola posla se odnosi na ograničavanje korisnika što može napraviti (gluposti). Možeš napraviti nekoliko levela za korištenje programa tipa; korisnik, editor, supervisor,.. I svakom dati prava koja želiš, odnosno što pojednini profil može raditi - mijenjati. Dakle za radnje diskutabilnog karaktera jednostavno ne daš npr. korisniku mogućnost. Čisto teorijski, što se tiče konkretnog slučaja ti ionako pratiš samo šifru, a da li će pod tom šifrom biti Pero Perić ili Đuro Đurić, tebi je ionako svejedno..

 

17 godina
offline
Problem s dizajnom baze-hitno!

U najjednostavnijem slucaju, mozes radnika pratiti po OIB-u. Bar je to jedisntveno :)

I am creationist. I believe man created god.
 
1 0 hvala 0
16 godina
odjavljen
offline
Re: Problem s dizajnom baze-hitno!
tnakir kaže...

U najjednostavnijem slucaju, mozes radnika pratiti po OIB-u. Bar je to jedisntveno :)

Naravno, može se dogoditi i da se OIB krivo unese (iako ne vjerujem da bi to moglo ostati neprimjećeno do prvog obračuna plaće). Po meni, ne bi bilo dobro dopustiti korisniku da mijenja više podataka od jednom. OK, adresu i grad može, ali ime, prezime, datum rođenja i OIB isključivo samo jedan podatak, uz prikaz upozorenja.

Big wheel keep on turning, Proud Mary keep on burning, Trolling, trolling, trolling on the river.
17 godina
offline
Re: Problem s dizajnom baze-hitno!
MrBlc kaže...
tnakir kaže...

U najjednostavnijem slucaju, mozes radnika pratiti po OIB-u. Bar je to jedisntveno :)

Naravno, može se dogoditi i da se OIB krivo unese (iako ne vjerujem da bi to moglo ostati neprimjećeno do prvog obračuna plaće). Po meni, ne bi bilo dobro dopustiti korisniku da mijenja više podataka od jednom. OK, adresu i grad može, ali ime, prezime, datum rođenja i OIB isključivo samo jedan podatak, uz prikaz upozorenja.

Kao sto rekoh, gore sam mu dao rijesenje koje pamti sve promjene. Elegantno, jednostavno, optimizirano i normalizirano. Pa nek korisnik mijenja sto hoce. Lako napravit revert na neku staru verziju.

I am creationist. I believe man created god.
Poruka je uređivana zadnji put pet 7.10.2011 0:36 (tnakir).
16 godina
odjavljen
offline
Re: Problem s dizajnom baze-hitno!

Kako provjeriti jel OIB ispravan - link.

A rifle is like a human. The stock is the skeleton, the scope is the eyes, the action is the brain, and the barrel is the heart. But you, the man behind the rifle, you are the soul.
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice