站內信的資料庫設計
阿新 • • 發佈:2018-11-03
站內信總體可以分為兩種:點到點,點到面
點到點即使用者給使用者,管理員給使用者
點到面即管理員給使用者組
點到點的設計
若只存在點到點或使用者量很少的情況下用一張表既可以
列名 | 含義 |
---|---|
sendId | 傳送者Id |
recId | 接受者Id |
createAt | 傳送時間 |
status | 閱讀等狀態 |
content | 內容 |
title | 標題 |
使用者比較固定,點到點較多的設計
若使用者比較固定,點到點的訊息較多可以用兩張表來實現
表一(message_text)主要用來記錄訊息的具體內容屬性
表二(message)主要用來記錄訊息的接收物件閱讀狀態等資訊
表一表二均在建立表時生成。好處:減少訊息內容的重複儲存
message_text:
列名 | 含義 |
---|---|
sendId | 傳送者Id |
createAt | 傳送時間 |
content | 內容 |
title | 標題 |
message:
列名 | 含義 |
---|---|
recId | 閱讀者Id |
createAt | 傳送時間 |
status | 閱讀等狀態 |
使用者資料量大,存在一定的殭屍使用者。點到面較多的設計
若使用者的資料量很大,使用第二種方法很可能在生成訊息一瞬間就要生成很多張表可能會造成伺服器宕機。若殭屍使用者多,會造成資源浪費。
使用兩張表解決:
表一(message_text)主要用來記錄訊息的具體內容屬性
表二(message)主要用來記錄訊息的接收物件閱讀狀態等資訊
表一建立表時生成,表二在使用者登入/拉取訊息列表時生成,好處:建立訊息時只記錄一條資訊,避免集中創表導致宕機,根據使用者的行為生成第二張表,避免殭屍使用者傳送訊息造成浪費
message_text:
列名 | 含義 |
---|---|
sendId | 傳送者Id |
createAt | 傳送時間 |
content | 內容 |
title | 標題 |
type | 接收者型別單使用者/使用者群組 |
recId | 接受使用者/使用者群組Id |
message:
列名 | 含義 |
---|---|
recId | 傳送者使用者Id |
createAt | 接收時間 |
status | 閱讀等狀態 |
messageId | 訊息內容Id |