数据模型和app逻辑问题?

时间:2010-10-05 20:13:28

标签: mysql database logic

基本上我有这个问题我有一个帖子表(在我的mysql数据库中)

Post{user_id, post, vote_up(int), vote_down(int)}

因为用户登录,然后他们投票,但我想检查用户是否已经投票,所以我不能让他们再次投票,显然我将使用用户会话来控制这个反对跟踪ips等。

所以我想我是否必须创建另一张桌子或者是更好的方法。

2 个答案:

答案 0 :(得分:1)

您需要另一张表格,例如称为“投票”:

投票{user_id,post_id}

我认为,您的“发布”表格中有一个主键(例如“id”),您在上面的问题中没有显示?然后“post_id”应该是Post#id的外键。

/卡斯滕

答案 1 :(得分:0)

你肯定需要另一张桌子,一些主键和外键也会有用:

Post{post_id(int), user_id(varchar), post(clob)}
Votes{vote_id(int), post_id, user_id, up_down(char)}

您的vote_up和vote_down列值已删除,现在可以使用查询计算:

-- vote_up
select count(*) from votes where post_id = n and up_down = '+';
-- vote_down
select count(*) from votes where post_id = n and up_down = '-';

投票时应该有一个唯一的索引(post_id,user_id),以防止同一个用户在同一个帖子上多次投票。
不必定义主键vote_id,但每个表都应该有一个主键,如果您不想使用代理键,那么您可以使用与上面相同的列来定义PK,这将用作也是唯一索引,所以不必定义。