Я пытаюсь определить лучший дизайн таблицы для функции «следовать / отменить подписку», аналогично 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
поле follower
а идентификатор пользователя, который будет следовать, добавляется к following
. Я также записываю дату, на которую пользователь подписался, чтобы следовать за другим пользователем в subscribed
. Дата сортировки может использоваться для сортировки.
Когда пользователь отключается, я просто удаляю соответствующую строку.
Чтобы предотвратить дублирование строк, я сделал столбцы follower
и following
уникальных. Если пользователь уже выполнил идентификатор и снова щелкнул, чтобы получить подтверждение, я получаю ошибку базы данных 1062. Например
Дублируемая запись '62 -88 'для ключевого' follow_unique '
Очевидно, что когда пользователь уже следит за пользователем, последователь видит кнопку unfollow
. Это достигается путем проверки наличия следующей строки таблицы между двумя пользователями. Если rows > 0
противном случае follow
unfollow
.
Ну, что вы думаете?
Я думаю, что это очень хороший дизайн и должен удовлетворять ваши потребности. Одна вещь; вы должны, вероятно, сделать follower
и following
внешние ключи. О, и для простоты я сделал бы subscribed
столбец TIMESTAMP DEFAULT CURRENT_TIMESTAMP
только для того, чтобы зафиксировать дату и время подписки пользователя.
Я бы посоветовал вам сделать последователя и следовать вместе с первичным ключом. Нет необходимости в отдельном поле id
.