Chciałbym podyskutować o pewnym rozwiązaniu dotyczącym tworzenia drzewka kategorii.
Otóż mam przykladowe drzewo kategorii
Komputery(id: 1)
-> Monitory(id: 2)
-> -> Lcd (id: 3)
-> -> -> 24 cale (id: 4)
W bazie mam pola ID | PARENT_ID | NAME | PATH_UP | DEPTH
Pole PATH_UP trzyma identyfikatory kategorii w górę (odzielone kropką), czyli np kategoria "Lcd" będzie miała w tym polu: "1.2.3"
Kiedy będę chciał znaleść wszystkie kategorie na niższym poziomie, tworze zapytanie:
SELECT * FROM categories WHERE path_up LIKE '1.2.3.%'
Dla kategorii Monitory:
SELECT * FROM categories WHERE path_up LIKE '1.2.%'
Pytanie czy LIKE w tym wypadku będzie efektywny i wydajny ?
Pole path_up jest typu TEXT i posiada nałozony index.
I ogólnie czy takie rozwiązanie jest wydajne i sensowne?
EDIT:
Jednak na TEXT nie można załozyć indexu wiec zmieniłem typ na VARCHAR(1000) i widze że indeks działa. Jednak dalej mam pytanie czy trakie rozwiazanie drzewa jest dobre według Was?
Myślę też by dla identyfikatorów któe podaję po kropce w polu parh_up stworzyć osobną tabelę i tak trzymać polaczenia jeden do wielu (CATEGORIES_ID | CATEGORIES_ID_UP)
czyli dla naszej kategorii LCD wynik będzie wyglądał tak:
CATEGORIES_ID | CATEGORIES_ID_UP
3 | 1
3 | 2
Kategoria LCD:
CATEGORIES_ID | CATEGORIES_ID_UP
4 | 1
4 | 2
4 | 3