Forum » Programiranje » Baze ter relation med njimi
Baze ter relation med njimi
Davidoff ::
Imam en problem in sicer bom kar napisal kaj bi rad. Imam bazo v Accesu in v bazi več tabel. Tabele so artikel, dobavitelj, stranke, idt...v aplikaciji bi rad od stranke pobral naročilo. Ko vnašam naročilo imam objekte naseljene z vrednostmi že prej vnesenimi, ki jih črpam iz same baze. Kako naj sedaj izvedem insert statement, da mi bo v oknu "naročilo" shranilo vse artikle, ki jih je stranka naročila tudi pod strankin ID? Količino, opombe itd., pa imam samo v oknu naročilo...če me sploh kdo razume kaj bi ad bi proil za pomoč.
Pivo Laško vsak dan eno flaško!
Marat ::
Zakaj pa imaš atribut barva_tiska v tabeli naročilo? Je to ista barva kot v tabeli artikel? Kaj sploh je artikel?
Malo zmedeno imaš narejeno zadevo, npr tabele seznam_artiklov sploh ne rabiš. Tabele se poimenuje v ednini (razmišljaj objektno). Ti rabiš tabele Artikel, Dobavitelj, Stranka in Naročilo. V prvih treh tabelah imaš dejansko seznam vseh teh objektov in jih povežeš s tabelo Naročilo, v kateri imaš tuje ključe vseh ter dodatne atribute.
Probaj še enkrat naredit model baze, ampak najprej čisto preprost ER diagram (ne še prave baze delat). Ko boš naredu nalepi sem, pa bomo pogledal če je ok.
Malo zmedeno imaš narejeno zadevo, npr tabele seznam_artiklov sploh ne rabiš. Tabele se poimenuje v ednini (razmišljaj objektno). Ti rabiš tabele Artikel, Dobavitelj, Stranka in Naročilo. V prvih treh tabelah imaš dejansko seznam vseh teh objektov in jih povežeš s tabelo Naročilo, v kateri imaš tuje ključe vseh ter dodatne atribute.
Probaj še enkrat naredit model baze, ampak najprej čisto preprost ER diagram (ne še prave baze delat). Ko boš naredu nalepi sem, pa bomo pogledal če je ok.
petzup ::
Da ne odpiram nove teme bom kar tu napisal in sicer imam problem ki mi ga ne rata rešit in sicer. Imam dve tabeli uporabnik in datoteke, datoteke imajo (id, naslov, avtor) uporabnik (id, up_ime , drzava) rad bi dobil z tega drzavo uporabnika ki je dodal neko x datoteko, sicer mi rata rešit tako:
ampak vem da je neka JOIN fora kjer se dve tabeli združita, plus tega je baza bolje optimizirana, tako da če se komu točno sanja kako bi bil hvaležen!
$datotekaId = sqlite_fetch_array(sqlite_query($poizvedba,"SELECT * FROM datoteke WHERE id = '$id'")); $uporabnikId = sqlite_fetch_array(sqlite_query($poizvedba,"SELECT * FROM uporabnik WHERE id='".$datotekaId['avtor']."'"));
ampak vem da je neka JOIN fora kjer se dve tabeli združita, plus tega je baza bolje optimizirana, tako da če se komu točno sanja kako bi bil hvaležen!
Marat ::
Da ne odpiram nove teme bom kar tu napisal in sicer imam problem ki mi ga ne rata rešit in sicer. Imam dve tabeli uporabnik in datoteke, datoteke imajo (id, naslov, avtor) uporabnik (id, up_ime , drzava) rad bi dobil z tega drzavo uporabnika ki je dodal neko x datoteko, sicer mi rata rešit tako:
$datotekaId = sqlite_fetch_array(sqlite_query($poizvedba,"SELECT * FROM datoteke WHERE id = '$id'"));
$uporabnikId = sqlite_fetch_array(sqlite_query($poizvedba,"SELECT * FROM uporabnik WHERE id='".$datotekaId['avtor']."'"));
ampak vem da je neka JOIN fora kjer se dve tabeli združita, plus tega je baza bolje optimizirana, tako da če se komu točno sanja kako bi bil hvaležen!
Atribut "avtor" v tabeli Datoteka je tuji ključ (foreign key), povezan z ID-jem v tabeli Uporabnik. To povezavo moraš naredit. Vidim da imaš SQLite, poglej si tu: http://www.sqlite.org/foreignkeys.html
petzup ::
Mi je ratalo, sem dal '' pri d.avtor pa mi sploh zadeva ni delala, tako da sem rešil,
SELECT u.drzava FROM datoteke d JOIN uporabnik u ON d.avtor = u.id WHERE d.id = '$id'
Davidoff ::
Zakaj pa imaš atribut barva_tiska v tabeli naročilo? Je to ista barva kot v tabeli artikel? Kaj sploh je artikel?
Malo zmedeno imaš narejeno zadevo, npr tabele seznam_artiklov sploh ne rabiš. Tabele se poimenuje v ednini (razmišljaj objektno). Ti rabiš tabele Artikel, Dobavitelj, Stranka in Naročilo. V prvih treh tabelah imaš dejansko seznam vseh teh objektov in jih povežeš s tabelo Naročilo, v kateri imaš tuje ključe vseh ter dodatne atribute.
Probaj še enkrat naredit model baze, ampak najprej čisto preprost ER diagram (ne še prave baze delat). Ko boš naredu nalepi sem, pa bomo pogledal če je ok.
Malo je pisano ja =). Bom upošteval tvoja navodila.
Barva tiska...ja v naročilu, ki ga poda stranka izberem za vsak artikel (npr. kemik) še zraven barvo tiska, ki pride na sam kemik.
Tabela seznam_artiklov, v njej pa shranjujem tip artiklov, se pravi kemik, vžigalnik, itd. Zadevo shranjujem programsko, zato sem naredil novo tabelo. A bi to bilo boljše če bi raje z to vrednostjo imel stolpec v Artiklu?
Pa še barva v kateri je artikel - v tej tabeli imam barve artikla v katerih jih lahko naročim od dobavitelja.
Nekak si ne predstavljam, da če imam v Artiklu stolpec barva_artikla, potem imam v njem shranjene vse barve, ki sem jih dodal. Vsak artikel pa ni dobavljiv v vseh barvah, ki jih bom imel v tem stolpcu...hmmm.
Pivo Laško vsak dan eno flaško!
Zgodovina sprememb…
- spremenilo: Davidoff ()
Marat ::
Zakaj pa imaš atribut barva_tiska v tabeli naročilo? Je to ista barva kot v tabeli artikel? Kaj sploh je artikel?
Malo zmedeno imaš narejeno zadevo, npr tabele seznam_artiklov sploh ne rabiš. Tabele se poimenuje v ednini (razmišljaj objektno). Ti rabiš tabele Artikel, Dobavitelj, Stranka in Naročilo. V prvih treh tabelah imaš dejansko seznam vseh teh objektov in jih povežeš s tabelo Naročilo, v kateri imaš tuje ključe vseh ter dodatne atribute.
Probaj še enkrat naredit model baze, ampak najprej čisto preprost ER diagram (ne še prave baze delat). Ko boš naredu nalepi sem, pa bomo pogledal če je ok.
Malo je pisano ja =). Bom upošteval tvoja navodila.
Barva tiska...ja v naročilu, ki ga poda stranka izberem za vsak artikel (npr. kemik) še zraven barvo tiska, ki pride na sam kemik.
Tabela seznam_artiklov, v njej pa shranjujem tip artiklov, se pravi kemik, vžigalnik, itd. Zadevo shranjujem programsko, zato sem naredil novo tabelo. A bi to bilo boljše če bi raje z to vrednostjo imel stolpec v Artiklu?
Pa še barva v kateri je artikel - v tej tabeli imam barve artikla v katerih jih lahko naročim od dobavitelja.
Nekak si ne predstavljam, da če imam v Artiklu stolpec barva_artikla, potem imam v njem shranjene vse barve, ki sem jih dodal. Vsak artikel pa ni dobavljiv v vseh barvah, ki jih bom imel v tem stolpcu...hmmm.
Ključno pri tebi je, kako boš definiral pojem artikel. Ali je npr. vžigalnik rdeče barve isti artikel kot vžigalnik modre barve?
a) Če je isti, potem boš moral imeti še eno dodatno tabelo, kjer boš artiklu dodal še atribut barva. Primer: Tabela Artikel_z_barvo (ID#, artikel, barva). Pod atribut artikel boš dal ID artikla iz tabele Artikel. V tabeli naročilo pa boš pod atribut artikel dal ID iz tabele Artikel_z_barvo.
b) Če ni isti, potem imaš lahko vse v tabeli Artikel. Torej vžigalnik modre barve bo imel drugačen ID kot vžigalnik rdeče barve (bo defacto drug artikel).
Lahko narediš tudi kako drugače, ampak glej da bo smiselno. Naredi en načrt tabel in atributov in označi glavne (z lojtro in podčrtan) ter tuje ključe (samo z lojtro #). Primer:
DOBAVITELJ (ID#, NAZIV, NASLOV, TEL_ST)
Davidoff ::
Ok mi je zadeva že malce bolj jasna. Ampak vseeno, bom napisal kaj bi rad.
V oknu imam gumb dodaj. Na istem naročilu je lahko več artiklov, ki jih vnesem v tabelo Narocilo. Ker imam v tej tabeli tudi id_stranke in id_artikla mi nič čisto jasno, kako naj dobim v tabelo naročilo id_stranke in id_artikla ob pritisku gumba dodaj. Da bom ohranil povezavo med tabelami.
Problem je v tem, da tu moram preverjat id stranke in artikla z izbranim al kako?
V oknu imam gumb dodaj. Na istem naročilu je lahko več artiklov, ki jih vnesem v tabelo Narocilo. Ker imam v tej tabeli tudi id_stranke in id_artikla mi nič čisto jasno, kako naj dobim v tabelo naročilo id_stranke in id_artikla ob pritisku gumba dodaj. Da bom ohranil povezavo med tabelami.
Dim strSql = "INSERT INTO narocilo(kolicina,barva_tiska,opombe,datum_narocila,rok_izdelave,racun, artikel.id_artikla, stranka.id_stranke) VALUES(...)
Problem je v tem, da tu moram preverjat id stranke in artikla z izbranim al kako?
Pivo Laško vsak dan eno flaško!
Marat ::
Lahko narediš posebej več queryjev:
- najprej dobiš ID stranke iz tabele Stranka
- nato dobiš ID artikla iz tabele artikel
- na koncu vneseš naročilo v tabelo Naročilo, pri čemer uporabiš tudi prej pridobljena ID-ja (vmes si jih shraniš v lokalno variablo)
Ampak vseeno si vzemi cajt in dobro naredi bazo, ker če ne boš imel naprej same probleme.
- najprej dobiš ID stranke iz tabele Stranka
- nato dobiš ID artikla iz tabele artikel
- na koncu vneseš naročilo v tabelo Naročilo, pri čemer uporabiš tudi prej pridobljena ID-ja (vmes si jih shraniš v lokalno variablo)
Ampak vseeno si vzemi cajt in dobro naredi bazo, ker če ne boš imel naprej same probleme.
Zgodovina sprememb…
- spremenil: Marat ()
Davidoff ::
Lahko narediš posebej več queryjev:
- najprej dobiš ID stranke iz tabele Stranka
- nato dobiš ID artikla iz tabele artikel
- na koncu vneseš naročilo v tabelo Naročilo, pri čemer uporabiš tudi prej pridobljena ID-ja (vmes si jih shraniš v lokalno variablo)
Ampak vseeno si vzemi cajt in dobro naredi bazo, ker če ne boš imel naprej same probleme.
Hvala Marat!
Zadevo sem rešil kot si predlagal. Ker vidim, da si precej vešč v teh vodah bi še rabil eno zadnjo pomoč. No upam da zadnjo .
No zadeva je takšna, da ko je naročilo oddano, so v njem artikli in za vsak artikel v naročilu je podana tudi izvedba le-tega. Izvedba je v bistvu izvedba artikla, se pravi al je graviranje na kemik al sito tisk itd. Zadevo bi pa moral tako rešit, da bi ko aplikacijo odprl, se mi odprla neka tabela, strank in naprej izvedbe, se pravi nek semafor, za katereo stranko je katera izvedba končana in katera ne.Tako da bi za vsako izvedbo, vsake stranke imel kot nek checkbox oz. neko zastavico če je zadeva končana ali ne. A je kakšna ideja?
Pivo Laško vsak dan eno flaško!
Marat ::
Kolikor razumem rabiš v tabeli naročilo en atribut, ki ga imenuješ Izvedba. Naj bo to preprost bool(ean), torej samo true ali false.
Verjetno te zanima kako naredit query(je). Vsako naročilo ima tudi atribut ID stranke. Tako da pri vsakem naročilu najprej pogledaš kak je ID stranke ter kakšen je status izvedbe. Nato pa v tabeli stranka najdeš (prek ID-ja) njegovo ime in priimek. To so vsi podatki ki jih rabiš za grafični vmesnik.
Seveda ko pa obkljukaš checkbox pri izvedbi nekega naročila, pa narediš nov query, kjer pri tem naročilu spremeniš atribut izvedba iz false v true. Aja, pa ko boš delal tabelo naročilo, določi pri atributu izvedba privzeto vrednot false.
Verjetno te zanima kako naredit query(je). Vsako naročilo ima tudi atribut ID stranke. Tako da pri vsakem naročilu najprej pogledaš kak je ID stranke ter kakšen je status izvedbe. Nato pa v tabeli stranka najdeš (prek ID-ja) njegovo ime in priimek. To so vsi podatki ki jih rabiš za grafični vmesnik.
Seveda ko pa obkljukaš checkbox pri izvedbi nekega naročila, pa narediš nov query, kjer pri tem naročilu spremeniš atribut izvedba iz false v true. Aja, pa ko boš delal tabelo naročilo, določi pri atributu izvedba privzeto vrednot false.
Davidoff ::
Hmmm...rad bi da bi mi program pod en ID naročila dodal več artiklov. Vendar imam več INSERT ukazov v samem oknu, ki pa mi vsak doda nov ID. Kakšen namig kako se naj zadeve lotim, da bom pod en ID naročila imel več artiklov.
Pivo Laško vsak dan eno flaško!
keworkian ::
Dodaš nov stolpec ki je primary key in spremenis id_narocila v povezavo.
Obscenities in B-Flat
Marat ::
Hmmm...rad bi da bi mi program pod en ID naročila dodal več artiklov. Vendar imam več INSERT ukazov v samem oknu, ki pa mi vsak doda nov ID. Kakšen namig kako se naj zadeve lotim, da bom pod en ID naročila imel več artiklov.
Ti moraš res najprej razčistit kaj zate pomenijo različni pojmi: Artikel, Naročilo itd.
To moraš razčistit PREDEN greš programirat! Ker če ne, delaš eno samo zbrko. To, kar hočeš sedaj, je tipična M:N (many-to-many) povezava med tabelama Naročilo in Artikel. Torej eno naročilo lahko vsebuje enega ali več artiklov. En artikel pa je lahko v enem ali večih naročilih (lahko tudi še ne v nobenem). Torej rabiš vmesno tabelo Naročilo_Artiklov (lahko tudi drugače poimenuješ), v kateri bo glavni ključ sestavljen iz dveh tujih ključev (ID_NAROCILA in ID_ARTIKLA).
Zgodovina sprememb…
- spremenil: Marat ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [ACCESS] PomočOddelek: Programiranje | 1702 (1499) | Stewie |
» | SQL developerOddelek: Šola | 1580 (1158) | HotBurek |
» | PostgreSQL pomočOddelek: Programiranje | 2523 (2016) | Mato989 |
» | T-SQL FIRST / TOP / MAX...Oddelek: Programiranje | 1505 (1505) | frudi |
» | Funkcija v SQLOddelek: Programiranje | 1357 (1224) | destiny |