[ mish_ns @ 19.10.2011. 19:23 ] @
Pozdrav svima. Interesuje me kako bi vi normalizovali sledecu bazu.
Inace vec smo malo diskutovali o ovome u mysql delu foruma.

Recimo imam bazu svoje firme. U njoj treba da se nalazi lager lista i papiri, kao fakture, ponude i sl...

Interesuje me kako bi isprojektovali bazu? Pri tome mislim da li imati jednu bazu za lager a jednu za papire, ili sve staviti u jednu bazu sa vise tabela?

Ja sam to zamislio kao sto je prikazano na slici.

Ideja je da se za neke komponente unosi stanje (npr sijalica,motor i sl), zatim na lageru bih imao vezu sa tabelom komponente da bih znao o kojoj komponenti se radi. Svaka od tih komponenti ima svoju šifru za neke podgrupe (npr. siajlica - philips 100w, sijalica - stedljiva 10w i sl.), zatim kolicinu i snagu ako postoji takav podatak. Tabela projekti sadrži nazive projekata na kojima je rađeno. tabela projektimaterijal sadži podatke kao što je šifra komponente koja je korišćena u izradi, količinu i ima vezu ka tabeli projekti. na taj način znam šta je sve iskorišćeno od materijala za određeni projekat. E sad kod faktura, imam pored datuma izdavanja fakture, relaciju sa tabelom prodato. U njoj se nalaze polja koja ukazuju na broj fakture (relfakID) veza sa tabelom sifre (relSifra) kako bih znao koja je komponenta prodata, kao i kolicina i cena komponente.

Sada me interesuje da li je ovaj primer dobar i da li je dobro normalizovana baza?

HVALA svima unapred.



[Ovu poruku je menjao mish_ns dana 19.10.2011. u 20:48 GMT+1]
[ MarkoBalkan @ 19.10.2011. 20:16 ] @
što se tiče : ponuda, faktura, narudžbi, primki i otpremnica, to držiš u dvije tabele.

recimo dokument_glava i dokument_stavke.

u jednoj i drugoj dodaj broj preko kojeg češ povezati glavu i stavke i u svaku dodaj određenu šifru za svaku vrstu.

dodaj još šifru partnera u glavu, a u stavke šifru proizvoda, količinu i cijenu.

stanje, izlaz i sve ostalo računaš pomoću funkcija.

lager izbaci, jer to računaš na funkciju za svaki proizvod.

što se tiče dijela za projekta, ne znam što sve ti treba.

treba ju ti još tablice kupci ili partneri, pa onda dobavljači itd....
[ mish_ns @ 19.10.2011. 20:39 ] @
Citat:
što se tiče : ponuda, faktura, narudžbi, primki i otpremnica, to držiš u dvije tabele.

Ovde se misli na dve tabele za svaki tip dokumenta? Znači faktura_glava i faktura_stavke?

Citat:
...u svaku dodaj određenu šifru za svaku vrstu.


Ovo nisam najbolje razumeo.

Citat:
stanje, izlaz i sve ostalo računaš pomoću funkcija.

lager izbaci, jer to računaš na funkciju za svaki proizvod.


Na koji način implementiram funkcije za ovaj deo?

Za projekte mi treba naziv projekta i materijal koji je utrošen na izradu tog projekta.

Ukoliko sam dobro razume bilo bi slično kao dijagram iz dodatka.
[ MarkoBalkan @ 19.10.2011. 20:54 ] @
vrsta gokumenta
primka - 150
ponuda -200
narudžba -250
otpremnica - 300
faktura -350

lupam bezveze brojeve, ali u biti samo da skužiš

dokument_glava( broj, vrsta dokumenta, kupac_id, datum, veza)
dokument_stavka(broj, vrsta_dokumenta, šifra_proizvoda,količina, cijena, rabat, datum)


broj ti kreće od 1 za svaku vrstu dokumenta.
također moraš povezati cijeli proces.
npr.
ako imaš ponudu 1 i iz ponude kreiraš narudžbu, kod narudžbe u vezu moraš upisati broj ponude ili u ponudi kod veze upisati broj narudžbe.

tako iz narudžbe kreiraš jednu ili više otpremnica, a iz otpremnica kreiraš jednu ili više faktura.

problem nastaje ako imaš više otpremnica , a to hočeš staviti na jedan račun.
ako u otpremnice staviš broj računa onda je ok, ali onda moraš voditi računa da sve tako staviš unatrag.

sve ovisi kako hočeš imati.
[ Zoran.Eremija @ 19.10.2011. 21:10 ] @
Evo jedan model upravljanja zalihama koji otprilike povezuje sve sto ste naveli. Moze da Vam posluzi za pocetak.
[ mish_ns @ 20.10.2011. 19:43 ] @
Pozdrav svim i hvala na odgovorima.

