![]() |
![]() |
![]()
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? |
|
|
![]() |
![]()
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. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 8.10.2025 - 09:41 |