2013-10-10 23 views
0

如何创建数据库关系的分数上下,就像一个stackoverflow?数据库关系的上下分数,就像stackoverflow的一样?

就像没有同一个用户可以为自己的问题投票一样,其他人只能为一个投票,无论是正面还是负面。

假设我添加的问题有question_id = 25和我的user_id=04。 ,还有另外3个用户user_id =01, 02, 03

现在USER_ID = 04不能投票与question_id = 25(其精)

一个问题,我想用户USER_ID = 01,02,03投。

它会像数据库中的每个投票创建的每一行?

question_id  user_id 
    25    01 
    25    02 
    25    03 

要检查用户是否投了个问题?

或者有没有办法让选民user_id在同一个领域?

question_id  user_id 
    25   01, 02, 03 

是可行的吗?请回复,如果你有更好的方式

回答

2

不是在字段中使用逗号分隔值。

CREATE TABLE Votes (
    question_id int unsigned, 
    user_id int unsigned, 
    vote boolean null default null, 
    unique key (question_id, user_id) 
); 

该模式将防止多个question_iduser_id条目。

当用户创建一个问题,你可以创建一个Votes进入一个NULL值,以防止其他条目,但同时也意味着没有投票权。对于其他人,10可能是“上”和“下”票。

如果有一件事你应该从我的答案中拿走它是避免在字段的逗号分隔值。

+0

不使用逗号分隔的值是好的... bt我应该怎么做?如果我用另一种方式,这将是行洪,肯定是一个坏的方法 – Aayush

+0

@Aayush没有;有大量的行没有问题。这就是数据库的一个重点。如果你真的关心这一点,也许你应该使用另一个存储平台,如MongoDB –

+0

你能解释我怎么能使用你的模式?我的意思是,如果question_id和user_id将是唯一键,那么我怎么才能确保只有一次用户可以投票?对不起,我不明白你的逻辑 – Aayush