2013-07-10 89 views
1

什麼是存儲和計票的最佳方式?什麼是存儲和計票的最佳方式?

我有2個表:

[posts] 
    id 
    user_id 
    likes 
    dislikes 
    ... 

[likes_dislikes] 
    type // 0 if disliked, 1 if liked 
    post_id  
    user_id 

這是一個好的方法來跟蹤喜歡的/在「likes_dislikes」表不喜歡和「後」表還更新了相關列,

或者只是在'likes_dislikes'表中存儲投票並且每次都用查詢計算投票數量會更好嗎?

現在我在'posts'表中有14個colums。這太多了嗎?

回答

2

還是隻更好地存儲'likes_dislikes'表中的投票數和每次查詢的票數?

是的,這樣會更好,首先是因爲您已經必須運行查詢,並且從關聯表中計算好惡的時間不會有顯着差異。其次,正如@kmas所說的,規範你的數據庫不要複製數據。如果posts表的user_id將匹配所有user_id作爲likes_dislikes表的相同post_id,那麼我會將它們全部放在一張表中,但我不認爲這是這種情況。如果我錯了,請糾正我,但likes_dislikes表中的user_id是投票的用戶,而posts表的user_id是帖子的所有者。讀取數據庫比寫入數據庫要快得多。如果每次經常從一張額外的表格讀取經文,你都必須寫一張額外的表格,我會隨着閱讀而去。這不僅會使數據庫正常化,而且還會使代碼變得更加簡單。

呵呵,對於Right now I have 14 columns in the 'posts' table. Is that too much?的問題,沒有14列絕對不是一個表的列數太多。我有一個55 +表的數據庫,一個表有275列,一列有158列和許多其他大表。這裏的訣竅是永遠不要運行SELECT * FROM posts,只選擇你需要的列,並使用具有良好索引的where子句。

+0

感謝您的時間回答我的問題! –

3

表中有14列並不是很多。

你必須記住的是,一個好的數據庫模式試圖不復制信息。我認爲這是最重要的事情。你應該複製的唯一東西是外國IDS,就這些。

看看這個鏈接:http://en.wikipedia.org/wiki/Database_normalization

數據庫規範化是數據庫發展的一切的基礎。

你必須理解這些正常形式。

因爲我並不真正瞭解你對你的投票和用戶的問題,所以在你以更好的方式解釋之前,我不會告訴你該怎麼做。

相關問題