| Autor | Správa |
quark
 Užívateľ
 Založený: 30.06.2007 Príspevky: 54
 | Zaslal: Po 26.09.11 11:42 |   |
Riesim Nested set model a neviem si rady s dvoma databazovymi dotazmi.
Prvy sa tyka presuvania uzla aj s jeho vsetkymi poduzlami z lubovolnej casti stromu do druhej.
Druhy sa tyka vybratia vsetkych poduzlov konkretneho uzla do urcitej zvolenej hlbky.
Struktura tabulky v databaze ktora riesi nested set model MUSI obsahovat len 4 polozky potrebne pre tuto pracu a to:
ID - primarny kluc
PARENT ID - referencia na primarny kluc tej istej tabulky
LEFT
RIGHT
Ziadne dalsie polozky ako napr. LEVEL a pod. obsahovat nemoze. Ak poznate nieco co riesi nested set model aj s tymito dalsimi doplnujucimi polozkami ani neodpisujte.
Na nete som nenasiel nic co by riesilo tento problem komplexne, poriadne a optimalizovane pre danu strukturu tabulky.
Viete mi priamo napisat ako by mali vyzerat tieto dotazy na databazu alebo poznate stranky kde su tieto veci dobre popisane?
Riesenie by malo byt optimalizovane a dotazov na databazu by malo byt co najmenej ako to ide. Samozrejme transakcie ak su uvadzajte.
V druhom dotaze predpokladam ze sa mozu vyskytovat recursive queries alebo sub queries alebo nieco co ani nepoznam a zjednodusi to dopytovanie - ak taketo moznosti su pre tento problem riesenim tak ich uvedte.
Co sa tyka typu databazy tak to nezalezi - staci ze uvidim dotazy alebo daku teoriu ktora vysvetli ako tieto dotazy spravim. Ale robim v MySQL kedy nahodou.
Dakujem |
| |
  |
 |
camo
 Zablokovaný užívateľ
 Založený: 05.09.2009 Príspevky: 1176 Bydlisko: Lehota pod Vtáčnikom
 | Zaslal: Po 26.09.11 13:38 |   |
|
    |
 |
quark
 Užívateľ
 Založený: 30.06.2007 Príspevky: 54
 | Zaslal: Po 26.09.11 13:47 |   |
V clankoch som nenasiel odpoved na dva mnou spominane dotazy.
LEVEL nesmie byt pretoze je to nadbytocna vec. Jednoducho tam nema co hladat. Cez PARENT ID sa da level urcit tiez.
// pridané po 4 minútach od posledného príspevku
Aby som to trochu lepsie upresnil. Ja potrebujem riesenie na urovni databazy a nie skriptovacie jazyka ako napr. PHP a pod. Teda hladam dotazy na databazu kde sa mozno vyuzivaju aj rekurzie a pod. |
| |
  |
 |
camo
 Zablokovaný užívateľ
 Založený: 05.09.2009 Príspevky: 1176 Bydlisko: Lehota pod Vtáčnikom
 | Zaslal: Po 26.09.11 13:55 |   |
Však ti píšem, že ten level je tam ako doplnok a môžeš ho vyhodiť ak sa ti nepáči.
Samozrejme, že pre svoju potrebu to budeš musieť domyslieť sám....
To je všetko odo mňa...
PS:level je číslo v rozsahu tinyint a jeho prínos je určite väčší... |
| |
    |
 |
quark
 Užívateľ
 Založený: 30.06.2007 Príspevky: 54
 | Zaslal: Po 26.09.11 13:59 |   |
A chces povedat ze tabulka obsahujuca aj pole LEVEL je normalizovana? |
| |
  |
 |
camo
 Zablokovaný užívateľ
 Založený: 05.09.2009 Príspevky: 1176 Bydlisko: Lehota pod Vtáčnikom
 | Zaslal: Po 26.09.11 14:01 |   |
Áno!
Bolo by myslím šialené, keby si kôli tinyint stĺpcu musel použiť join... |
| |
    |
 |
shaggy
 Moderátor
 Založený: 21.02.2006 Príspevky: 4627 Bydlisko: Bratislava
 | Zaslal: Po 26.09.11 19:46 |   |
| quark napísal: | | ...ani neodpisujte |
Rozmýšľam, či to hodím do koša dnes, alebo až zajtra.
Keby si si prečítal prvý z camo-vých článkov, zistil by si, že je tam aj odkaz na presun uzlov. Používa v tabuľkách level, ale určite to zvládneš prerobiť aj bez neho (a prepísať si to čisto do SQL).
A že tabuľka nie je normalizovaná? Ty to máš ako zadanie nejakej úlohy do školy?
Ak áno, tak ďakujem nášmu školstvu, že nám pripravuje nepoužiteľných ľudí.
Že tam "level" nemá čo hľadať? Blbosť. Prečo by som mal komplikovať prácu, keď s tým level-om sú moje skripty efektívnejšie?
Ty sa máš snažiť urobiť efektívnu aplikáciu, nie takú, čo sa slepo drží nejakých odporúčaní. Normalizované tabuľky nie sú vždy ideálne (pre web, resp. pre konkrétne aplikácie).
camo - ten emerov článok je o niečom inom, ten používa iný spôsob ukladania dát. |
_________________ Neradím a nekomunikujem cez SS, ak niečo potrebujete, máte iné možnosti: Ak vám zmizla téma, alebo sa vám niečo nepáči. Ak potrebujete nahlásiť príspevok/človeka, reportujte ho. Ak máte s niečim problém, riešte to v danej téme. | |
    |
 |
