SQLite dynamické vytváření tabulek – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

SQLite dynamické vytváření tabulek – Java – Fórum – Programujte.comSQLite dynamické vytváření tabulek – Java – Fórum – Programujte.com

 

libor
~ Anonymní uživatel
91 příspěvků
17. 4. 2014   #1
-
0
-

Potřeboval bych pomoci s návrhem databáze v Androidu. Moje databáze má dvě základní části: seznam poskytovaných produktů(coal, pivo, chipsy). A pak tabulka s zákazníkem, kde by byly všechny jeho objednávky. počet tabulek se zákazníky se bude pohybovat okolo 40. Jenže jak jsem tak Zjistil tak v SQLite nejde dynamicky vytvářet tabulky. Jak tento problém vyřešit? 

Nahlásit jako SPAM
IP: 194.12.42.–
miHan0
Návštěvník
17. 4. 2014   #2
-
0
-

Ahoj,

popavdě jsem úplně nepochopil tvůj databázový návrh, respektive ak jak jsem ho pochopil ho máš špatně. Ty chceš pro každého zákazníka přidávat tabulku?

Nahlásit jako SPAM
IP: 46.13.193.–
Kit+15
Guru
17. 4. 2014   #3
-
+1
-
Zajímavé

#1 libor
SQLite umí dynamicky přidávat tabulky, ale obvykle se dynamicky dělají jen dočasné tabulky, které se po ukončení práce samy zlikvidují.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
libor
~ Anonymní uživatel
91 příspěvků
17. 4. 2014   #4
-
0
-

Úplně jednoduše, takže když budu chtít přidat zákazníka s objednávkami, tak pro něj vytvořím zcela novou databázi nikoli tabulku? 

Nahlásit jako SPAM
IP: 194.12.42.–
miHan0
Návštěvník
17. 4. 2014   #5
-
0
-

#4 libor
Ne, pro zákazníka vytvoříš záznam v tabulce zákazníků a v tabulce objednávky vytvoříš záznamy, které budou na tohoto zákazníka navázané.

Nahlásit jako SPAM
IP: 62.204.249.–
libor
~ Anonymní uživatel
91 příspěvků
17. 4. 2014   #6
-
0
-

Ale když každá objednávka bude diametrálně odlišná, čili nebude se dát navázat na nějakou obecnou tabulku, tak v tom případě mi nezbývá než vytvořit další databázi, která se přizpůsobí dané objednávce? Pouze kdyby každá objednávka měl přesně dané parametry tak by se dal využít tebou popsaný vzorec. Díky za pomoc ;). Doufám, že takto to je správně? 

Nahlásit jako SPAM
IP: 194.12.42.–
miHan0
Návštěvník
17. 4. 2014   #7
-
0
-

#6 libor
Můžeš nějako blíže specifikovat objednávku? Bavíme se tady poměrně abstraktně a popravdě si moc nedokážu představit ty odlišnosti když kloudně nevím co od toho očekáváš :).

Nahlásit jako SPAM
IP: 62.204.249.–
libor
~ Anonymní uživatel
91 příspěvků
17. 4. 2014   #8
-
0
-

Dělám aplikaci na zaznamenávání objednávek do penzionu. Aplikace by měla vypadat následovně. Seznam ubytovaných hostů, kliknu na hosta, otevře se mi nabídka pokrmů, nápojů plus tam bude tlačítko na přidání mimořádné objednávky. Mimořádná objednávka je něco co není předem specifikováno Př: narozeninový dort. Já nechci tuto mimořádnou věc přidat do celkové nabídky, ale pouze do jedné objednávky. Z toho vyplývá, že nemohu použít nějakou jednotnou tabulku pro všechny zákazníky.

Nahlásit jako SPAM
IP: 194.12.42.–
miHan0
Návštěvník
17. 4. 2014   #9
-
0
-

V tom případě je řešení jednoduché. Tvoje databáze bude obsahovat minimálně 3 tabulky. Tabulku se zákazníky (adresář) tabulku s objednávkami, kde bude objednávka navázána na položku adresáře a tabulku "mimořádných objednávek" kde bude vazba na objednávky. Vztahy si doděláš sám...

Nahlásit jako SPAM
IP: 62.204.249.–
Flowy0
Věrný člen
18. 4. 2014   #10
-
0
-

je lepsi sposob ako v sqlite naviazat na jeden riadok viac zaznamov ako ukladat si id tych zaznamov do textu a potom parsovat?

