網站點贊 評論 回覆 資料庫設計
本文主要分享了我在設計評論模組中的一些心得,希望對讀者有些許幫助。
關於這種常用功能,查了許多資料 又基於公司的業務場景
1.由使用者發表作品 其他已註冊使用者 在瀏覽個使用者發表的作品時可以進行 點贊 評論 (同時可以撤銷點贊)
2.同時對評論的內容也可以進行相應的點贊 (同時可以撤銷點贊)
3.以及後期規劃 對評論的使用者可以進行相應的回覆
基於以上三點 我查了一些網上資料
最終決定 設計以下 三張表
使用者表就不多說了 id account nickname password 等等
評論表(comment)設計如下:
- 表字段 欄位說明
- id 主鍵
- compose_id 作品id
- compose_type 作品型別
- content 評論內容
- from_userid 評論使用者id
回覆表(reply)設計:
- 表字段 欄位說明
- id 主鍵
- comment_id 評論id
- reply_id 回覆目標id
- reply_type 回覆型別
- content 回覆內容
- from_userid 回覆使用者id
- to_userid 目標使用者id
點贊表(zan)設計如下:
- 表字段 欄位說明
- id 主鍵
- type_id 對應的作品或評論的id
- type 點贊型別 1作品點贊 2 評論點贊 3....
- user_id 使用者id
- status 點贊狀態 0--取消贊 1--有效贊
對於 評論表來說 它是掛載於 作品之下的 。 1個作品有多個評論。
而回復表,由於業務場景是 不管對評論表進行回覆還是對於回覆進行回覆 它都是屬於 評論表下的子集 不會出現子子孫孫這種樹形結構。 所以在回覆表設定一個父親
comment_id, 有reply_type 來區分 該條回覆是針對評論進行回覆 還是針對回覆進行回覆
對於 點贊表 ---考慮到 點贊可以對作品進行點贊 也可以對評論進行點贊 設計type 來區分 該點贊型別( type )是針對 作品還是評論 以及後期有可能的需求 回覆點贊等等
由於公司沒用到redis 直接操作資料庫mysql, 一般來說 對於作品或文章來時 點贊與取消贊 是一件很頻繁操作的事件 ,這樣資料量一大感覺 頻繁的更新會很耗伺服器效能。目前 想法是 用個redis做快取,頻繁點讚的更新操作 放到redis中 一個放(使用者最終的點贊狀態) 一個放待更新待插入到資料庫的點贊狀態,通過一個定時任務去 跑 待更新待插入的資料同步到資料中
對於評論 想法是 先取拉取資料到快取中 用快取輸出到頁面。