Autor Zpráva
Tomasds
Profil
Je možné, že budu potřebovat výpis tabulky, ke kterému budu připojovat hodně hodnot joinem. Jak se databáze vypořádá s dotazem, kde bude třeba 50 joinů?

Nechci se teď pouštět do bližších popisů. Připomínky o špatném návrhu db prosím nepište. Řeším systém, který bude hodně konfigurovatelný, chyba v návrhu není.
Mastodont
Profil
Jak se databáze vypořádá s dotazem, kde bude třeba 50 joinů?
Bude to děsně pomalé :-)
chyba v návrhu není
To je známá věta ze zlatého fondu zkrachovalých projektů ...
Tomasds
Profil
Mastodont
Představ si stav, kdy web, jehož data by za normálního stavu ležela v nějakých deseti tabulkách, je něčím, co leží komplet v databázi. Seznam polí, uspořádání polí ve výpisech, nastavení přístupů, kategorie osob, seznam akcí, co každá z kategorií osob může dělat.

Největší zátěž bude v hlavním výpisu, kde bude potřeba z databáze vytáhnout seznam polí (výpisy se liší podle toho, kdo se na ně dívá) a pak ke každému řádku připojit pro daná pole hodnoty.
Tomasds
Profil
Vlastní hodnoty budou ležet zhruba v takové tabulce:

ID  IDzakazky IDparametru hodnota


Těchto "koncových" tabulek bude několik. Jedna pro texty, další pro čísla, další pro varchar..
Snad to pro představu stačí.

Cílem je variabilita konfigurace. Bude to jakási stavebnice, na kterou si sednu na půl dne se zákazníkem a mám hotovo. Jednou to bude web o kolech, jednou třeba o prádle, všechno nadefinuju.
Mastodont
Profil
ID  IDzakazky IDparametru hodnota

Zajímavé, skoro to samé jsem řešil před měsícem:
http://diskuse.jakpsatweb.cz/index.php?action=vthread&forum=28&topic=90112
Ale 50 JOINů při výpisu tam ani náhodou nebude. Vejdu se v pohodě do 5.
Tomasds
Profil
:-) Tak to jsem hned klidnější. Teď píšu editor (vlastně editor editoru :) ), skládání těch sestav zatím není aktuální, jen jsem prostě předpokládal, že to nějak půjde a teď jsem mírně zaváhal.
Mastodont
Profil
Jde to nejméně třemi způsoby:
1. ID - název parametru - hodnota // zvláštní tabulka pro každý typ parametru
2. ID - název parametru- hodnota // jedna tabulka, míchat různé typy hodnot v jednom sloupci
3. ID - název parametru - string - integer - float - date ... //spousta prázdných údajů, ale používá to třeba Oracle

Zatím jsem neměl čas to nějak testovat.
Tomasds
Profil
Přesně takhle jsem uvažoval. 2 se mi nelíbí, 3 je pro tvoření systému jednodušší a mohla by být i úspornější pro databázi, jde o to, jakou zátěž znamená dejme tomu 5 prázdných sloupců, když z šesti využiju vždy jen jeden.
A kdyby v jedné tabulce ležela opravdu všechna data, tak může jít opravdu o hodně řádků, kde bude z šesti sloupců využit vždy jeden.

Tato úvaha mě namířila k variantě více tabulek.
joe
Profil
Tomasds
tak může jít opravdu o hodně řádků
Tj. kolik přibližně?
Tomasds
Profil
joe
Všechny hodnoty ke všem zakázkám. Třeba 5000 řádků denně. Opakuju: v každém řádku využita pouze jedna hodnota.
Mastodont
Profil
Tomasds
Říkal jsem si, že taková elementární věc musela být už někdy řešena, a také že ano - je to EAV model (Entity-attribute-value) a je o tom dost článků.

EDIT: Ptal jsem se na Sitepointu a byl jsem důrazně varován, že to je cesta do pekel :)
Tomasds
Profil
Mastodont
byl jsem důrazně varován, že to je cesta do pekel

To je přesně to, co jsem se nechtěl dozvědět. Myslím že to dotáhnu do jakési aspoň základní funkčnosti, za týden by to mohlo být. A pak to důkladně otestuju. Díky za info i za ten odkaz na EAV.

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: