“关注用户”数据库表设计

问题描述:

我试图确定“关注/取消关注用户”功能的最佳表格设计,类似于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场和将要遵循添加到following用户的ID。我还记录了用户在subscribed字段中订阅的其他用户的日期。订阅的日期可能用于排序。

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

为了防止重复行,我使列followerfollowing是唯一的。如果用户已经是下一个ID和点击再跟着,我收到数据库错误1062例如

关键‘follow_unique’

显然重复条目'62 -88' 时,已经在关注一个用户,该追随者看到一个unfollow按钮。这是通过检查2个用户之间是否存在跟随者跟随表格行来实现的。如果rows > 0我显示unfollow,否则follow

那么,你觉得呢?

+3

我不是试图重新Twitter的。它的一个完全不同的目的,但在订阅 – CyberJunkie

+2

听起来不错的条款相同的功能Twitter的,但我想补充(如果你还没有的话)外键约束在“追随者”和“追随”你的用户表。 – Dirk

+2

你在做什么对我来说看起来很好。我建议尽量使用'ENGINE = InnoDB'而不是'MyISAM',这样你可以执行'FOREIGN KEY'关系和'ON DELETE/UPDATE'。这很可能需要对很多表格进行引擎更改才能生效。 –

我认为这是一个非常好的设计,应该很好地满足您的需求。一件事;您应该可以制作followerfollowing外键。噢,为了简单起见,我会制作subscribedTIMESTAMP DEFAULT CURRENT_TIMESTAMP只是为了捕获用户订阅的日期时间。

+0

谢谢!通过外键约束你的意思是追随者和追随权的唯一ID?如果是这样的话。 – CyberJunkie

+4

@Cyber​​Junkie通过外键约束,它们的意思是将你的表切换到备用mysql表引擎innodb,它允许使用外键。这些限制使得例如如果您要删除用户记录,并且其他表中的记录由外键连接,则这些记录也将被删除,从而防止孤立的记录。也适用于更新。可以在phpMyAdmin中设置。 http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html – dqhendricks

+0

感谢您的澄清!我不知道这个功能,我一定会更加注意它! – CyberJunkie

我建议你让追随者和一起关注主键。不需要单独的id字段。

+0

我以前曾被告知过,但由于某种原因,它对我来说似乎是“哈克”,我也无法使它们都成为主要的。我收到错误或没有任何反应。另外我想要一个A.I.独特的主键。这是数据库标准。我并不是想表达不屑一顾,我只是不了解这种方法 – CyberJunkie