【问题标题】:MySQL Table Structure For a Rating System评级系统的 MySQL 表结构
【发布时间】:2010-01-07 08:39:04
【问题描述】:

我想创建一个评分系统来跟踪谁为哪篇文章投票、该文章获得了多少票以及每次投票的价值。

我想知道最好的方法是什么?

这是我到目前为止所拥有的。

CREATE TABLE IF NOT EXISTS `vote` (
`counter` int(8) NOT NULL default '0',
`value` int(8) NOT NULL default '0'
)


CREATE TABLE articles (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`user_id` INT UNSIGNED NOT NULL,
`title` TEXT NOT NULL,
`summary` TEXT DEFAULT NULL,
`content` LONGTEXT NOT NULL,
PRIMARY KEY (id)
);


CREATE TABLE IF NOT EXISTS `users` (
`id` int(8) NOT NULL auto_increment,
`username` varchar(20) NOT NULL,
PRIMARY KEY  (`id`)
)

【问题讨论】:

  • 你想跟踪,哪个用户对哪篇文章投了票……好像你错过了这些信息。理想情况下,我认为 Vote 应该有文章 ID 和用户 ID。

标签: mysql


【解决方案1】:

您需要在某个地方跟踪您的用户

CREATE TABLE IF NOT EXISTS `vote` (
  `user_id` int(8) NOT NULL,
  `article_id` int(8) NOT NULL,
  `value` int(8) default 0,
  `datetime` timestamp DEFAULT CURRENT_TIMESTAMP
)

(此处和其他表缺少索引)

如果您想非标准化投票数,则应将其放入文章表中,但如果您没有太多记录,我宁愿建议使用常规计数来计算它并将前面放在缓存中(当然,每次对文章进行新投票时都会刷新)。

【讨论】:

  • 恕我直言,不妨从一开始就去规范化,但除此之外,我同意这个答案。
猜你喜欢
  • 2023-03-14
  • 1970-01-01
  • 2011-02-03
  • 1970-01-01
  • 1970-01-01
  • 2010-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多