PC Ekspert Forum

PC Ekspert Forum (https://forum.pcekspert.com/index.php)
-   Web dizajn, programiranje i ostalo (https://forum.pcekspert.com/forumdisplay.php?f=39)
-   -   Baza podataka-povezivanje tablica (https://forum.pcekspert.com/showthread.php?t=230564)

skyman 11.03.2012. 19:26

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?

johnson 11.03.2012. 20:14

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

sinisa1989 11.03.2012. 20:25

Citiraj:

Autor johnson (Post 2120152)
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

U tom slučaju kad bi izvlačio nalog sa SELECT-om po šifri naloga dobio bi onoliko rezultata koliko je poslova bilo. Isto tako imao bi puno ponavljanja. To po meni nije najsretnije rješenje.
Ja bi išao na varijantu koju je sam autor predložio.

johnson 11.03.2012. 20:47

Citiraj:

Autor sinisa1989 (Post 2120161)
U tom slučaju kad bi izvlačio nalog sa SELECT-om po šifri naloga dobio bi onoliko rezultata koliko je poslova bilo. Isto tako imao bi puno ponavljanja. To po meni nije najsretnije rješenje.
Ja bi išao na varijantu koju je sam autor predložio.


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

burki 11.03.2012. 23:49

Citiraj:

Autor sinisa1989 (Post 2120161)
U tom slučaju kad bi izvlačio nalog sa SELECT-om po šifri naloga dobio bi onoliko rezultata koliko je poslova bilo. Isto tako imao bi puno ponavljanja. To po meni nije najsretnije rješenje.
Ja bi išao na varijantu koju je sam autor predložio.

Pozdrav, slažem se s kolegom johnsonom.
Da izbjegnete ponavljanje koristite SELECT DISTINCT...
:chears:

skyman 12.03.2012. 00:27

Citiraj:

Autor johnson (Post 2120152)
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

Hm, ali ovom metodom dodajem hrpu novih redova/naloga u tablicu i samim time povećavam veličinu baze više nego da imam 3. tablicu (koja ima dvije brojčane vrijednosti)...i ako će se koristit npr. access, ako netko otvori tablicu u office accessu to će izgledat jako nepregledno s hrpom zapisa...ipak izgleda da ću koristit i prvotnu opciju.

sinisa1989 12.03.2012. 08:55

Citiraj:

Autor burki (Post 2120344)
Pozdrav, slažem se s kolegom johnsonom.
Da izbjegnete ponavljanje koristite SELECT DISTINCT...
:chears:

Ja ne kažem da to rješenje neće funkcionirati, ali ja bi to napravio s dodatnom tablicom. :)
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.

johnson 12.03.2012. 09:55

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

doublev 13.03.2012. 09:25

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.

rodriguez 24.03.2012. 22:20

Može mi se javiti netko na PM tko zna programirati recimo bazu podataka u excelu?

skyman 24.03.2012. 23:54

Citiraj:

Autor rodriguez (Post 2129516)
Može mi se javiti netko na PM tko zna programirati recimo bazu podataka u excelu?

Access je bolji za tu nemjenu, općenito radi boljih opcija i po potrebi eksportanja...


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