2010-10-05 39 views
0

基本上我有這個問題,我有職位表(在我的MySQL數據庫)數據模型和應用邏輯問題?

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

因爲用戶登錄,然後他們去投票,但我想檢查用戶是否已經投票,因此那麼我不能讓他們再次投票,顯然即時通訊將使用用戶會話來控制這種反對跟蹤IPS等

所以我在想我必須創建另一個表或是他們更好的方法。

回答

1

您需要另一個表格,例如所謂的「票」:

投票{USER_ID,POST_ID}

我認爲,你的「郵報」的表有,你有沒有在上面你的問題所示的主鍵(例如,「ID」)?然後「post_id」應該是Post#id的外鍵。

/卡斯滕

+0

yeh我對不起,我沒有把它記下來+ upvote從我,我只是想因爲用戶可以投票上漲或下降,所以基本上,如果用戶投票,然後投票下來,我需要刪除以前的投票,他們如果你明白我的意思,但我想這應該更關心應用程序邏輯而不是數據庫級別 – getaway 2010-10-05 20:23:20

+0

你可以用一個「方向」字段來擴展我的投票表,它可以是1(上)或 - 1(下)。這樣用戶將能夠取消他們的投票或不投票,但不會重複相同的投票。 – 2010-10-05 20:39:06

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,這將用於作爲唯一索引,所以不必定義。