Autor Zpráva
Musilda
Profil
Chci se zeptat na váš názor, na počet sloupců v tabulce.
Dostal jsem se do situace, kdy mám v jedné tabulce již 48 sloupců a potřebuji přidat další.
Prakticky nemám důvod, proč to dělit do více tabulek, údaje se vztahují vždy k jednomu záznamu a potřebuji všechna data. Takže mi vyhovuje jednoduchý dotaz a hotovo.
Ptám se spíše po stránce správného návrhu. Nikde jsem nenašel přímou odpověď. Mám přidat do tabulky dalších dvacet sloupců, nebo vytvořit novou tabulku?
juriad
Profil
Nepotřebuješ, doufám, přidat další sloupce pojmenované sloupec49, sloupec50, ... sloupec68.
Opravdu jsou všechny sloupce vždy vyplněné?
Není to třeba tak, že podle typu záznamu je jich relevantních třeba jen pár?
Pokud jsou opravdu většinou vyplněné všechny, pak prostě přidej další sloupce.

Zajímají tě téměř vždy v dotazu všechny údaje?
Pokud lze rozlišit hlavní a rozšiřující údaje, pak dává smysl ty rozšiřující vyhodit do jiné tabulky.

Kdybys ukázal příklad tabulky, mohli bychom se bavit konkrétně. Třeba máš něco špatně navržené a tento dotaz je jen pokusem o řešení. Bez kontextu bychom mohli dojít k nesprávnému závěru.
Musilda
Profil
juriad:

Nepotřebuješ, doufám, přidat další sloupce pojmenované sloupec49, sloupec50, ... sloupec68.
Jak jsi k tomu došel?

Opravdu jsou všechny sloupce vždy vyplněné?
Psal jsem, že potřebuji všechna data, takže každý má nějakou hodnotu.

Není to třeba tak, že podle typu záznamu je jich relevantních třeba jen pár?
Není, psal jsem, že potřebuji všechna data.

Zajímají tě téměř vždy v dotazu všechny údaje?
Ano

Mě by zajímalo, zda to bude mít vliv na výkon, nebo se to prostě dělá jinak.
Jak jsem psal v příspěvku, není důvod, proč ten záznam dělit do více tabulek, všechna data se vytvářejí a editují v jednom kroku a vztahují se k tomu jednomu záznamu.
juriad
Profil
Musilda:
Občas chtějí lidé s databází pracovat jako s excelem. Tedy nejen přidávat číslované řádky, ale přidávat i číslované sloupce.

Tak tedy ty sloupce do té tabulky přidej. Je to určitě o hodně levnější, než při každém dotazu provádět JOIN.

Mimochodem, po přečtení článku http://www.mysqlperformanceblog.com/2013/04/08/understanding-the-maximum-number-of-columns-in-a-mysql-table/ zkus zauvažovat, zda používáš vhodné datové typy; pokud tabulka obsahuje VARCHARy (sloupce s dynamickou velikostí), vyhledávání (bez indexu) v tabulce je pomalejší.
Musilda
Profil
Díky za odpověď, jde mi především o best practice.
V tabulce textové typy mám, ale pro vyhledávání používám sloupce s int a indexem.
karel_
Profil *
Musilda:
Taková kvantum sloupců u mě pořádně smrdí špatným návrhem databáze. Není tajné, o jakou tabulku jde a jaké sloupce obsahuje?

Obecně lze radit jen těžko, nebo spíše vůbec.
Musilda
Profil
karel:

Tabulku sem vkládat nebudu. Tak jak to mám, to funguje, takže mi jde o názor, ne o radu. To že něco funguje, neznamená, že to je dobré.

Zkusím to trochu rozvést.

Máš množinu, ve které je určitý počet unikátních prvků. Každý z těch prvků má určitý počet vlastností, který se mění v závislosti na každém prvku.
Vždy budeš vypisovat celou množinu vlastností prvků, nikdy nebudeš přistupovat k jednotlivému prvku.
Otázka je, zda vytvořit několik tabulek :

Množiny
Prvky
Vlastnosti

a při výpisu je spojovat, nebo vytvořit tabulku s větším počtem sloupců, například:

množina, prvek_a_vlastnost_1,prvek_a_vlastnost_2,prvek_a_vlastnost_3,prvek_b_vlastnost_1,prvek_b_vlastnost_2,prvek_c_vlastnost_1....

přistoupíš k jednomu řádku tabulky a vypíšeš všechny hodnoty. Nebo propojíš tři tabulky a vypíšeš opět všechna data.
Znovu to napíšu, aby to nezapadlo, všechny vlastnosti prvků jsou nenulové a mají vždy nějakou hodnotu.

Díky za odpověď
joe
Profil
Musilda:

Nepotřebuješ, doufám, přidat další sloupce pojmenované sloupec49, sloupec50, ... sloupec68.“ od juriad:

Řekl bych, že máš špatný návrh databáze, protože něco takového tu teď nastiňuješ, ale nelze to takto moc obecně napsat, pokud neukážeš konkrétní údaje.

Je počet vlastností konstantní? Není, protože v prvním příspěvku píšeš, že chceš přidat další.

Spíše bych to tedy viděl tak, že by měla být tabulka prvků a tabulka vlastnosti.
Musilda
Profil
joe:
Řekl bych, že máš špatný návrh databáze

A proč? To je ta otázka. Já bych rád, kdyby někdo řekl proč je to špatně. Výkon? Bez jasné odpovědi se točíme v kruhu.
Počet vlastností pro prvek je konstantní, u různých prvků jich je různý počet.
joe
Profil
Musilda:
Počet vlastností pro prvek je konstantní, u různých prvků jich je různý počet.
Tomu nerozumím, pokud jsem tě dobře pochopil, myslel jsem, že všechny prvky mají stejné vlastnosti, teď píšeš, že různé prvky mají různé vlastnosti a z toho mi vyplývá, že některé vlastnosti musí být NULL.

A proč?
Protože to souvisí s návrhem databází, konkrétně s normalizací databáze. Boty si můžeš taky nandat obráceně, ale nebude to pohodlné...

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: