【问题标题】:"Follow user" database table design“关注用户”数据库表设计
【发布时间】: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 字段中记录了用户订阅关注另一个用户的日期。订阅日期可能用于排序。

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

为了防止重复行,我将列 followerfollowing 设为唯一。如果用户已经在关注一个 id 并再次点击关注,我会收到数据库错误 1062。例如

键“follow_unique”的重复条目“62-88”

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

嗯,你觉得呢?

【问题讨论】:

  • 我不是要重新创建 Twitter。它的目的完全不同,但在订阅方面与 Twitter 具有相同的功能
  • 听起来不错,但我会在您的用户表中添加(如果您还没有)followerfollowing 的外键约束。
  • 你在做的事情对我来说看起来不错。我建议使用ENGINE=InnoDB 而不是MyISAM,这样您就可以强制执行FOREIGN KEY 关系和ON DELETE/UPDATE。不过,这可能需要对您的许多表进行引擎更改才能生效。
  • @Dirk:MyISAM 没有外键。

标签: php mysql database database-design


【解决方案1】:

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

【讨论】:

  • 谢谢!通过外键约束,您的意思是关注者和关注者的唯一 ID 对吗?如果是这样的话。
  • @Cyber​​Junkie 通过外键约束,它们意味着将您的表切换到允许外键的替代 mysql 表引擎 innodb。这些约束使得例如,如果您要删除用户记录,并且通过外键连接的其他表中有记录,这些记录也将被删除,从而防止孤立记录。也适用于更新。可以在 phpMyAdmin 中设置。 dev.mysql.com/doc/refman/5.5/en/…
  • 感谢您的澄清!我不知道这个功能,我一定会更多地研究它!
  • 此外,FK 会阻止插入到下表中的用户,这些用户不在您的用户表中。
【解决方案2】:

我建议你将追随者和追随者一起作为主键。不需要单独的id 字段。

【讨论】:

  • 我以前曾被告知过,但由于某种原因,这对我来说似乎很“骇人听闻”,而且我也无法将两者都设为主要。我得到一个错误或什么都没有发生。此外,我想要一个 A.I.唯一的主键。这是数据库标准。我并不是要听起来不屑一顾,我只是不太了解这种方法
猜你喜欢
  • 1970-01-01
  • 2012-09-17
  • 2017-02-25
  • 1970-01-01
  • 1970-01-01
  • 2022-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多