2011-06-13 26 views
0

我正在創建一個評論網站,其中產品的某些詳細信息是從針對特定產品撰寫評論的用戶的聚合響應中確定的。例如,當用戶在審覈產品Macbook Air時,除了對其評分爲1-5顆星,並且使用筆記本電腦對他的體驗進行了300個字的描述之外,他還可以做一個簡短的「調查」,其中包含複選框,他可以選擇推薦產品爲:用於確定來自用戶提交數據的值的數據庫設計

  1. 辦公套件
  2. 遊戲
  3. 平面設計
  4. 看電影

例如,用戶可以選擇「辦公套件」的複選框和「看電影」。假設所有評論者對本Macbook Air產品的所有迴應均得到100張「辦公套件」的投票結果,其他選項得到50票,20票和10票。因爲「辦公套件」選項有最多的選票,在MacBook Air的產品頁面上,會註明:

Product recommended for: Office Suite

,你會如何去爲這個設計數據庫?我正在考慮製作一個帶有'rec_office_suite','rec_games','rec_graphic_design','rec_watching_movies'列的單獨表格,每個表格都包含該選項的投票數量。每當審閱者提交審閱並填寫迷你調查時,數據庫表格將更新爲他選擇增加的字段+1。

事情是,這可以結束與許多領域的表。這會是一個問題嗎?

回答

1

我推薦你在問題和大雄的方法中提出的解決方案的組合。

大雄正確的是,使用鏈接表是存儲數據的正確方法。對於以後的擴展非常好(只需添加一個新的類別記錄)。我會以這種方式開始。

當談到在每個產品頁面上顯示結果時,要求數據庫對每個產品的所有類別的所有投票進行計數。因此,將數據複製到某種緩存中以便快速讀取是有意義的。您對每個類別的表格列的想法稍後很難擴展,並且可能變得非常大。相反,我只是簡單地將產品表中的MEDIUMTEXT(或類似)列存儲爲可能的JSON格式或序列化的PHP數組 - 這非常容易閱讀。只要有人添加類別投票或添加新類別時,緩存只需要更新。

通過使用這兩種方法,您可以輕鬆訪問產品/類別/投票數據,以便日後處理更復雜的SQL查詢以及快速查詢產品頁面。

希望有道理,半睡半覺:)

1

我會做以下,但讓我們看看是什麼人建議:

  1. 創建具有三個字段的表:PRODUCT_ID - CATEGORY_ID - 投票
  2. 用戶每次投票支持該產品中的該類別在上表中增加投票字段。

這個設計將幫助你有許多產品相關的類別,因爲你有一箇中間表,將處理與該類別產品相關的投票。

我希望這會有所幫助。