什么是存储和统计选票的最佳方式?

时间:2013-07-10 14:09:08

标签: mysql count

存储和统计选票的最佳方式是什么?

我有两张桌子:

[posts]
  id
  user_id
  likes
  dislikes
  ...

[likes_dislikes]
  type // 0 if disliked, 1 if liked
  post_id      
  user_id

这是跟踪“likes_dislikes”表中喜欢/不喜欢的好方法,还会更新“帖子”表中的相关列,

或者最好只将投票存储在'likes_dislikes'表中并每次用查询计算投票数?

现在我在'posts'表中有14个列。这太过分了吗?

2 个答案:

答案 0 :(得分:3)

表中有14列不是很多。

您必须记住的是,良好的数据库架构会尝试不复制信息。我认为这是最重要的事情。您应该复制的唯一内容是外国IDS,这就是全部。

请看这个链接:http://en.wikipedia.org/wiki/Database_normalization

数据库规范化是数据库开发中所有内容的基础。

您必须了解这些正常形式。

由于我不太了解您关于您的投票和用户的问题,在您以更好的方式解释之前,我不会告诉您该怎么做。

答案 1 :(得分:2)

  

或者最好只将投票存储在'likes_dislikes'表中并每次用查询计算投票数?

是的,这会更好,首先是因为您已经必须运行查询,并且从相关表中计算好恶的时间不会有明显的差异。其次,正如@kmas所说,将数据库规范化为不重复数据。如果posts表的user_id将匹配likes_dislikes表的相同post_id的所有user_id,那么我会将它们全部放在一个表中,但我不相信这是这里的情况。如果我错了,请纠正我,但likes_dislikes表中的user_id是投票的用户,posts表的user_id是帖子的所有者。读取数据库比写入数据库要快得多。如果你每次每次从一个额外的表中读取经文时都要写一个额外的表,我会去阅读。这不仅可以使您的数据库标准化,还可以使您的代码更容易。

哦,对于Right now I have 14 columns in the 'posts' table. Is that too much?问题,没有14列绝对不是一个表的列太多。我有一个包含55个表的数据库,一个表有275列,一列有158列,还有许多其他大表。这里的诀窍是永远不要运行SELECT * FROM posts,只选择你需要的列,并使用带有良好索引的where子句。