|
![]() |
#1 |
Premium
Datum registracije: Aug 2008
Lokacija: ZG
Postovi: 775
|
Baza podataka-povezivanje tablica
Imam jedno pitanje...imam npr. ovakav primjer...dvije tablice: Nalog [SifraNaloga, Datum, Iznos,SifraPosla] Posao [SifraPosla, OpisPosla, Iznos] Tablica posao naravno sadrži sve poslove koje pruža npr. tvrtka skupa s opisom posla i odgovarajućom cijenom, znači jednostavne dvije tablice, e sad ovo usper funkcionira u slučaju da svaki radni nalog ima samo jedan posao...i tablice su povezane pomoću atributa SifraPosao iz obje tablice, npr. kreiranjem novog radnog naloga: INSERT INTO Nalog VALUES (12,12.1.2012,336,4); i kasnije naravno dohvaćam nalog i posao koji je obavljen na tom nalogu pomoću upita... SELECT SifraNalog.Nalog, Iznos.Nalog, OpisPosla.Posao FROM Nalog, Posao WHERE SifraPosla.Nalog= SifraPosla.Posao AND SifraNaloga.Nalog=12; Ali šta ako svaki nalog ima više poslova, ne samo jedan kao u gore navedenom slučaju, kako onda to obaviti? Jedina ideja mi je bila kreirat još jednu dodatnu tablicu koja će upisivat SifraNaloga i SifraPosla pri svakom kreiranju naloga, znači ako ima 3 posla dodavat će se 3 zapisa u tu tablicu...npr: Poslovi[SifraPosla,SifraNaloga] I onda tako povezat te tri tablice...jel ima neko elegantnije riješenje? Zadnje izmijenjeno od: skyman. 11.03.2012. u 19:31. |
![]() |
![]() |
![]() |
#2 |
Registered User
Datum registracije: Oct 2011
Lokacija: istra
Postovi: 25
|
netreba komplicirati s dodatnom tablicom, jabi stavio kao PK nad Nalog ( SifNaloga, SifPosla) tako bi mogao upisivat pod isti nalog više poslova, npr: INSERT INTO Nalog VALUES (12,12.1.2012,336,4); INSERT INTO Nalog VALUES (12,12.1.2012,336,5); INSERT INTO Nalog VALUES (12,12.1.2012,336,6); itd... za listanje i dalje pretražuješ po šifri naloga... i tjt, barem ako sam ja dobro skužio alias u selectu nebi bila loša ideja ![]() |
![]() |
![]() |
|
|
Oglas
|
|
![]() |
#3 | |
Bazinga
Datum registracije: Nov 2007
Lokacija: Križevci
Postovi: 3,927
|
Citiraj:
Ja bi išao na varijantu koju je sam autor predložio.
__________________
The best place to hide a dead body is page 2 of Google search results. |
|
![]() |
![]() |
![]() |
#4 | |
Registered User
Datum registracije: Oct 2011
Lokacija: istra
Postovi: 25
|
Citiraj:
pa šta nije to bila i zamisao... da za jedan nalog ima više poslova (stavki), npr. za nalog 12 izvršeno je 4 posla, kod selecta vidit će 4 sloga, tj. sve poslove pod tim nalogom na kakva ponavljanja misliš? - to su sve jedinstvene vrijednosti što bi točno dobio kad bi vrijednosti koje ima već zapisane u tablici nalog prebacivao u neku 3 tablicu? -- moguće da ja nisam sve skužio kako treba |
|
![]() |
![]() |
![]() |
#5 | |
Umalo Premium
Datum registracije: Jan 2009
Lokacija: localhost
Postovi: 61
|
Citiraj:
Da izbjegnete ponavljanje koristite SELECT DISTINCT... ![]() |
|
![]() |
![]() |
![]() |
#6 | |
Premium
Datum registracije: Aug 2008
Lokacija: ZG
Postovi: 775
|
Citiraj:
|
|
![]() |
![]() |
![]() |
#7 | |
Bazinga
Datum registracije: Nov 2007
Lokacija: Križevci
Postovi: 3,927
|
Citiraj:
![]() Lako za ponavljanje, ali će mu se nepotrebno gomilati podaci u toj tablici. Npr. da svaki nalog ima po 5 poslova. @ johnson Ne bi se ništa promijenilo, ja sam se malo krivo izrazio. Uglavnom skyman ti je odgovorio ono što sam ja mislio.
__________________
The best place to hide a dead body is page 2 of Google search results. Zadnje izmijenjeno od: sinisa1989. 12.03.2012. u 09:02. |
|
![]() |
![]() |
![]() |
#8 |
Registered User
Datum registracije: Oct 2011
Lokacija: istra
Postovi: 25
|
Ma sve 5 napravi kako mislis daje jednostavnije...nego samo nesto npr. jedan nalog ima 4 posla i nakon unosa kako bi izgledali tablice nalozi i poslovi,,tj. zapisi u tab....i dali difra naloga pocne u nekim periodima ispocetka |
![]() |
![]() |
![]() |
#9 |
the letter
Datum registracije: Sep 2005
Lokacija: 127.0.0.1
Postovi: 794
|
Rješavati loš design sa SELECT DISTINCT je nešto najgluplje što možeš napraviti. SELECT DISTINCT ima svojih koristi. Ovo nije jedna od njih. Ako je tablica Posao šifarnik tj. katalog poslova, onda je riješenje sa još jednom tablicom. Nju nazoveš StavkeNaloga. Tako se to radi. Točka. Jedno pitanje: Kako ćeš u ovom slučaju handleati promjenu cijene? Ispravno bi bilo dodati novu stavku u tablicu Posao jer bi inače promjenom stavke izmijenio sve povezane naloge. Drugo riješenje je da u tablicu StavkeNaloga dodaš cijenu a tu kolonu izbaciš iz tablice Posao. Ako Posao nije šifarnik već se u nju dodaje linija svaki puta kada se neki posao obavi tj. kada se radi novi nalog, onda treba obrnuti uloge. Nalog je master tablica, Posao detail i u nju dodaš kolonu SifraNaloga a iz Naloga izbacis SifraPosla.
__________________
Exception up = new Exception("Illegal operation."); throw up; |
![]() |
![]() |
![]() |
#10 |
....
Datum registracije: Nov 2009
Lokacija: Hrvatska
Postovi: 2,054
|
Može mi se javiti netko na PM tko zna programirati recimo bazu podataka u excelu? |
![]() |
![]() |
|
|
Oglas
|
|
![]() |
#11 |
Premium
Datum registracije: Aug 2008
Lokacija: ZG
Postovi: 775
|
|
![]() |
![]() |
|
|
Oglas
|
|
![]() |
|
|