1

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

我有 2 张桌子:

[posts]
  id
  user_id
  likes
  dislikes
  ...

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

这是跟踪“likes_dislikes”表中的喜欢/不喜欢并更新“post”表中的相关列的好方法吗?

还是只将投票存储在“likes_dislikes”表中并每次使用查询计算投票数更好?

现在我在“帖子”表中有 14 个列。是不是太多了?

4

2 回答 2

3

一个表中有 14 列并不多。

您必须记住的是,一个好的数据库模式尽量不重复信息。我认为这是最重要的。您应该复制的唯一内容是外国 IDS,仅此而已。

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

数据库规范化是数据库开发中一切的基础。

你必须了解这些范式。

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

于 2013-07-10T14:15:37.907 回答
2

还是只将投票存储在“likes_dislikes”表中并每次使用查询计算投票数更好?

是的,这会更好,首先因为您已经必须运行查询,并且从相关表中计算喜欢和不喜欢的时间不会有明显差异。其次,正如@kmas 所说,规范您的数据库以不重复数据。如果 post 表的 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 子句。

于 2013-07-10T14:50:50.447 回答