2010-11-14 77 views
1

創建一個類似於stackoverflow的投票系統。像這樣的問題一直在問幾次,我已經檢查,但我還沒有找到一個投票系統,你評價線程和評論。我想知道做這件事的最好方法是什麼?投票系統,你會在同一個表中進行線程投票和評論投票嗎?

這是最好的方法嗎?

thread table 
id PK 
userid 
title 
description 

comment table 
id PK 
userid 
comment 

在上面的表格中有評分,或者讓它們分開嗎? :

thread_rating table 
threadid PK 
userid PK 
rating 

comment_rating table 
commentid PK 
userid PK 
rating 

或只是有一個評價表和評論表?

回答

2

如果您的評論位於線程的單獨表格中,則每個評分可能沒有任何業務在同一個表格中。所以是的;鑑於你打算如何做線程和評論,你應該爲他們的每個評級都有單獨的表格。

@drachenstern提到的內容也很重要,btw;您可以通過View或其他機制來做些事情來跟蹤選民(和投票者)的整體投票。舉例來說,SO顯示我們的總贊成/反對票,無論他們是在提問還是回答。然而與此同時,還有徽章在哪裏知道哪些是重要的。

如果將表結合爲一種「組合」投票總數的方式,則可能發生的一個問題是,您可能必須採用不同的方式爲線索和評論生成UID,以確保無線程與註釋具有相同的ID(這意味着您需要使表結構更復雜)。在這樣的思路中,我的觀點可能是將主題和評論合併成一張表。當然,這會帶來其自身的複雜性。

:)

+0

感謝我@AndrewBarber同意評級表有更好的投票| vote_up | vote_down | ....或.... | vote | vote_type | ...你怎麼看? – Jonathan 2010-11-14 03:33:24

+0

一個選項可能只是簡單地將'vote'字段設置爲'int',並且對於upvotes爲'+ 1',對於downvotes爲'-1'。沒有理由你不能使用其他值,如果你想給他們不同的權重。然後,應用程序可以簡單地將正數顯示爲正數,將負數顯示爲倒數。 – 2010-11-14 03:36:40

+0

通過將它們設置爲對您的應用程序很重要的數值,您可以使用一些簡單的數學聚合函數來確定總體評分。 – 2010-11-14 03:37:26

1

我想這將是有意義的跟蹤誰投贊成票的每個,所以<user,commentid,vote,timestamp>一張桌子和<user,answerid,vote,timestamp>

否則一個表中的線程