Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problematyka powiązań
spenalzo
post
Post #1





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

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


Mam taki schemat:

(IMG:http://spenalzo.republika.pl/schemat.gif)
:arrow: http://spenalzo.republika.pl/schemat.gif
(wybaczcie za koślawy rysunek)

Jest to schemat powiązań pomiędzy użytkownikami:
R - root (ja)
R.1-R.6 - moi znajomi
A-H - znajomi R.1-R.6 (tutaj dla uproszczenia schematu po jednym)
A.1-H.6 - znajomi A-H

Oczywiście mogą potem być dalej różne inne powiązania (np. A.1.1.1-A.1.2.6 itd itp) - ale ja widze tylko od poziomu R do ostatniego na schemacie czyli A.1-H.6
Powiazania pomiędzy użytkownikami są zależne w taki sposób, że jeżeli dodam nowego znajomego to wszyscy (do 3 poziomu zaglębienia) widzą jego, ci na 2 poziomie widzą jego i jego znajomych na I poziomie itd. Natomiast ja widzę jego znajomych do 3 poziomu, czyli schemat się powtarza. Z kolei użytkownicy na 6 poziomie widzą moich znajomych na 3 poziomie.

W jaki sposób rozpracować strukture tych powiazań i w jakim stopniu przerzucić "ciężar" tych powiązań na php a w jakim stopniu na MySQLa?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
bumelang
post
Post #2





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 30.11.2003

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


Z tego, co wiem, to to się modeluje na dwa sposoby: pierszy, oczywisty - zarzucanie bazy milionem zapytań dotyczących kolejnych rodziców i dzieci danego węzła, co ma na sens gdy często się dodaje a rzadko wybiera dane i chyba średnio ma sens przy Twoim schemacie.

Drugi jest znacznie bardziej wysublimowany i nadaje się do informacji często wybieranej, ale rzadko dodawanej z uwagi na duży koszt dodawania czy usuwania rekordu. Wygląda to tak, że w SQLu przechowuje nadmiarową informację dotyczącą struktury drzewa (tj. poza informacją o ojcu), którą trzeba odbudować za każdym razem gdy ta się zmienia.

Korzyść z tego za to taka, że wszystkie operacje wybierania całej gałęzi etc. wykonuje się jednym zapytaniem. Jest to dość skomplikowane i średnio pamiętam jak to się dokłanie robi. Nie wiem też na ile na MySQLu da się to sensownie zaimplementować, ale że ciągle mnie ta baza zaskakuje, to być może się da.

Poszukaj sobie w googlach po prostu "SQL trees" czy coś w tym stylu - to powinno Ci to przybliżyć problem. Pozdrowienia.
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 8.10.2025 - 09:41