quark
 Užívateľ
 Založený: 30.06.2007 Príspevky: 54
 | Zaslal: Po 26.09.11 20:20 |   |
Dakujem za rady shaggy. Precital som si clanok poriadne a musim priznat ze bolo tam pisane o mojom probleme. Co sa tyka toho levelu tak tiez musim priznat ze asi bude lepsie to tam zahrnut ako nie. A nie je to ziadna uloha zo skoly alebo z roboty len si robim jednu app a chcem ju mat poriadne.
Tak isto dakujem aj tebe camo.
Este raz vdaka. |
| |
  |
 |
camo
 Zablokovaný užívateľ
 Založený: 05.09.2009 Príspevky: 1176 Bydlisko: Lehota pod Vtáčnikom
 | Zaslal: Po 26.09.11 22:05 |   |
Shaggy:
Je to iný prístup, ale rozdiel je iba v tom, že je stavaný na jeden dotaz. Jeden dotaz by bol rizikom pri veľkom množstve dát. To tam emer aj spomína. Ale dá sa na ňom robiť aj presun uzlov(aspoň dúfam...) . Ja som ho použil na dynamické menu a dúfam, že tie presuny budú fungovať pre administráciu... |
| |
    |
 |
shaggy
 Moderátor
 Založený: 21.02.2006 Príspevky: 4627 Bydlisko: Bratislava
 | Zaslal: Po 26.09.11 22:39 |   |
camo - aj pri traverzovaní okolo stromu používaš minimum dotazov (na to je stavaný). Tento spôsob ukladania dát je náročný práve na to ukladanie, ale pri čítaní je rýchly.
quark - myslím, že Jakub Vrána vie o čom píše a ak to tam použil on, nie je dôvod myslieť si, že "level" je zbytočný/nevhodný. |
_________________ Neradím a nekomunikujem cez SS, ak niečo potrebujete, máte iné možnosti: Ak vám zmizla téma, alebo sa vám niečo nepáči. Ak potrebujete nahlásiť príspevok/človeka, reportujte ho. Ak máte s niečim problém, riešte to v danej téme. | |
    |
 |
camo
 Zablokovaný užívateľ
 Založený: 05.09.2009 Príspevky: 1176 Bydlisko: Lehota pod Vtáčnikom
 | Zaslal: Po 26.09.11 22:59 |   |
Ja do toho až tak nevidím, ale zaujímalo by ma v čom je vlastne rozdiel medzi tým emerovým prístupom a tým traverzovaním.
Ja som to pochopil tak, že traverzovanie je vždy viac dotazov a hodí sa napr. na fóra, kde je veľký objem dát v DB, čo je riziko prenášať jedným dotazom. A zase na také menu by to boli zbytočné dotazy navyšše.
Mne je zle už keď mám v scripte dva dotazy a mám pocit, že som to prehnal... |
| |
    |
 |
shaggy
 Moderátor
 Založený: 21.02.2006 Príspevky: 4627 Bydlisko: Bratislava
 | Zaslal: Ut 27.09.11 20:41 |   |
Aký je rozdiel medzi menu a napr. stromovou štruktúrou fóra? Žiadny, ani netuším, aký by mal byť problém pri "prenášaní jedným dotazom". Ten objem dát je uplne minimálny (to nie sú megabajty).
Ja napr. používam traverzovanie v mojom CMS na uloženie štruktúry stránok/kategórií a menu zostavujem pomocou jedného selectu. Aj keď si pozrieš tie články od Jakuba Vrány, tak napr. omrvinková navigácia ti "zožerie" max. 2 selecty, čo nie je vôbec veľa. |
_________________ Neradím a nekomunikujem cez SS, ak niečo potrebujete, máte iné možnosti: Ak vám zmizla téma, alebo sa vám niečo nepáči. Ak potrebujete nahlásiť príspevok/človeka, reportujte ho. Ak máte s niečim problém, riešte to v danej téme. | |
    |
 |
camo
 Zablokovaný užívateľ
 Založený: 05.09.2009 Príspevky: 1176 Bydlisko: Lehota pod Vtáčnikom
 | Zaslal: Ut 27.09.11 22:48 |   |
No dobre díky ja sa tej paranoje z prenášania musím nejako zbaviť... |
| |
    |
 |
coldak
 Skúsený užívateľ
 Založený: 29.10.2008 Príspevky: 936
 | Zaslal: Ne 02.10.11 21:00 |   |
quark pise ze na databaze nezalezi, tak nech pouzije miesto databazy DATABAZU Oracle a tam ma priamo na urovni sql v selecte clasulu "connect by" ktora to riesi za neho . |
| |
  |
 |
|