Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MYSQL] Pytanie teoretczyne
fran1o
post 8.08.2008, 15:47:32
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)
Go to the top of the page
+Quote Post
JoShiMa
post 8.08.2008, 15:52:14
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


--------------------
Go to the top of the page
+Quote Post
sticker
post 8.08.2008, 18:05:57
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


--------------------
Go to the top of the page
+Quote Post
JoShiMa
post 10.08.2008, 11:49:24
Post #4





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
sticker
post 12.08.2008, 18:26:21
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,


--------------------
Go to the top of the page
+Quote Post
JoShiMa
post 12.08.2008, 21:14:54
Post #6





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


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ą.


--------------------
Go to the top of the page
+Quote Post
sticker
post 14.08.2008, 19:43:43
Post #7





Grupa: Zarejestrowani
Postów: 611
Pomógł: 19
Dołączył: 28.02.2005
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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)


--------------------
Go to the top of the page
+Quote Post
JoShiMa
post 16.08.2008, 17:51:09
Post #8





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


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ę.


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 30.06.2025 - 04:57