Sto se tice dokumenata. recimo imam tabelu vrsta_dok koja sadrži dva polja id_dok i naziv.

Zatim ima tabelu dokument_glava sa poljima id_glava,broj,veza_id_dok,veza_id_kupac,datum,veza_drugi_dok.

I tabela dokument_stavke sa poljima id_stavke,veza_broj,veza_id_proizvoda,kolicina,cena. (na slici)
Prikacio sam dijagram i primer, pa bih voleo da jos malo prodiskutujemo o tome, da li je ok ili ne...






[ MarkoBalkan @ 20.10.2011. 20:18 ] @
broj dokumenta ti treba i u stavkama, jer svaki od dokumenata može imati broj 1.

[ mish_ns @ 20.10.2011. 20:28 ] @
A to je po ovom mom veza_id_dok?

I na osnovu veza_id_dok i broj imam relaciju sa tabelom dokument_glava.
Odnosno iz word primera,ako imam podudaranje veza_id_dok i broj iz tabele dokument_glava i veza_id_dok i broj iz tabele dokument_stavke mogu da odredim koja vrsta dokumenta je u pitanju kao i koji proizvodi pripadaju tom dokumentu.
[ MarkoBalkan @ 20.10.2011. 20:34 ] @
sve ok, sory, ja gledao samo sliku.

jedino što bi ja još dodao jest redni broj stavke za svaki dokument.

znači svaki dokument ima određeni broj stavki, i onda za stavke staviš da ti za svaki dokument kreću od 1.

npr

račun :1 ima 10 stavki, imaš redne brojeve od 1 do 10.
otpremnica 1 ima 20 stavki, imaš redne brojeve od 1 do 20

itd...
[ mish_ns @ 20.10.2011. 20:38 ] @
ček samo, mislis nešto kao auto increment polje, ili da recimo račun 1 ima 10 stavki -> ima redne brojeve stavki od 1-10
pa za račun 2 ima 5 stavk->redni brojevi od 1-5 ili da nastavljam od 11-15?
[ MarkoBalkan @ 20.10.2011. 21:00 ] @
Citat:
mish_ns: da recimo račun 1 ima 10 stavki -> ima redne brojeve stavki od 1-10
pa za račun 2 ima 5 stavk->redni brojevi od 1-5 ili da nastavljam od 11-15?



na ovo sam mislio
[ dragancesu @ 22.10.2011. 18:05 ] @
Lager lista po 150-ti put

Lager lista se izvodi iz prometa. A za vezu tabela pogledati pod master-detail. Nista posebno.
[ mish_ns @ 01.02.2013. 08:13 ] @
pozdrav svima...
Evo opet oživljavam temu.
Lager listu i plaćanja sam uradio davno. Sve to radi ok.

Sada treba da se pozabavim fakturama, otpremnicama i sl.
pošto se prvi put susrećem sa ovom tematikom interesuje me na koji način se formira broj računa:
Recimo 1,2,3
ili 1/13, 2/13, 3/13 (gde je /13 godina izdavanja računa)
ili nešto treće?

Kako je u praksi najbolje uraditi?
[ captPicard @ 01.02.2013. 09:49 ] @
Broj računa formiraš kako god želiš ili kako ti klijent zahtijeva. Prvo moraš odlučiti da li želiš svaku poslovnu godinu voditi u posebnoj bazi ili želiš imati jedinstvenu bazu za sve godine. Također, broj računa u bazi i broj računa na ispisu nisu ista stvar, na ispisu možeš napisati štagod treba, neovisno o polju "broj" u bazi. Također ako ćeš imati više vrsta dokumenata moraš i to odlučiti kako želiš modelirati bazu. Da li jedna tablica sa oznakom vrste dokumenta ili svaka vrsta dokumenta posebno.

[ mish_ns @ 01.02.2013. 09:59 ] @
Ok. Želeo bih imati jednu bazu za sve godine...
Sada kada sam video poruku ideja mi je da u tablici vrsta_dokumenta imam polja
id_dok, simbol, naziv
recimo podaci mogu biti
100, P, ponuda
200, PR, predracun
300, R, racun
400, RO, racun otpremnica itd.

Tada bih na osnovu relacije sa id_dok na ispisu imao broj:
NPr P120001 gde mi p - označava vrstu dok, 12 - godinu, ostale četiri cifre broj ponude.

Nadam se da idem u dobrom pravcu?
[ captPicard @ 01.02.2013. 11:01 ] @
Tako je, krenuo si u dobrome smjeru. Formiraj tablice dokumenti i dokumenti stavke pa napiši ovdje kako si to napravio, pa ćemo dalje.
[ mish_ns @ 01.02.2013. 12:08 ] @
Pozdrav, hvala na odg.

Na slici sam prikazao kako sam ja to zamislio.

U tabeli vrsta_dokumenta bih iskoristio simbol (recimo za ponudu 'P', za racun 'R' prilikom ispisa odnosno štampe...)

