![]() |
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? |
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 :D |
Citiraj:
Ja bi išao na varijantu koju je sam autor predložio. |
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 |
Citiraj:
Da izbjegnete ponavljanje koristite SELECT DISTINCT... :chears: |
Citiraj:
|
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. |
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
|
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. |
Može mi se javiti netko na PM tko zna programirati recimo bazu podataka u excelu?
|
Citiraj:
|
Sva vremena su GMT +2. Sada je 04:43. |
Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 1999-2024 PC Ekspert - Sva prava pridržana ISSN 1334-2940
Ad Management by RedTyger