普通的站内信设计差不多应该是下面这样的:
消息表
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)
在用户发起一个站内信对话的时候,应该是下面几个步骤:
- 先往对话表插入一条记录,获得dialog_id
- 往消息内容表插入一条记录,获得messagetextid
- 往消息表插入一条记录,完成一条私信的发送
用户回复私信时,应该是下面几个步骤:
- 回复的时候能获得senderuid和dialogid信息
- 往消息内容表里面插入一条记录,获得messagetextid
- 往消息表里面插入对应的消息,完成一条私信的回复
在用户私信首页,应该信息每条对话的最后一条记录,查找步骤如下:
- 假设当前登录用户ID为userid,先找出所有和userid相关的dialog_id
- 对消息表进行查找,每个dialogid为dialogid,并且senderuid或recipientuid等于user_id的记录,根据时间排序,获得最后一条消息记录
当用户点击具体的一个对话时,应该显示出这个对话的私信记录:
- 根据对话ID,按照时间顺序读出所有记录
- 把记录显示出来
问题:这样设计的时候性能是否有缺陷?
其实一张表就可以解决了把
id int(11)
dialogid int(11)
senderuid int(11)
recipientuid int(11)
messagetextid int(11)
messagetext text
is_read tinyint//增加个是否已读的字段体验好点
在用户发起一个站内信对话的时候
dialog_id默认为0
当回复的时候
dialog_id为回复的私信对应的主键id