站内信数据库设计

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

消息表

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. 往消息内容表插入一条记录,获得messagetextid
  3. 往消息表插入一条记录,完成一条私信的发送

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

  1. 回复的时候能获得senderuid和dialogid信息
  2. 往消息内容表里面插入一条记录,获得messagetextid
  3. 往消息表里面插入对应的消息,完成一条私信的回复

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

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

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

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

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

阅读 11.9k
2 个回答

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

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

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

messagetextid int(11) 这个字段是干吗用的?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进