Autor | Zpráva | ||
---|---|---|---|
Medvídek Profil |
#1 · Zasláno: 1. 10. 2011, 17:45:35 · Upravil/a: Medvídek
Ahoj, rošku sem se zasek při návrhu db, jakej použít datový typ pro sloupec, kam se budou zapisovat id produktu, ktery do dane kategorie spadaji.
Dejme tomu mam DB, kde jsou tabulky: kategorie id nazev jidlo id nazev suroviny cena gramaz kategorie suroviny id nazev a každé jídlo by mělo neomezené možnosti při výběru surovin. Čili v tabulce jidlo by sloupec suroviny obsahoval třeba (1, 5, 8, 52, 60) Ale tady asi narazim, při JOINování tabulek a výběr surovin, protože pochybuju, že by šlo něco jako udělat: SELECT kategorie.nazev, jidlo.nazev, suroviny.nazev FROM jidlo LEFT JOIN kategorie ON jidlo.kategorie = kategorie.id LEFT JOIN suroviny ON suroviny.id IN (jidlo.suroviny) WHERE jidlo.id = 5 Napadá mě další tabulka kde bych spojil na každý řádek jídlo a surovinu. Co bude lepší, čistější řešení, méně náročné atd? |
||
joe Profil |
#2 · Zasláno: 1. 10. 2011, 17:47:59 · Upravil/a: joe
Ne, místo sloupce suroviny v tabulce jidlo si udelej tabulku suroviny, kde jako sloupce budou
jidlo_id, surovina_id, ... (jinak řečeno, vazba M:N) |
||
Medvídek Profil |
#3 · Zasláno: 1. 10. 2011, 17:59:04 · Upravil/a: Medvídek
joe:
Takže takto: kategorie id nazev produkty id nazev cena gramaz kategorie suroviny id nazev spojeni id id_produktu id_suroviny (id_jidla id_suroviny budou spojeny do UNIQUE) A SQL vypadá takto: SELECT kategorie.nazev AS nazevKategorie, produkty.nazev AS nazevProduktu, suroviny.nazev AS nazevSuroviny FROM produkty LEFT JOIN kategorie ON produkty.kategorie = kategorie.id LEFT JOIN suroviny ON suroviny.id IN (SELECT id FROM spojeni WHERE id_produktu = produkty.id) WHERE produkty.id = 1 |
||
Kajman_ Profil * |
#4 · Zasláno: 2. 10. 2011, 18:06:44
V tabulce spojeni je id k ničemu. Dejte si primární klíč na kombinaci id_produktu, id_jidla.
|
||
Medvídek Profil |
#5 · Zasláno: 2. 10. 2011, 18:12:38 · Upravil/a: Medvídek
Kajman:
id tam mam kvůli mazání (i když je to asi zbytečné, dalo by se smazat kombinací 2 parametrů id_produktu, id_jidla). Sloupce id_produktu, id_jidla mam spojené jako UNIQUE Ale asi to id smažu a budu mazat pomocí těch 2 parametrů. |
||
okolojdouci Profil * |
#6 · Zasláno: 3. 10. 2011, 12:30:29
Medvídek:
„Ale asi to id smažu a budu mazat pomocí těch 2 parametrů.“ A jak to budeš řešit v administraci? Už párkrát jsem na to téma uvažoval a vždycky byl závěr, že ID nechám, protože mi připadá vhodnější použít ?delvazba=144 než předávat dva parametry. |
||
Medvídek Profil |
#7 · Zasláno: 3. 10. 2011, 15:19:25
okolojdouci:
Protože stejně neznám při SELECTU id spojeni, viz SQL dotaz: SELECT kategorie.nazev AS nazevKategorie, produkty.nazev AS nazevProduktu, suroviny.nazev AS nazevSuroviny FROM produkty LEFT JOIN kategorie ON produkty.kategorie = kategorie.id LEFT JOIN suroviny ON suroviny.id IN (SELECT id FROM spojeni WHERE id_produktu = produkty.id) WHERE produkty.id = 1 Hold mažu pomocí 2 parametrů, místo jedný podmínky tam mam dvě. |
||
Časová prodleva: 13 let
|
0