Autor | Zpráva | ||
---|---|---|---|
Tomasds Profil |
#1 · Zasláno: 21. 3. 2009, 06:33:08
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 |
#2 · Zasláno: 21. 3. 2009, 06:39:43 · Upravil/a: Mastodont
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 |
#3 · Zasláno: 21. 3. 2009, 06:50:31
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 |
#4 · Zasláno: 21. 3. 2009, 06:57:50
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 |
#5 · Zasláno: 21. 3. 2009, 07:31:36 · Upravil/a: Mastodont
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 |
#6 · Zasláno: 21. 3. 2009, 07:41:10
:-) 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 |
#7 · Zasláno: 21. 3. 2009, 08:12:34 · Upravil/a: Mastodont
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 |
#8 · Zasláno: 21. 3. 2009, 08:42:48
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 |
#9 · Zasláno: 21. 3. 2009, 08:56:25
Tomasds
„tak může jít opravdu o hodně řádků“ Tj. kolik přibližně? |
||
Tomasds Profil |
#10 · Zasláno: 21. 3. 2009, 09:22:34
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 |
#11 · Zasláno: 21. 3. 2009, 10:15:52 · Upravil/a: Mastodont
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 |
#12 · Zasláno: 22. 3. 2009, 14:18:51
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. |
||
Časová prodleva: 15 let
|
0