2010-01-07 45 views
0

我想创建一个评分系统,用于跟踪哪个投票人选择哪篇文章,以及文章收到的投票数和每个投票的价值。MySQL表结构评分系统

我想知道什么是最好的方式去做这件事?

这是我至今在下面。

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`) 
) 
+0

是否要跟踪哪个用户投票选择哪篇文章...似乎您缺少该信息。理想情况下,我认为投票应该有文章ID和用户ID。 – 2010-01-07 08:43:01

回答

0

你需要保持你的用户的轨道某处

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 
) 

(索引在这里和其他表丢失)

如果你想unnormalize的票数,它应该然后放在文章表中,但如果你没有太多记录,我宁愿建议使用常规计数来计算它,并将前端放在缓存中(每当有新文章投票时刷新)。

+0

恕我直言,不妨从一开始就反正规化,但除此之外,我同意这个答案。 – brindy 2010-01-07 09:32:37