Подтвердить что ты не робот

Дизайн таблицы базы данных "Следуй за пользователем"

Я пытаюсь определить лучший дизайн таблицы для функции "follow/unfollow user", аналогичной 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.

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

4b9b3361

Ответ 1

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

Ответ 2

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