簡體   English   中英

從用戶提交的數據中確定價值的數據庫設計

[英]Database design for Determining Value from User Submitted Data

我正在創建一個評論網站,其中產品的某些細節是根據對特定產品進行書面評論的用戶的匯總回復確定的。 例如,當用戶在評論 Macbook Air 產品時,除了給它打 1-5 星並寫一篇 300 字的關於他使用筆記本電腦的體驗的描述外,他還可以做一個簡短的“調查”,其中包含他可以選擇是否該產品推薦用於:

  1. 辦公室套裝
  2. 游戲
  3. 平面設計
  4. 在看電影

例如,用戶可以選擇“辦公套件”和“看電影”的復選框。 假設所有評論者對這款 Macbook Air 產品的所有回復導致“辦公套件”獲得 100 票,其他選項獲得 50 票、20 票和 10 票。 因為“辦公套件”選項得票最多,所以在 Macbook Air 的產品頁面上,它將 state:

Product recommended for: Office Suite

您將如何為此設計數據庫? 我正在考慮有一個單獨的表格,其中包含“rec_office_suite”、“rec_games”、“rec_graphic_design”、“rec_watching_movies”列,每個列都包含該選項的票數。 每次審閱者提交他的審閱並填寫迷你調查時,數據庫表都會更新他選擇的字段以增加 +1。

問題是這最終可能會導致一個包含許多字段的表。 這會是一個問題嗎?

我會做以下事情,但讓我們看看人們推薦什么:

  1. 創建一個包含三個字段的表:Product_ID - Category_ID - Votes
  2. 每次用戶在上表的該產品增量投票字段中為該類別投票時。

這種設計將幫助您擁有與許多產品相關的類別,因為您有一個中間表來處理與該類別產品相關的投票。

我希望這有幫助。

我建議您在問題中提出的解決方案和大雄的方法相結合。

大雄是正確的,因為使用鏈接表是存儲數據的正確方式。 非常適合以后擴展(只需添加一個新的類別記錄)。 我會這樣開始。

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

通過使用這兩者,您可以輕松訪問產品/類別/投票數據,以便稍后進行更復雜的 SQL 查詢,並快速查詢產品頁面。

希望這是有道理的,半睡半醒:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM