Drzewiasta struktura w BD

0

Witam.
Jest sobie tabela:

GRUPY:
ID_grupy
ID_rodzica
nazwa
typ

Przykładowa struktura:

Katalog
|-Katalog1
| |-Katalog11
| | |-Plik111
| | \-Plik112
| |
| |-Katalog12
| | \-Katalog121
| |   \Plik1211
| |
| |-Plik121
| |-Plik122
| \-Katalog13
|   \-Katalog14
|
\-Katalog2

Zapisana będzie w tabeli następująco:

ID =Rodzic =Nazwa =Typ
1 0 Katalog 0
2 1 Katalog1 0
3 2 Katalog11 0
4 3 Plik111 1
5 3 Plik112 1
6 2 Katalog12 0
7 6 Katalog121 0
8 7 Plik1211 1
9 2 Plik121 1
10 2 Plik122 1
11 2 Katalog13 1
12 1 Katalog2 0
13 11 Katalog14 0

Mam nadzieję, że ten przykład dobrze wyjaśnia o co chodzi - w jednej tabeli zapisane są informacje zarówno o katalogach, jak i o plikach. Katalogi mają Typ=0, a pliki Typ=1. Jest to jedyna tabela zawierająca te informacje. Struktura jest taka, jaka jest, i nie mam na nią wpływu - działa na tym zewnętrzna aplikacja.

Potrzebuję stworzyć zapytanie, które:

  1. Wybierze mi wszystkie elementy, będące elementami wybranego katalogu i wszystkich jego podkatalogów (i pod-podkatalogów etc)
  2. Jednocześnie pominie katalogi puste (zarówno całkiem puste, jak i zawierające jedynie puste katalogi)

Kwestia wydajności jest absolutnie drugorzędna.

Ktoś ma jakieś rozwiązanie?

1

JAKA BAZA?!?!?!?!?!?!?!?!

0

MSSQL Standard 2005

PS. Dlaczemu nie da się edytować postów?

0

Poszukaj metody z wyliczaniem indeksu Left, Right dla każdego węzła. Dzięki temu liczba rekordów pozostaje taka sama, dodajesz dwie int'owe kolumny. A zapytania też są proste i tanie o ścieżkę do root lub o poddrzewo.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0