Dun*_*zzz 0 database database-design cakephp relational-database database-schema
我正在建立一个用户可以对产品进行投票或投票的系统,我需要能够明确计算出产品的起伏数量,以及最近一段时间的总分.
每个投票都可以选择对其进行评论,并且用户需要能够回应/提升其他人的评论(有点像转推),这也将根据转发的父投票加/减产品的总分.
以下是我目前提出的表格:
产品
ID,名称,category_id
投票
ID,user_id,product_id,parent_id,评论,分数,日期时间
用户
名,用户名等
我想我可能需要一个评论表来有效地做到这一点?根据我在StackOverflow上读到的一些建议,投票'得分字段是1或-1,这将允许我收集该SUM()列来计算总票数,另一种可能是单独的vote_up和vote_down表...但是我我只是不确定.
根据你想要做的事情,这可能是一个非常复杂的问题,但这是我最简单的方式(例如我在离开工作前10分钟可以扔在一起的东西;-P)
我会尝试StackOverflow/HotOrNot样式方法,并将它们的排名存储为无符号整数.
PRODUCTS(
id,
category_id,
name,
rating INTEGER UNSIGNED NOT NULL DEFAULT 0
);
Run Code Online (Sandbox Code Playgroud)
然后在"VOTES"表格中存储投票(上/下).我认为你的"VOTES"表的表格看起来很好(虽然我会使用枚举作为SCORE数据类型,或者使用某种策略来确保不能通过XSS操纵投票.例如,某人修改投票所以他们的投票结果是+10,000而不是+1,那就不会很酷
对于一个有趣的小应用程序,你可以在用户点击时增加或减少计数,但如果你正在做任何有扩展愿望的事情,那么你将通过一些每个运行的批处理进行投票计算和排名10-15分钟.
同样在这个级别,您将开始使用算法来加权投票值.例如,如果同一用户每天多次(或每次一次)投票(向上或向下)同一产品,那么第一次之后的投票不应计入计算产品的等级.
如果用户是"超级用户"或者拥有更活跃的帐户,则他们的投票可能比新用户投票更重要.我想在Yelp上,如果您没有超过一两条评论,那么在您达到最低评价数量之前,您的评分和评价不会计算在内.真的,天空是极限.
PS.我还建议查阅这本o'Reilly书,了解解决这些问题的一些策略