Autor Zpráva
Klout
Profil *
Dobrý den,

nevím zda tohle vůbec jde, zkoušel jsem to hledat, ale popravdě ani moc nevím pod čím. Hrál jsem si i s tabulkama, zkoušel přiřazovat různé indexy, ale stejně bez úspěchu.

Jde mi o tohle - mám tabulky „tags“ (id, tag_id, tag_name) a jediný čeho chci docílit, tak aby při vložení stejného názvu (tag_name) se přiřadilo stejné tag_id.

Tedy asi takhle -

(id, tag_id, tag_name)

1, 1, notebook
2, 1, notebook
3, 1, notebook
3, 2, klávesnice
3, 3, myš
3, 2, klávesnice

Díky moc za rady!
Kcko
Profil
A nestačilo by si dotazem zjistit podle názvu jestli tam ten název je a pokud ano tak vrátit jeho ID a to poté vložit jinak vložit jiné ?
juriad
Profil
porušuješ 2. normální formu, zaděláváš si na problémy; v databázovém modelu se máš snažit redundantní data eliminovat

měl bys tedy mít dvě tabulky:
assignments = (id, tag_id), tags =(tag_id, tag_name)
tvoji tabulku dostaneš poté selectem:
SELECT * FROM assignments JOIN tags ON assignments.tag_id = tags.tag_id

za předpokladu, že id je produkt/článek/cokoli čemu tag přiřazuješ
Klout
Profil *
Díky moc kluci, oboum. Otevřelo mi to oči, udělal jsem to podle juriada.
Kcko
Profil
juriad:

v databázovém modelu se máš snažit redundantní data eliminovat
Tak to bych si dovolil oponovat. Zrovna v tomhle případě sice ano, ale jsou případy kdy duplicitní data (opakovaná v x tabulkách) mohou DB stroji značně usnadnit život.
JaySee
Profil
Kcko:
Stroj vs. člověk a logika... kdo se v tom pak má hrabat, když jsou duplicity. Jedinou duplicitu, kterou uznávám, je ID.
Kcko
Profil
JaySee:
Duplicita != redundatní data pro potřeby snížení zátěže db serveru.
juriad
Profil
Kcko:
Najdi si něco o předčasné optimalizaci, například http://podnebi.jan-martinek.com/predcasna-optimalizace/ nebo http://www.java.cz/article/optimalizovatcineoptimalizovat

Je poněkud nevhodné začátečníkům říkat, že redundance může být někdy vhodná, protože oni nedokaží zatím rozlišit, kdy se skutečně vyplatí a prokáže, že je přínosem byť na úkor zvýšení režie údržby dat.

Navíc souhlasím s JaySeem, že široce vhodná je jediná redundance: jednoatributový klíč ID.
Kcko
Profil
juriad:
Ten článek je o ničem.

Stejně tak je nevhodné začátečníkům říkat, že jediná správná DB je absolutně bez redundatních dat. Pak budou dotazy vypadat asi takto

select
while()
{
milion dalsich selectu protoze zacatenik si nebude umět slozit slozitejsi ci velmi slozity dotaz.
}

Navic jsou pripady, kdy se to proste jeví jako nejsprávnější řešení pro snížení zátěže. V jedné sofistikované naučné knize o tom pojednával jistý MySQL guru, Welling nebo kdo ... nevzpomenu si a rázně to vysvětloval: přesnou definici si nepamatuji.

Dál je zbytečné se o tom bavit názor na to oba máme diametrálně odlišný a neshodneme se.

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: