Дизайн таблицы базы данных "Follow user" - PullRequest
13 голосов
/ 11 июля 2011

Я пытаюсь определить лучший дизайн таблицы для функции "подписаться / отписаться от пользователя", аналогичной Twitter (правка: Я не создаю приложение, подобное Twitter). Ниже приведен мойтекущий дизайн таблицы и обработка php.Я не уверен, что это лучший подход, и буду очень признателен за ваш отзыв.

CREATE TABLE IF NOT EXISTS `user_follow` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `follower` int(11) NOT NULL,
  `following` int(11) NOT NULL,
  `subscribed` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`id`),
  UNIQUE KEY `follow_unique` (`follower`,`following`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=76 ;

При подписании добавляется идентификатор подписчика в поле follower и идентификатор пользователя, за которым последуютдобавляется к following.Я также записываю дату, на которую подписался пользователь, чтобы подписаться на другого пользователя в поле subscribed.Дата подписки может быть использована для сортировки.

Когда пользователь отменяет подписку, я просто удаляю соответствующую строку.

Для предотвращения дублирования строк я сделал столбцы follower и following уникальными.Если пользователь уже использует идентификатор и щелкает для повторения, я получаю ошибку базы данных 1062. Например,

Дублирующая запись '62 -88 'для ключа' follow_unique '

Очевидно, что когда пользователь уже следует за пользователем, он видит кнопку unfollow.Это достигается путем проверки, существует ли строка таблицы, следующая за подписчиком, между двумя пользователями.Если rows > 0 у меня отображается unfollow, иначе follow.

Ну, что вы думаете?

Ответы [ 2 ]

7 голосов
/ 11 июля 2011

Я думаю, что это очень хороший дизайн, и он должен отвечать вашим потребностям.Одна вещь;вероятно, вам следует создать внешние ключи follower и following.О, и ради простоты, я бы сделал столбец subscribed TIMESTAMP DEFAULT CURRENT_TIMESTAMP только для того, чтобы зафиксировать дату и время подписки пользователя.

3 голосов
/ 11 июля 2011

Я бы посоветовал вам сделать последователя и следовать первичному ключу.Нет необходимости в отдельном поле id.

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