![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 65 Pomógł: 2 Dołączył: 15.04.2008 Ostrzeżenie: (0%) ![]() ![]() |
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) |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 374 Pomógł: 149 Dołączył: 1.03.2006 Ostrzeżenie: (0%) ![]() ![]() |
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. Ten post edytował JoShiMa 8.08.2008, 15:52:34 -------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 611 Pomógł: 19 Dołączył: 28.02.2005 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
@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 -------------------- |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 374 Pomógł: 149 Dołączył: 1.03.2006 Ostrzeżenie: (0%) ![]() ![]() |
@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. -------------------- |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 611 Pomógł: 19 Dołączył: 28.02.2005 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
@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, -------------------- |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 374 Pomógł: 149 Dołączył: 1.03.2006 Ostrzeżenie: (0%) ![]() ![]() |
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ą. -------------------- |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 611 Pomógł: 19 Dołączył: 28.02.2005 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
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? 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. 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) -------------------- |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 374 Pomógł: 149 Dołączył: 1.03.2006 Ostrzeżenie: (0%) ![]() ![]() |
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ć ![]() 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ę. -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 30.06.2025 - 04:57 |