站内信数据库设计


普通的站内信设计差不多应该是下面这样的:

消息表


 id int(11)
sender_uid int(11)
recipient_uid int(11)
dialog_id int(11)
message_text_id int(11)

消息内容表:


 message_text_id int(11)
message_text text

对话表


 dialog_id int(11)

在用户发起一个站内信对话的时候,应该是下面几个步骤:

  1. 先往对话表插入一条记录,获得dialog_id
  2. 往消息内容表插入一条记录,获得message text id
  3. 往消息表插入一条记录,完成一条私信的发送

用户回复私信时,应该是下面几个步骤:

  1. 回复的时候能获得sender uid和dialog id信息
  2. 往消息内容表里面插入一条记录,获得message text id
  3. 往消息表里面插入对应的消息,完成一条私信的回复

在用户私信首页,应该信息每条对话的最后一条记录,查找步骤如下:

  1. 假设当前登录用户ID为user id,先找出所有和user id相关的dialog_id
  2. 对消息表进行查找,每个dialog id为dialog id,并且sender uid或recipient uid等于user_id的记录,根据时间排序,获得最后一条消息记录

当用户点击具体的一个对话时,应该显示出这个对话的私信记录:

  1. 根据对话ID,按照时间顺序读出所有记录
  2. 把记录显示出来

问题:这样设计的时候性能是否有缺陷?

数据库设计

今天天气不错 10 years, 10 months ago

其实一张表就可以解决了把
id int(11)
dialog id int(11)
sender
uid int(11)
recipient uid int(11)
message
text id int(11)
message
text text
is_read tinyint//增加个是否已读的字段体验好点

在用户发起一个站内信对话的时候
dialog_id默认为0

当回复的时候
dialog_id为回复的私信对应的主键id

Ryo·X answered 10 years, 10 months ago

Your Answer