Autor Zpráva
Medvídek
Profil
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
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
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 *
V tabulce spojeni je id k ničemu. Dejte si primární klíč na kombinaci id_produktu, id_jidla.
Medvídek
Profil
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 *
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
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ě.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0