乙個站內簡訊的資料庫設計

2022-02-27 16:36:43 字數 1952 閱讀 5247

先說一下需求和環境: 

乙個系統的站內信模組,有存在大量的按部門**的可能,相對的個人對個人的**是比較少的。 

資料庫是採用的mysql5.0。 

最先的資料庫設計如下: 

兩張表: 

一張msg表,字段如下: 

id                    int                自增長id 

senderid          int                 外來鍵關聯傳送者id 

title                 varchar(128)   簡訊標題 

content           varchar(512)   簡訊內容 

createtime      datatime        發信時間 

status             tinyint            發件箱中的狀態:0--普通;1--刪除 

一張user_has_msg表,字段如下: 

id                   int 

departmentid   int                    部門**的時候外來鍵關聯部門id,可以為空 

receverid         int                    外來鍵關聯收信人,可以為空 

msgid             int                    外來鍵關聯簡訊息 

status             tinyint               收件箱狀態:0--普通;1--刪除 

readstatus      tinyint               閱讀狀態:0--未讀;1--已讀 

這樣設計是基於如下考慮的: 

首先,msg表包含了發件箱所需要的所有資訊,程式的時候寫發件箱的時候可以只考慮操作一張資料庫表。 

第二,user_has_msg中,departmentid主要考慮的是存在大量的按照部門**的可能,這樣的話,**給乙個部門的時候之需要在兩張表上個記錄一條資料,而不需要在user_has_msg中記錄該部門員工數條記錄。 

但是,後來這個方案被我自己和同事討論後否決了,原因如下: 

首先,departmentid的存在使得沒有使用者可以刪除收件箱中的站內信,因為刪除了,其他人的收件箱裡也看不到。 

第二,msg表不能保證顯示完所有的發件箱所需要的資料,因為只有著一張表的是後讀不出來收件人資訊。 

修改後的版本是: 

將msg修改為只保純粹的資訊的表: 

id                    int                自增長id 

title                 varchar(128)   簡訊標題 

content           varchar(512)   簡訊內容 

createtime      datatime        發信時間 

將user_has_msg修改為儲存各種關係和狀態的表: 

id                   int 

senderid         int                    外來鍵關聯傳送者id 

receverid        int                    外來鍵關聯收信人 

msgid            int                    外來鍵關聯簡訊息 

sendstatus            tinyint              發件箱中的狀態:0--普通;1--刪除 

recevestatus            tinyint               收件箱狀態:0--普通;1--刪除 

readstatus     tinyint               閱讀狀態:0--未讀;1--已讀 

我記錄這個的想法一方面想記錄我自己的一些積累,另一方面是想像在網上找到更好的設計方法,尤其是解決**這個問題。 

乙個站內簡訊的資料庫設計

先說一下需求和環境 乙個系統的站內信模組,有存在大量的按部門 的可能,相對的個人對個人的 是比較少的。資料庫是採用的mysql5.0。最先的資料庫設計如下 兩張表 一張msg表,字段如下 id int 自增長id senderid int 外來鍵關聯傳送者id title varchar 128 簡...

資料庫設計之站內信設計

最近做 有個站內信功能,站內信和郵箱的功能類似,只不過不通過郵件伺服器傳送,而是直接將記錄儲存在資料庫中,要求做到能發能收能刪,能 想了下,設計如下,歡迎看到這篇文章的朋友給出建議 發件表,收件表,內容表分離,發件表中儲存傳送與草稿兩種郵件,傳送多個郵件時,收件表的收件人id與刪除狀態為填寫多個,以...

資料庫設計正規化 如何設計乙個資料庫結構

正規化 英文名稱是 normal form,它是英國人 e.f.codd 關聯式資料庫的老祖宗 在上個世紀70年代提出關聯式資料庫模型後總結出來的,正規化是關聯式資料庫理論的基礎,也是我們在設計資料庫結構過程中所要遵循的規則和指導方法。目前有跡可尋的共有8種正規化,依次是 1nf,2nf,3nf,b...