zapytnie do struktury drzewa w oraclu
pstachy - 13-03-2006 11:26
zapytnie do struktury drzewa w oraclu
Witam, Mam takie dwie tabele (zdaje mi sie ze zbudowane zgodnie z metoda 5 z FAQ)
SPOLKI DRZEWOSPOLEK .-|----------------------------||--<firstid id-|----------------------------||--<secondid nazwa depth typ ....
Moje pytanie: czy mozliwe jest stworzenie widoku w jakis zreczny sposób wyswietlajacego strukture drzewa Jak narazie to wpadlem tylko na cos takiego
CREATE OR REPLACE FORCE VIEW "WID" ("spolka", "spolka podrzedna") AS
SELECT s1.nazwa as "spolka", s2.nazwa as "spolka podrzedna" FROM spolki s1, spolki s2, drzewospolek dr WHERE s1.idspolki=firstid AND s2.idspolki=secondid AND s1.nazwa='nazwa_spólki' AND dr.depth=1
wyswietla nazwy spólek bezposrednio podrzednych w koumnie "spolka podrzedna" a w "spolka" wyswietla nazwe nadrzednej spolki...
czy ktos spotkal sie z podobnym problemem??
=?ISO-8859-2?Q?Micha=B3?= Kuratczyk - 13-03-2006 11:26
"pstachy" <pstachy@gmail.com> wrote: > czy ktos spotkal sie z podobnym problemem??
Trudno powiedzieć, bo pytanie jest bardzo nieprecyzyjne. Generalnie problemy z hierarchicznością danych rozwiązuje się przez CONNECT BY. Na przykład:
SQL> create table spolki ( 2 id number primary key, 3 nazwa varchar2(256), 4 parent number references spolki(id) 5 );
Table created.
SQL> insert into spolki values (1, 'FIRMA1', null);
1 row created.
SQL> insert into spolki values (2, 'FIRMA2', null);
1 row created.
SQL> insert into spolki values (3, 'FIRMA3', 2);
1 row created.
SQL> insert into spolki values (4, 'FIRMA4', 2);
1 row created.
SQL> insert into spolki values (5, 'FIRMA5', 4);
1 row created.
SQL> column nazwa format a30 SQL> select lpad(' ',level*2,' ')||nazwa nazwa, id, parent 2 from spolki connect by prior id = parent start with parent is null;
NAZWA ID PARENT ------------------------------ ---------- ---------- FIRMA1 1 FIRMA2 2 FIRMA3 3 2 FIRMA4 4 2 FIRMA5 5 4
-- Michał Kuratczyk
pstachy - 13-03-2006 11:26
No wlasnie o cos takiego by mi chodzilo...ale twój przyklad prechowuje strukture drzewa tylko w jednej tabeli przy pomocy pola parent w relacji z id (jesli dobrze zrozumialem:) a w moim sa dwie tabele tak jak w metodzie 5 z faq, wobec tego czy mozna connect by zastosowac do takiego modelu danych jesli tak to prosze o przyklad:) po drugie jak jest z wydajnoscia Twojego rozwiazania (i samego connect by), bo z moich informacji (zaczerpnietych z tej grupy z reszta:) wynika ze to rozwiazanie z metoda 5 jest naljepsza i najszybsza mimo nadmiarowosci informacji jakiej potrzebuje... pozdrawiam
=?ISO-8859-2?Q?Micha=B3?= Kuratczyk - 13-03-2006 11:26
"pstachy" <pstachy@gmail.com> wrote: > No wlasnie o cos takiego by mi chodzilo...ale twój przyklad > prechowuje strukture drzewa tylko w jednej tabeli przy pomocy pola > parent w relacji z id (jesli dobrze zrozumialem:) a w moim sa dwie > tabele Tak.
> tak jak w metodzie 5 z faq, To mi nic nie mówi. Dokładny URL, albo cytat poproszę.
> wobec tego czy mozna connect by zastosowac do takiego modelu danych Ja bym raczej naprawił model danych. :->
> po drugie jak jest z wydajnoscia Twojego rozwiazania (i samego > connect by), bo z moich informacji (zaczerpnietych z tej grupy z > reszta:) wynika ze to rozwiazanie z metoda 5 jest naljepsza i > najszybsza mimo nadmiarowosci informacji jakiej potrzebuje... Wątpię, żeby wydajność CONNECT BY jakoś Ci doskwierała specjalnie. Jeśli operujesz na dużych ilościach danych, to po prostu zrób na dwa sposoby i sprawdź co jest lepsze oraz czy różnica jest warta zachodu. Jeśli nie, to nie zawracaj sobie głowy na wyrost. Jeśli chcesz, żeby ktoś na grupie Ci pomógł, to musiałbyś podać konkretny przykład, który działa Ci za wolno - wtedy pomyślimy nad rozwiązaniem problemu.
-- Michał Kuratczyk
pstachy - 13-03-2006 11:26
>To mi nic nie mówi. Dokładny URL, albo cytat poproszę.
chodzi o to że u mnie jest tak: spolki -> przechowuja dane, drzewospolek->przechowuje strukturę drzewa
SPOLKI DRZEWOSPOLEK .--|----------------------------||--<firstid id--|----------------------------||--<secondid nazwa depth typ
>Ja bym raczej naprawił model danych. :->
Czyli mam rozumieć że lepiej jednak zrobić to tak jak proponowałeś wcześniej?:
create table spolki ( 2 id number primary key, 3 nazwa varchar2(256), 4 parent number references spolki(id) 5 );
>Wątpię, żeby wydajność CONNECT BY jakoś Ci doskwierała specjalnie....
okej, w sumie wydajność nie jest dla mnie taka ważna tak tylko pytałem z ciekawości.
=?ISO-8859-2?Q?Micha=B3?= Kuratczyk - 13-03-2006 11:26
"pstachy" <pstachy@gmail.com> wrote: > >Ja bym raczej naprawił model danych. :-> > Czyli mam rozumieć że lepiej jednak zrobić to tak jak proponowałeś > wcześniej?: Ja bym tak zrobił. CONNECT BY to narzędzie jak każde inne - do wielu rzeczy nadaje się świetnie, a do wielu się nie nadaje. Unikanie go "bo ktoś gdzieś powiedział, że jest kiepskie", to zły pomysł. Jeśli nie spełni Twoich oczekiwań, to wtedy się będziesz zastanawiał co z tym zrobić.
Co oczywiście nie oznacza, że o wydajności należy myśleć dopiero, gdy serwer z bazą danych zacznie się pocić z wysiłku. ;-)
-- Michał Kuratczyk
=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 13-03-2006 11:26
pstachy wrote: > No wlasnie o cos takiego by mi chodzilo...
To czemu go nie zastosujesz? Przecież masz wszystko co potrzeba
> ale twój przyklad > prechowuje strukture drzewa tylko w jednej tabeli przy pomocy pola > parent w relacji z id (jesli dobrze zrozumialem:) a w moim sa dwie > tabele tak jak w metodzie 5 z faq, > wobec tego czy mozna connect by zastosowac do takiego modelu danych > jesli tak to prosze o przyklad:) > po drugie jak jest z wydajnoscia Twojego rozwiazania (i samego > connect by), bo z moich informacji (zaczerpnietych z tej grupy z > reszta:) wynika ze to rozwiazanie z metoda 5 jest naljepsza i > najszybsza mimo nadmiarowosci informacji jakiej potrzebuje...
Pewnie jako metoda rekurencyjna nie jest rewelacyjna, ale przynajmniej baza zajmuje się optymalizacją tego. Natomiast rozwiązanie z connect by jest napewno szybsze a i łatwiejsze w implementacji przy wszelkich maniuplacjach na nim.
-- P.M.
pstachy - 13-03-2006 11:26
Wielkie dzieki za wskazanie wlasciwego rozwiazania:) No cóz biore sie za przebudowe modelu danych:) pozdrawiam
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
=?iso-8859-2?Q?=5BMySQL=5D_Wy=B6wietlenie_wszystkich_rekordow _zawierajacy?==?iso-8859-2?Q?ch_duplikat_a__moze_inna_struktura_bazy_danych ?=
=?ISO-8859-2?Q?=5Bmysql=5D_synchronizacja_struktury_bazy_?==? ISO-8859-2?Q?lokalnej_ze_zdaln=B1?=
[postgres] Problem z =?ISO-8859-2?Q?zmian=B1_struktury_i_z?==?ISO-8859-2?Q?ale=BFno=B6ciami=2E?=
[oracle] [xml] XML na bazie istniejacej struktury ?
=?iso-8859-2?q?PG_Admin_-_wszyscy_widz=B1_struktur=EA...?=
=?iso-8859-2?q?rozk=B3ad_autobusow_-_optymalna_struktura_bazy?=
=?ISO-8859-2?Q?[MSSQL]Wy=B6wietlenie_struktury_bazy_danych.?=
mysql / drzewa / produkty jak to =?ISO-8859-2?Q?zrobi=E6_jedny?==?ISO-8859-2?Q?m_zapytaniem=3F?=
dane, struktura drzewiasta, =?ISO-8859-2?Q?=B3adna_prezentacja?=
[sybase] Jak w sprawdzić strukturę obiektu (tabeli) w Interactive SQL ???
zanotowane.pldoc.pisz.plpdf.pisz.plczterowers.keep.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|