Zakładając, że wszyscy twoi znajomi są również w tabeli użytkowników, będziesz potrzebować tabeli znajomych, która definiuje prostą relację jeden-do-wielu - łącząc tabelę użytkowników z nią samą. Więc
User Table
UserID int identity not null
[other attribute fields]
Friends Table
UserIDLink1 int
UserIDLink2 int
[other attribute field]
Gdzie oba UserIDLink1 i UserIDLink2 są kluczami obcymi w tabeli Użytkownicy.
Na przykład, jeśli mam trzech użytkowników
1 Joe
2 Bill
3 Jane
a Joe i Jane są przyjaciółmi, wtedy tabela Przyjaciele zawierałaby jeden wiersz
1 3
Powyższe domyślnie zakłada, że jeśli A jest przyjacielem B, to B jest przyjacielem A — jeśli tak nie jest, prawdopodobnie chcesz zmienić nazwy UserIDLink1 i UserIDLink2 na UserID i FriendID lub podobne — w takim przypadku mają też nawet podwojenie rekordów.
Również w przypadku konfiguracji dwukierunkowej (A jest przyjacielem B, jeśli B jest przyjacielem A) należy ustawić indeksy w tabeli Znajomi dla (UserIDLink1,UserIDLink2) i (UserIDLink2,UserIDLink1), aby zapewnić, że dostęp jest zawsze wydajny, jeśli szukaliśmy przyjaciół joe lub przyjaciół jane (jeśli nie ustawiłeś drugiego indeksu, to pierwsze zapytanie będzie skutecznym wyszukiwaniem indeksu, ale drugie wymagałoby pełnego skanowania tabeli).
Jeśli twoje linki nie byłyby dwukierunkowe, nie byłoby to konieczne, aby dowiedzieć się, kim są znajomi A, ale prawdopodobnie najbardziej tego potrzebujesz, ponieważ prawdopodobnie będziesz musiał również dowiedzieć się, z kim B jest przyjacielem.