Jak przechowywać dwukierunkowe relacje w RDBMS, takie jak MySQL?

Załóżmy, że chcę przechowywać relacje między użytkownikami mojej aplikacji, podobnie jak Facebook, per se.

To znaczy, jeśliA jest przyjacielem (lub jakąś relacją)B, następnieB jest również przyjacielemA. Aby przechowywać te relacje, obecnie planuję przechowywać je w tabeli relacji w następujący sposób

  UID      FriendID
 ------    --------
 user1      user2
 user1      user3
 user2      user1

Jednak mam tu dwie opcje:

Typowy przypadek, w którym będę przechowywać obauser1 -> user2 iuser2->user1. Zajmie to więcej miejsca, ale (przynajmniej w mojej głowie) wymaga tylko jednego przejścia przez wiersze, aby wyświetlić przyjaciół określonego użytkownika.Inną opcją byłoby przechowywanieuser1->user2 LUBuser2->user1 i ilekroć chcę znaleźć wszystkich przyjaciółuser1, Przeszukuję obie kolumny tabeli, aby znaleźć znajomych użytkownika. Zajmie to połowę miejsca, ale (co najmniej w mojej głowie) dwa razy więcej czasu.

Po pierwsze, czy moje rozumowanie jest właściwe? Jeśli tak, to czy są jakieś wąskie gardła, o których zapomniałem (pod względem skalowania / przepustowości lub czegokolwiek)?

Zasadniczo, czy są jakieś kompromisy między tymi dwoma, inne niż te wymienione tutaj. Również w przemyśle preferuje się jeden od drugiego?

questionAnswers(3)

yourAnswerToTheQuestion