Autor Zpráva
Witiko
Profil
Zdravím databázové subfórum,
Witiko
Profil
Tvořím návrh MySQL databáze pro recepty a neustále mě dohání sžíravý pocit, že návrh tabulky není to pravé ořechové. Posuďte sami, mám dvě tabulky RECEPTY a INGREDIENCE. V každé z nich jsou záznamy označené unikátním identifikátorem pro danou tabulku. Ke každému receptu potřebuji přidat seznam použitých ingrediencí, což je podobný případ, jako je k nalezení v místním F.A.Q. Nejprve jsem zvažoval textové pole s identifikátory ingrediencí na pozdější rozparsování, tedy něco takového:
1,124,547,16,267...

Toto řešení mi ale z hlediska normalizace tabulek připadalo velice nehezké a tak jsem se poohližel po alternativě. Avšak jediné co mě napadlo, je vytvořit novou tabulku pro každý recept s názvem např. RECEPT_123_INGREDIENCE a do něj vložit veškeré ingredience. Je to lepší, umožňuje mi to přidat k ingredienci i její množství apod. ale indexování za pomoci názvu se mi příliš nelíbí. Ukázka:

RECEPTY (Identifikátor, Jméno):
>> 0, Vepřo Knedlo Zelo
>> 1, Vepřová Zmrzlina

INGREDIENCE (Identifikátor, Jméno):
>> 0, Vepřové maso
>> 1, Zelí
>> 2, Knedlíky
>> 3, Led

RECEPT_0_INGREDIENCE (Identifikátor ingredience, Množství):
>> 0, 1500g
>> 1, 500g
>> 2, 10

RECEPT_1_INGREDIENCE (Identifikátor ingredience, Množství):
>> 0, 2500g
>> 3, 1000g

Je zde nějaké lepší řešení?
TomášK
Profil
Witiko:
Přidej třetí tabulku recepty_ingredience(recept_id, ingredience_id, ..., mnozstvi, ...)
Kajman_
Profil *
Stačí jedna vazební tabulka. Sloupce budou nejspíše
id_receptu, id_ingredience, mnozstvi (jednotky bych dal asi do tabulky ingredience.
Když bude mít recept 6 ingrediencí, bude mít v téhle tabulce šest řádků. Když byste si to odkazované FAQ přečetl, věděl byste to.
Witiko
Profil
Kajman:
Když byste si to odkazované FAQ přečetl, věděl byste to.
Děkuji za postrčení, samozřejmě je to logické. FAQ jsem si přečetl, jinak bych na něj neodkazoval, nějak mě to přesto nenapadlo. :)

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