【发布时间】:2011-10-02 23:31:38
【问题描述】:
我正在尝试确定“关注/取消关注用户”功能的最佳表格设计,类似于 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 ;
在关注时,关注者 id 被添加到 follower 字段中,将被关注的用户的 id 被添加到 following。我还在subscribed 字段中记录了用户订阅关注另一个用户的日期。订阅日期可能用于排序。
当用户取消关注时,我只需删除相应的行。
为了防止重复行,我将列 follower 和 following 设为唯一。如果用户已经在关注一个 id 并再次点击关注,我会收到数据库错误 1062。例如
键“follow_unique”的重复条目“62-88”
很明显,当已经关注用户时,关注者会看到一个unfollow 按钮。这是通过检查 2 个用户之间是否存在追随者表行来实现的。如果rows > 0 我显示unfollow 否则follow。
嗯,你觉得呢?
【问题讨论】:
-
我不是要重新创建 Twitter。它的目的完全不同,但在订阅方面与 Twitter 具有相同的功能
-
听起来不错,但我会在您的用户表中添加(如果您还没有)
follower和following的外键约束。 -
你在做的事情对我来说看起来不错。我建议使用
ENGINE=InnoDB而不是MyISAM,这样您就可以强制执行FOREIGN KEY关系和ON DELETE/UPDATE。不过,这可能需要对您的许多表进行引擎更改才能生效。 -
@Dirk:MyISAM 没有外键。
标签: php mysql database database-design