Nahlásit jako SPAM
IP: 95.103.186.–
https://github.com/Flowy
Kit+15
Guru
18. 4. 2014   #11
-
0
-

#10 Flowy
Samozřejmě. Použiješ relaci 1:N. Cizí klíče do textu nepatří.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
miHan0
Návštěvník
18. 4. 2014   #12
-
+1
-
Zajímavé
Kit +

#10 Flowy
Ahoj, parsovat text je nesmysl. To co popisuješ (jestli jsem to správně pochopil) je vazba M:N. Ta se realizuje prostředníkem, tj. tabulka která obsahuje odkazy na primární klice z obou provázaných tabulek.

Připojen obrázek.

Nahlásit jako SPAM
IP: 62.204.249.–
libor
~ Anonymní uživatel
91 příspěvků
18. 4. 2014   #13
-
0
-

Udělám to takto, sice budu muset vymyslet něco na vytváření ID, ale to nevadí, alespoň se naučím něco nového.

Připojen obrázek.

Nahlásit jako SPAM
IP: 194.12.42.–
miHan0
Návštěvník
18. 4. 2014   #14
-
0
-

#13 libor
Jako ID se téměř vždy používá celé číslo, SQLite umí "autoincrement", čili nemusíš nic na vymýšlení ID řešit. Naopak bych tě od nějakého vymýšlení chtěl odradit, protože je to zbytečné a myslím si že ti to jen přidělá práci. To co máš v tabulkách jako ID bych spíše označil jako KOD, každopádně primární klíče bych nechal na těch IDčkách...

Nahlásit jako SPAM
IP: 62.204.249.–
Kit+15
Guru
18. 4. 2014   #15
-
+1
-
Zajímavé

#13 libor
To vůbec není dobrý nápad. Druhá a třetí tabulka se dá sloučit do jedné. Stabilní nabídka může mít příznak, podle kterého se bude objevovat v menu. Doplňková nabídka ten příznak mít nebude.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
libor
~ Anonymní uživatel
91 příspěvků
18. 4. 2014   #16
-
0
-

#15 Kit
To není vůbec špatný nápad založit v nabídce další sloupec, kde bude 0 nebo 1 bude určovat zobrazení v celkové nabídce. Díky moc všem teď to už snad dám do kupy.   

Nahlásit jako SPAM
IP: 194.12.42.–
Kit+15
Guru
18. 4. 2014   #17
-
0
-

#16 libor
Místo prosté 0 nebo 1 můžeš udělat kategorie.

Škoda, že SQLite neumí ENUM. Mohl bys mít polévky, hovězí, vepřové, nealko, pivo a ... různé, které by obsluha mohla doplňovat a které by se v jídeláku netiskly. Dá se to však udělat přes další tabulku a cizí klíče.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
libor
~ Anonymní uživatel
91 příspěvků
18. 4. 2014   #18
-
0
-

Já se zatím musím držet při zemi s SQLite jsem začal před týdnem :DD. Učím se tak nějak sám, moc knížek na Android není a v Angličtině se odborná literatura čte blbě, takže vše, co umím, mám z Stackoverflow nebo z YT. 

Nahlásit jako SPAM
IP: 194.12.42.–
Kit+15
Guru
18. 4. 2014   #19
-
+1
-
Zajímavé
Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
libor
~ Anonymní uživatel
91 příspěvků
18. 4. 2014   #20
-
0
-

"autoincrement" přidělí řádku číslo a to už se pak nikdy nezmění, i kdy bych vymazal řádek uprostřed tabulky?

Nahlásit jako SPAM
IP: 194.12.42.–
Kit+15
Guru
18. 4. 2014   #21
-
0
-

#20 libor
Číslo řádku se nikdy nemění. Dokonce i když smažeš poslední řádek a vytvoříš nový, dostane nové id. Mezi řádky se běžně nachází díry, které ničemu nevadí.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Flowy0
Věrný člen
18. 4. 2014   #22
-
0
-

#11 Kit
#12 miHan

CREATE TABLE Intermediary
  (
    Table_1_ID NUMBER NOT NULL ,
    Table_2_ID NUMBER NOT NULL
  ) ;
ALTER TABLE Intermediary ADD CONSTRAINT Intermediary_PK PRIMARY KEY ( Table_1_ID, Table_2_ID ) ;

