"关注用户"数据库表设计

Cyb*_*kie 13 php mysql database database-design

我正在尝试确定"跟随/取消关注用户"功能的最佳表设计,类似于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 ;
Run Code Online (Sandbox Code Playgroud)

在跟随时,将追随者ID添加到该follower字段中,并添加将要遵循的用户的ID following.我还记录用户订阅的日期跟随该subscribed字段中的另一个用户.订阅日期可能用于排序.

当用户取消关注时,我只删除相应的行.

为了防止重复的行,我创建了列follower并且是following唯一的.如果用户已经关注了id并点击再次关注,则会收到数据库错误1062.例如

密钥'follow_unique'重复输入'62 -88'

显然,当已经跟随用户时,跟随者会看到一个unfollow按钮.这是通过检查2个用户之间是否存在跟随者跟随表行来实现的.如果rows > 0我显示unfollow否则follow.

那么你觉得呢?

Pau*_*ier 7

我认为这是一个非常好的设计,应该很好地满足您的需求.一件事; 你应该做followerfollowing外键.哦,为了简单起见,我将subscribedTIMESTAMP DEFAULT CURRENT_TIMESTAMP专门用于捕获用户订阅的日期时间.

  • @Cyber​​Junkie受外键约束,它们意味着将你的表切换到另一个mysql表引擎,innodb,它允许外键.这些约束使得例如,如果您要删除用户记录,并且其他表中的记录由外键连接,那么这些记录也将被删除,从而防止孤立记录.也适用于更新.可以在phpMyAdmin中设置.http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html (4认同)