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

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

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

Solutions Collecting From Web of "Дизайн таблицы базы данных «Следуй за пользователем»"

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

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