Предполагая, что все ваши друзья также находятся в таблице пользователей, вам понадобится таблица друзей, которая определяет простые отношения «один ко многим» - привязка таблицы пользователей к себе. Таким образом,
User Table
UserID int identity not null
[other attribute fields]
Friends Table
UserIDLink1 int
UserIDLink2 int
[other attribute field]
Где и UserIDLink1, так и UserIDLink2 являются внешними ключами в таблице Users.
Так, например, если у меня есть три пользователя
1 Joe
2 Bill
3 Jane
и Джо и Джейн являются друзьями тогда Друзья таблица будет содержать одну строку
1 3
выше неявно предполагает, что если А друг B, а B - друг A - если это не так, вы, вероятно, захотите переименовать UserIDLink1 и UserIDLink2 в UserID и FriendID или аналогичные - в этом случае вам придется удвоить записи.
Также для двунаправленной конфигурации (A является другом B, если B является другом A), вы должны настроить индексы в таблице Friends для (UserIDLink1, UserIDLink2) и (UserIDLink2, UserIDLink1), чтобы обеспечить доступ всегда эффективен, если мы ищем друзей Джо или друзей Джейн (если вы не настроили второй индекс, тогда первый запрос будет эффективным поиском индекса, а второй потребует полного сканирования таблицы).
Если ваши ссылки не были двунаправленными, не нужно было бы выяснять, кто такие друзья А, но вы, вероятно, больше всего этого потребуете, так как вам, вероятно, также понадобится выяснить, кто такой В является другом.
Являются ли дружба двунаправленной или однонаправленной? Если Пит дружит с Мэри, значит, это всегда означает, что Мэри тоже является другом Пете? –
Также обратите внимание, что имя того, что вам нужно, это «таблица пересечений» или, может быть, «таблица поиска». Если вы знакомы с концепциями баз данных, это много-много таблиц, так как у пользователя может быть много друзей и может быть много друзей с другими людьми. Также обратите внимание, что пользователь может иметь друга, который не является другом, используя этот стиль. Есть и другие способы, но это проще всего реализовать. Может быть, немного больше о вашей дружеской бизнес-логике поможет? @Juha Syrjälä избил меня! – jcolebrand
Друзья являются однонаправленными и должны уже существовать в БД. Это всего лишь список напоминаний о людях, которых вы знаете. – asmo