Ervan uitgaande dat al uw vrienden zich ook in de gebruikerstabel bevinden, hebt u een vriendentabel nodig die een eenvoudige een-op-veel-relatie definieert - waarbij de gebruikerstabel weer aan zichzelf wordt gekoppeld. Dus
User Table
UserID int identity not null
[other attribute fields]
Friends Table
UserIDLink1 int
UserIDLink2 int
[other attribute field]
Waar zowel UserIDLink1 als UserIDLink2 refererende sleutels zijn in de tabel Gebruikers.
Dus als ik bijvoorbeeld drie gebruikers heb
1 Joe
2 Bill
3 Jane
en Joe en Jane vrienden zijn, dan zou de tabel Vrienden een enkele rij bevatten
1 3
Het bovenstaande veronderstelt impliciet dat als A een vriend van B is, dan B een vriend van A is - als dit niet het geval is, zou u waarschijnlijk UserIDLink1 en UserIDLink2 willen hernoemen naar UserID en FriendID of iets dergelijks - in welk geval u hebben om de records ook te verdubbelen.
Ook voor de bidirectionele configuratie (A is een vriend van B als B een vriend van A is) moet u indexen instellen op de vriendentabel voor (UserIDLink1,UserIDLink2) en (UserIDLink2,UserIDLink1) om ervoor te zorgen dat de toegang altijd efficiënt is als we waren op zoek naar vrienden van Joe of vrienden van Jane (als je de tweede index niet had ingesteld, zou de eerste zoekopdracht een efficiënte indexzoekopdracht zijn, maar voor de tweede zou een volledige tabelscan nodig zijn).
Als je links niet bidirectioneel waren, zou dit niet nodig zijn om uit te zoeken wie de vrienden van A zijn, maar je zou het waarschijnlijk nog steeds het meest nodig hebben, omdat je waarschijnlijk ook moet weten van wie B een vriend is.