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