dokument_glava mi sadrži polje rel_id_dok koje mi ukazuje na vrstu dokumenta (ponuda, porudzbina, racun, avansni racun itd.)

Takođe to polje mi se nalazi i u tabeli dokument_stavke kako bih mogao odrediti koja stavka pripada kom dokumentu.

polje broj mi predstavlja broj dokumenta i u kombinaciji sa simbolom i godinom bih davao ispis tj. broj ponude, racuna i sl. Npr. P120001,R120009...

polje rel_id_pl u tabeli dokument_glava, mi ukazuje na nacin placanja - virman, gotovina, kompenzacija i sl... (nisam siguran da je ovo najbolje rešenje)

Tabela veza_dokumenata mi ukazuje na povezanost nekih dokumenata
Npr. Ako mi je ponuda 5000 din. I sad izdam avansni racun 1000 din, taj avansni racun treba da veze za ponudu pod nekim brojem...

Da li je ovo u redu?

[ captPicard @ 01.02.2013. 12:18 ] @
Ne mogu sada pogledati dijagram, ali budem kasnije pa dam svoje mišljenje. Samo bi ti još savjetovao da uzmeš u obzir da ne mora biti samo jedan način plaćanja, tj. moguće je račun od npr. 1000E platiti ovako:

300E Novčanice
500E Kartica
200E Ček

tako da bi bilo dobro da to odmah u početku predvidiš da kasnije ne moraš raditi drastične izmjene na modelu baze podataka.
[ mish_ns @ 01.02.2013. 12:23 ] @
OK hvala...da li mi za to treba nova tabela ili mogu da iskoristim postojece sto se tice nacina placanja?
[ Zoran.Eremija @ 01.02.2013. 22:28 ] @
Ne znam da li ste pogledali model koji sam svojevremeno postavio u ovoj temi http://www.elitesecurity.org/t438846-0#2974414.
Sva pitanja koja ste do sada postavili taj model omogucava i daje pozitivan odgovor.
[ mish_ns @ 08.02.2013. 10:40 ] @
Hvala , Zorane.

Za sada mi se čini da ovi predlozi i sugestije piju vode.

Naime, sada imam pitanje vezano za upis podataka u tabele glava i stavke.

Interesuje me kako je najpogodnije uraditi insert podataka u tabele.

Meni pada na pamet neka procedura gde se insert vrši u okviru transakcije.

Međutim kako to uraditi kada recimo na jednoj ponudi ću imati 5 stavki a na nekoj drugoj 50?
Kako proslediti podatke proceduri?
[ Zoran.Eremija @ 10.02.2013. 23:11 ] @
Citat:
mish_ns: Interesuje me kako je najpogodnije uraditi insert podataka u tabele?


Najbolji odgovor na ovo pitanje mozete dobiti tek kada se odlucite kojim alatom cete pristupati bazi. Znamo da ih ima vise a i iz Vaseg profila se vidi da ih poznajete. Koji je najbolji? Pa kazu najbolji je onaj koji najbolje poznajete.
[ mish_ns @ 11.02.2013. 08:08 ] @
Hvala, Zorane. U sustini je tako.
Najbolje poznajem VB.net, međutim čini mi se da je ovo više pitanje vezano za sigurnost upisa podataka u bazu.
Tačnije, razmišljao sam u pravcu da sve uradim u okviru mysql transakcije, mada je moguće koristiti i vb.net transakcije.
Pa me zbog toga interesuje gore navedeno...
[ Zoran.Eremija @ 11.02.2013. 08:25 ] @
Citat:
mish_ns: Tačnije, razmišljao sam u pravcu da sve uradim u okviru mysql transakcije, mada je moguće koristiti i vb.net transakcije.
Pa me zbog toga interesuje gore navedeno...


Moje je misljenje da sigurnost upisa podataka u bazu treba prepustiti samom RDBMS-u koliko god je to moguce. Upravo je jedan od kvalitativnih faktora odabira RDBMS ovo Vase pitanje.
[ mish_ns @ 11.02.2013. 10:25 ] @
OK i ja sam vise za to, ali kako uraditi insert podataka u slucaju kada je broj ulaznih parametara promenljiv.
Recimo da u jednom momentu moram uneti 10 stavki, a u drugom slucaju 25.

Jasna mi je struktura insert-a za vise vrsta odjednom.
INSERT INTO tabela VALUES(123,'wjrkwr'),(456,'sakjghdkja');

Međutim, ja popunjavam datagridview sa podacima. Sada te podatke prilikom klika na neko dugme treba upisati u bazu.
Nekad ću imati onih 10 a nekad 25 vrsta. E tu meni nastaje problem.

U okviru for petlje bih onda mogao pozivati
insert.
INSERT INTO tabela VALUES (var1,var2);
ali onda mogu jedino koristiti vb.net transakcije.