我會去的第一個選項的輕微變種:
數據庫表中的專用投票,其中有用戶ID和他們的票...存儲他們的投票作爲一個布爾值,然後計算出「總和」MySQL中的選票。
用整數替換布爾值:+1表示加1,-1表示減號。
然後,而不是一遍又一遍地計算總和,保持一個運行總量的地方;每次進行加權投票時,每加入一票就加1,減1。您可以在數據庫中使用插入觸發器來執行此操作,或者在添加新投票時向數據庫發送額外的UPDATE thing SET vote_total = vote_total + this_vote
。
您可能還希望在投票跟蹤表中的thing/userid對上有一個唯一的約束。
跟蹤個人投票可以讓人們不用投票兩次。保持運行總量使總顯示快速簡單(大概這將是最常見的操作)。
添加一個簡單的健全檢查器,你可以運行,以確保總數匹配投票將是一個很好的補充。
序列化陣列:請不要那樣做,這樣的事情讓周圍的數據庫,由專人檢查並修復的東西根本是很困難的,序列化的數據結構也變得非常困難(不可能在某些情況下),以用外鍵正確地限制你的數據,檢查約束條件,唯一約束條件和你有什麼。將序列化的數據結構存儲在數據庫中通常是一個壞主意,除非數據庫不需要知道有關數據的任何信息,除了如何將數據返還給您。將數組打包到文本列中是數據庫中破損和不一致數據的祕訣:破損的代碼易於修復,破損的數據通常是永久的。
我只能補充一點,你可能使用cookies爲哪些項目用戶已經投票,這樣你就不需要執行緩存每個頁面上的數據庫查詢渲染,其中用戶將在屏幕上看到一個項目。如果你使用這種方法,你需要檢查用戶是否在註冊他們的投票前進行了投票,但是(無論如何,這可能是個好主意)。 – Finbarr 2011-04-02 23:05:21