CREATE TABLE Table_1
  ( ID NUMBER NOT NULL
  ) ;
ALTER TABLE Table_1 ADD CONSTRAINT Table_1_PK PRIMARY KEY ( ID ) ;

CREATE TABLE Table_2
  ( ID NUMBER NOT NULL
  ) ;
ALTER TABLE Table_2 ADD CONSTRAINT Table_2_PK PRIMARY KEY ( ID ) ;

ALTER TABLE Intermediary ADD CONSTRAINT Intermediary_Table_1_FK FOREIGN KEY ( Table_1_ID ) REFERENCES Table_1 ( ID ) ;

ALTER TABLE Intermediary ADD CONSTRAINT Intermediary_Table_2_FK FOREIGN KEY ( Table_2_ID ) REFERENCES Table_2 ( ID ) ;

dik ... pri pisani som si to uvedomil

trik je v tom ze relacia neni ukladana pre table1 ale pre intermediary a toto odkazuje na table1 row ktory potrebuje ... samozrejme v intermediary moze byt viac riadkov odkazujucich na ten isty row v table1... 

dneska ma taketo riesenie uz napadlo ale ako programatorovy v OOP sa mi to zdalo ako nevhodne riesenie (v prvom rade by table1 mala vediet o svojich vlastnostiach a nie aby bolo nutne prehladavat vsetky vlastnosti ci nahodou niesu priradene pre danu row v table1) ... ale pri selecte v sql je to vlastne jedno

nad vztahmi som rozmyslal uz predtym ale ked som robil len dizajn tak som nerozmyslal nad implementaciou az tak do hlbky

umoznuje vlastne sqlite viacclenne primary key (myslim ze sa volaju zlucene)?

Nahlásit jako SPAM
IP: 95.103.186.–
https://github.com/Flowy
libor
~ Anonymní uživatel
91 příspěvků
21. 4. 2014   #23
-
0
-

Při programování mě napadal myšlenka, je dobré používat ID? kdybych používal rovnou jména, ušetřilo by mě to spoustu práce?

Nahlásit jako SPAM
IP: 194.12.42.–
Kit+15
Guru
21. 4. 2014   #24
-
0
-

#23 libor
V případě SQLite tam to id stejně je, i když ho nebudeš deklarovat. Jakou práci by sis chtěl ušetřit?

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
libor
~ Anonymní uživatel
91 příspěvků
21. 4. 2014   #25
-
0
-

Já mám List View, kde jsou zobrazeny názvy hostů, když potřebuji něco o hostovi, tak ho hledám pomocí jména nikoli ID, protože je to jednodušší. Stačí z ListView vzít jméno a prohledat databázi.   

Nahlásit jako SPAM
IP: 194.12.42.–
Kit+15
Guru
21. 4. 2014   #26
-
0
-

#25 libor
To se nevylučuje. Číselné ID zpravidla potřebuješ při vázání tabulek. Kdybys tam měl jména, bylo by to problematické. A kdybys měl dvě stejná jména, tak bys je neměl jak rozlišit, protože primární klíč musí být jedinečný.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Flowy0
Věrný člen
21. 4. 2014   #27
-
0
-

#26 Kit

v com by to bolo problematicke? je absolutne jedno akym sposobom je zadany primarny kluc kym splnuje vlastnosti primarneho kluca (je unikatny v tabulke, je zadany pri vytvarani riadku)

#23 libor
hladat podla mena alebo podla id je uplne to iste ... pri hladani pouzijes SELECT * FROM table WHERE meno=? ... to ci pouzijes ako primarny kluc id alebo meno nehra rolu ... jedine ak pouzijes ako primarny kluc id tak je moznost ze meno sa bude opakovat a teda sa ti vrati viac zaznamov ... ak je moznost vylucit pouzitie ID tak to sprav (3NF) ... dovody preco vytvorit id su kebyze nemas istotu ze kazde meno bude unikatne (samozrejme v tomto pripade ju nemas ale bavime sa teoreticky) alebo by tiez nebolo prijemne ak sa nahodou primarny kluc moze menit v case (neni to vylucene ale malo by sa to stat len vynimocne)

Nahlásit jako SPAM
IP: 95.103.186.–
https://github.com/Flowy
Kit+15
Guru
21. 4. 2014   #28
-
0
-

#27 Flowy
Ano, v SQLite se dá definovat složený primární klíč. Užij si to při vytváření cizích klíčů.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 23 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý