Что такое хороший способ создать таблицу с отношениями между пользователями? - PullRequest
0 голосов
/ 06 октября 2011

В настоящее время я работаю на сайте социальной сети.(Да, я знаю, их целая куча. Я не пытаюсь сделать Facebook повсюду)

Мне было интересно, может ли кто-нибудь сказать мне, мой подход к мышлению далек илиТак оно и есть.

Я хочу, чтобы у пользователя были друзья.И, для этого, я думаю, что у меня должна быть одна пользовательская таблица, подобная этой: USER

  • uId
  • userName
  • email
  • и т. Д...

Вероятно, это должно быть отношение 1: N, поэтому я думаю, что таблица "контакты" должна содержать список пользователей и их друзей, например, так: КОНТАКТЫ

  • uId (от пользователя USER)
  • FriendId (из таблицы USER)
  • тип дружбы ENUM [активный, неактивный, в ожидании]

Это будетэффективное решение для сортировки этой таблицы по uId, чтобы результат запроса выглядел примерно так:
uID |friendId
1 |2
1 |6
1 |97
75 |1
75 |34

и т. Д.

Или есть другие варианты решения этой проблемы?

Ответы [ 2 ]

1 голос
/ 06 октября 2011

Если вы просто хотите выбрать конкретный набор друзей, запрос будет простым, и вам не придется беспокоиться о производительности.

Например: если вы хотите вернуть идентификаторы друзей UID 8, вы можете просто сделать что-то вроде:

Select FriendId FROM TABLE where UID=8;

В вашем случае, поскольку столбец UID не уникален, убедитесь, что в этом столбце есть индекс, чтобы обеспечить быстрый поиск (оптимизировать производительность).

Вы также можете подумать о том, какие еще данные вам понадобятся о друзьях пользователей. Например, вероятно, бесполезно просто захватывать FriendIds, вам, вероятно, нужны имена и т. Д. Таким образом, ваш запрос будет выглядеть примерно так:

Select FriendId, Users.name FROM Friends JOIN Users ON Users.uid=Friends.FriendId WHERE Friends.UID=8; 

Опять же, правильная индексация столбцов является ключом для оптимизации поиска, особенно когда размер вашей таблицы становится большим.

Кроме того, поскольку добавление друзей, по-видимому, весьма необычно по сравнению с количеством поисковых запросов, которые вы делаете, обязательно выберите механизм базы данных, который обеспечивает самую быструю скорость поиска. В этом случае MyISam, вероятно, ваш лучший выбор. MyISam использует блокировку на уровне таблицы для вставок (т. Е. Медленных вставок), но поиск выполняется быстро.

Удачи!

0 голосов
/ 06 октября 2011

Я думаю, что лучший способ без сомнения создать таблицу, как вы предложили. Это позволит вам лучше управлять друзьями, делать запросы для друзей за этим столом, ... это было бы лучшим решением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...