Please see my comment to the question.
For example…
In .NET code, create a class "Person". Add members you need, such as "Name", "Nickname", "Avatar" (or just "Avatar image"), some contact information, and so on. From this class, derive a class "Hipster". First and foremost, in this class, design and implement the function "Like". Then create an interface "IFriend". Add further classed derived from "Hipster", some implementing this interface, some not. Pass instances of this class to objects using the concept of friendship using the variable/member/parameter type "IFriend" (you don't want to consider the concept of friendship with other types of "Person", right? :-)). Alternatively, implement IFriend interface in the class "Hipster", but make it a relationship with other members of this type. The relationship should be one-directional graph, not symmetric: A.IsFriendOf(B) does not imply B.IsFriendOf(A); the users add members to the friend collection (or don't) without reciprocity.
A relational database is one of the most suitable ways of storing the relationships in a persistent way:
Relational model — Wikipedia, the free encyclopedia[
^].
And so on…
—SA