Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MYSQL] Pytanie teoretczyne
Forum PHP.pl > Forum > Przedszkole
fran1o
Witam,
Mam pytanko jak lepiej zaprojektować bazę danych aby było łatwiej sortować po kategoriach i podkategoriach?

1 wariant:

Tabela: ogloszenia (id, osoba, ogloszenie, kategoria, podkategoria)

czy
2 wariant:
Tabela: ogloszenia (id, osoba, ogloszenia, id_kat, id_podk)
Tabela: kategorie (id_kat, kategoria)
Tabela: podkategorie (id_podk, podkategoria)
JoShiMa
A nie lepiej

Tabela: ogloszenia (id, osoba, ogloszenia, id_kat)
Tabela: kategorie (id_kat, kategoria, id_kat_nadrzedna)

Trzecie pole w tabeli przybierałoby wartość id_kat z innego rekordu. W ten sposób robisz sobie furtkę do budowy drzewa kategorii i dowolnym zagłębieniu podkategorii.
sticker
@fran1o owszem ładniej to wygląda ale kosztem wydajności i konieczności dokonania podwójnego złączenia (oczywiście dajesz w ten sposób możliwość tworzenia dowolnej wielkości drzewa kategorii)

@JoShiMa ad 1 wariant taki sposób jak podałeś jest ok ale ma swoje wady bo nie trzymasz tego wszystkiego w tabelach konfiguracja możliwych kategori i podkategorii musiałbyś trzmać w plikach (co wydaje sie sensowne)

Tu masz ciekawy artykuł http://dev.mysql.com/tech-resources/articl...hical-data.html
JoShiMa
Cytat(sticker @ 8.08.2008, 19:05:57 ) *
@JoShiMa ad 1 wariant taki sposób jak podałeś jest ok ale ma swoje wady bo nie trzymasz tego wszystkiego w tabelach konfiguracja możliwych kategori i podkategorii musiałbyś trzmać w plikach (co wydaje sie sensowne)


1. podałaś
2. Niby dlaczego nie w tabelach? Napisałam nie jeden skrypt oparty na rekurencyjnej tabeli przechowującej drzewo. Wydaje mi się, że kompletnie tego nie rozumiesz.
sticker
@JoShiMa
1) przepraszam ;
2) generalnie wszystko zależy od tego jak bardzo chcesz mieć zagnieżdżone kategorie, w przypadku drzewa z pięcioma potomkami to niezłego sqla musisz generować i nie możesz to zrobić automatycznie ale to na pewnie nie będzie czytelne w przeciwieństwie do tego co jest opisane w artykule który przytoczyłem,
JoShiMa
Cytat(sticker @ 12.08.2008, 19:26:21 ) *
generalnie wszystko zależy od tego jak bardzo chcesz mieć zagnieżdżone kategorie, w przypadku drzewa z pięcioma potomkami to niezłego sqla musisz generować

Masz na mysli pytanie? Normalne. Jesłi wczytuję całe drzewo to zapytanie jest prymitywne reszta odbywa się w php. Jeśli odczytuję tylko potomków (pierwsze pokolenie) jednego rodzica zapytanie jest również prymitywne. Tego trzeba umieć używać.


Cytat
i nie możesz to zrobić automatycznie ale to na pewnie nie będzie czytelne w przeciwieństwie do tego co jest opisane w artykule który przytoczyłem,

A niby co to znaczy automatycznie? Jest łatwe i czytelne. Kwestia oswojenia się z tabelą rekurencyjną.
sticker
Cytat(JoShiMa @ 12.08.2008, 20:14:54 ) *
Masz na mysli pytanie? Normalne. Jesłi wczytuję całe drzewo to zapytanie jest prymitywne reszta odbywa się w php.

Chcesz powiedzieć że czytasz całą tabele a w po stronie skryptu dopiero uzyskujesz poszukiwane przez siebie drzewo?

Cytat(JoShiMa @ 12.08.2008, 20:14:54 ) *
Jeśli odczytuję tylko potomków (pierwsze pokolenie) jednego rodzica zapytanie jest również prymitywne.

Chyba nie zrozumiałaś tego co napisałem - bo ja pisze o drzewie która ma więcej niż jednego potomka - a ty sie upierasz przy relacji rodzic - dziecko.
Cytat(JoShiMa @ 12.08.2008, 20:14:54 ) *
Tego trzeba umieć używać.
A niby co to znaczy automatycznie? Jest łatwe i czytelne. Kwestia oswojenia się z tabelą rekurencyjną.


Jakbyś nie zauważyła to pobranie jakiegokolwiek drzewa w podanym w artykule sposobem wymaga jednego zapytania sql co jest ogromnym zyskiem wydajności i daje Ci porządną metodę która pasuje do wszystkich struktur drzewiastych jakies stosujesz w projekcie (rozumiem że wiesz na czym polega DRY)
JoShiMa
Cytat(sticker @ 14.08.2008, 20:43:43 ) *
Chcesz powiedzieć że czytasz całą tabele a w po stronie skryptu dopiero uzyskujesz poszukiwane przez siebie drzewo?

Jeśi potrzebuję całego drzewa to tak. Po co sobie utrudniać jak można ułatwić smile.gif

Cytat(sticker @ 14.08.2008, 20:43:43 ) *
Chyba nie zrozumiałaś tego co napisałem - bo ja pisze o drzewie która ma więcej niż jednego potomka - a ty sie upierasz przy relacji rodzic - dziecko.

To Ty nie rozumiesz idei tej tabeli.
Wystarczy między rekordami relacja rodzic-dziecko. Jeśli jest więcej poziomów zagłębienia niż jeden, to po prostu niektóre rekordy będą powiązane zarówno w górę jak i w dół. Można w ten sposób robić nieskończenie wiele poziomów zagłębień na bardzo prostej tabeli.
Co więcej jeden rodzic będzie mógł mieć wiele dzieci, bo kilka rekordów może mieć w odpowiednim polu wpisane to samo id jako rodzica. Wierz mi. To działa. Wejdź sobie na www.bicykle.pl/index09.php i idź do galerii zdjęć. Jej struktura oparta jest właśnie na takiej tabeli. A Administrator może w każdym katalogu dodawać kolejne podkatalogi budując drzewo. To że nie rozumiesz idei działania takiej tabeli nie znaczy, że ona nie działa, bo ten przykład pokazuje, że właśnie jest tak jak mówię.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.