Я пытаюсь определить лучший дизайн таблицы для функции «подписаться / отменить подписку», как в Twitter (редактировать: Я не сделать Twitter-подобный application.) Ниже представлен мой текущий дизайн таблицы и обработка 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
и , следующие за
, уникальными. Если пользователь уже подписан на идентификатор и снова щелкает, чтобы подписаться, я получаю ошибку базы данных 1062. Например,
Повторяющаяся запись '62 -88 'для ключа' follow_unique '
Очевидно, когда уже подписан на пользователя, подписчик видит a кнопка отмены подписки
. Это достигается путем проверки, существует ли строка таблицы с отслеживанием последователей между двумя пользователями. Если строк> 0
, я показываю отменить подписку
, иначе следуют за
.
Что вы думаете?