私信系统的设计

需求:

  • 最基本的写、看、删
  • 删除效果只限于操作者本人,即本人删除私信对方仍可以看到私信记录
  • 会话合并显示,将与同一个人的私信记录合并成一条记录显示

 

数据结构:

mail-db图1.私信数据结构

三个表分别是: 会话表(mail_session)、私信-会话关系表(mail_map)、私信表(mail)

 

 说明:

mail-session图2.效果图

  1. 会话: 用户与用户的关系。
  • 当A发送一条私信给B时会产生两条会话记录:

A=>B (from_uid=A, to_uid=B)

B=>A (from_uid=B, to_uid=A)

  • 用户查看自己的私信列表时,只需查询 会话表mail_session(from_uid=:uid)即可
  • 用户删除自己的会话时,不会影响到对方
  • 删除会话时应该把 会话-私信表 mail_map 的关系也删除,避免冗余数据
  1. 信息:用户产生的文字
  • 当A发送一条私信给B时会产生两条会话-私信关系记录,分别与用户A、B自己的会话关联
  • 用户查看某个会话时,查询 mail_map LEFT JOIN mail (sess_id=:sess_id)
  • 用户删除某条私信时,在会话-私信表 mail_map 上删除相应记录 (map_id=:map_id) 或者(sess_id=:sess_id AND mail_id=:mail_id)即可
  • 发送私信时将最新私信内容更新到会话表的 last_message 字段中,适当的数据冗余简化私信会话列表的查询,可利用程序或触发器实现