Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Unikalna para wartości
Riggs
post
Post #1





Grupa: Zarejestrowani
Postów: 162
Pomógł: 13
Dołączył: 16.06.2007

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


Witam,
otóż tworząc pewien projekt zapewniam sobie spójność danych kilkoma warunkami w kodzie (a w zasadzie odpowiednim zapytaniem). Ale w procesie optymalizacji całej aplikacji zacząłem większość rzeczy wrzucać do bazy (triggery, indeksy na wielu polach itp). Zastanawiałem się też nad pewną kwestią - nazwijmy to znajomość użytkowników.
Przykład:
Użytkownik A (user_a w DB) jest znajomym z Użytkownikiem B (user_b). Tym samym B jest znajomym z A. Do opisania tej zależności potrzebny jest jeden rekord z id znajomości, id user_a, id_user_b i np created_at. Jak założyć taki indeks aby unikalna była para (user_a, user_b) oraz (user_b, user_a). Zakładając że user_a ma id 1 a user_b - 100 to unikalne muszą być 2 pary (1,100) oraz (100,1).

Mam nadzieję że jasno opisałem problem.

PS.
Sprawdzenie w kodzie czy już istnieje znajomość jest banalne - "SELECT COUNT(*) FROM relations WHERE (user_a = 1 AND user_b = 100) OR (user_b=1 AND user_a=100)" ale chciałbym dodatkowo zabezpieczyć bazę.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
vermis
post
Post #2





Grupa: Zarejestrowani
Postów: 279
Pomógł: 56
Dołączył: 3.06.2010
Skąd: Tarnowskie Góry

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


Z punktu widzenia bazy danych rekordy (1,100) i (100,1) to zupełenie inne wpisy, więc nie ma potrzeby zabezpieczać się na takie wypadki. Zaimplementowane w bazie mechanizmy służą zabezpieczeniu integralności danych, a w tym wypadku nie ma takiej potrzeby.
Skorzystaj z tego co zaproponował @sowiq. Do tego dodaj pole bitowe: 0 - zaprosił użytkownik A, 1 - użytkownik B i po kłopocie. Nie widzę w tym nic nieeleganckiego, widzę raczej proste rozwiązanie problemu.
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: 28.12.2025 - 03:53