1、概述
評論功能已經成為APP和網站開發中的必備功能。本文主要介紹評論功能的數據庫設計。
- 評論功能最主要的是發表評論和回復評論。
- 評論功能的拓展功能體現有以下幾方面:
- 單篇文章的評論數量和信息展示;
- 從時間維度,按照時間倒敘的方式展示動態的用戶評論信息;
- 不同欄目,不同模塊,不同時間維度的評論排行展示;
- 點贊數、回復數等維度的排行等。
評論的后台管理:
- 刪除;
- 推薦;
- 精華;
- 屏蔽,敏感關鍵字的庫的完善、自動屏蔽或者替換功能。
數據表設計
(本文討論兩種模式)
評論為主模式
-
需求分析
類似於CSDN這種以評論為主的模式,分為評論和回復。
把所有回復都放在評論下面,類似於樹狀結構。 -
數據庫設計
在以評論為主的樹形顯示情況下,可以將評論分為評論表和回復表。評論掛在主題下面,而回復掛在評論下面
評論表:
表字段 | 字段說明 |
---|---|
id | 主鍵 |
topic_id | 主題id |
topic_type | 主題類型 |
content | 評論內容 |
from_uid | 評論用戶id |
回復表:
表字段 | 字段說明 |
---|---|
id | 主鍵 |
comment_id | 評論id |
reply_id | 回復目標id |
reply_type | 回復類型 |
content | 回復內容 |
from_uid | 回復用戶id |
to_uid | 目標用戶id |
由於我們拆分了評論和回復,那么評論表就不再需要目標用戶字段了,因為評論均是用戶對主題的評論,評論表的設計更佳簡潔了。
reply_type:表示回復的類型,因為回復可以是針對評論的回復(comment),也可以是針對回復的回復(reply), 通過這個字段來區分兩種情景。
reply_id:表示回復目標的id,如果reply_type是comment的話,那么reply_id=commit_id,如果reply_type是reply的話,這表示這條回復的父回復。
一問一答模式
- 需求分析
簡單的評論設計,但適用於很多app。比如微信朋友圈
這種設計簡單、直接,也滿足了用戶評論、回復的基本要求,對於沒有大量用戶評論的APP需求足夠。
- 數據庫設計
這種場景下評論一般較少,不區分評論與回復。使用一張表就可以達到效果。
表字段 | 字段說明 |
---|---|
id | 主鍵 |
topic_id | 主題id |
topic_type | 主題類型 |
content | 評論內容 |
from_uid | 評論用戶id |
to_uid | 評論目標用戶id |
topic_type:為了能復用評論模塊,我們引入這個字段來區分主題的類別。
from_uid:表示評論人的id,通過該id我們可以檢索到評論人的相關信息。
to_uid 是評論目標人的id,如果沒有目標人,則該字段為空
出於性能的考慮,往往我們會冗余評人的相關信息到評論表中,比如評論人的nick、頭像,目標用戶也是如此。 這樣一來我們就只用查詢單表就可以達到顯示的效果
有時,目標用戶有多個,那么可以將to_uid字段修改為to_uids,保存時用分隔符來分割用戶id,而目標用戶的信息再去查詢緩存或者數據庫。