本文主要是给一些开始接触IM系统,做客户端本地数据库的人员介绍的。如有错误还请指出,thx.
自己目前做过两个IM系统,接触过一般常用的IM,都是自己开发没用第三方的,所以就总结一下IM系统中客户端的数据库的基本设计的字段。
这里只是一般需要字段,针对自己的需求(很多时候需要根据UI进行修改定制),需要自己看需求添加or删除。
主要表
一般主要需要建立的表包括:
-
会话表
-
聊天详情表
-
群组表
-
群组信息表
-
群成员
-
联系人表
表字段设计
a. 会话表
一般主要的字段如下:
id->auto increament primary key 自增长主键
uid->integer/varchar 该条消息所属消息,比如我登陆了,我发送/接收到消息入库的时候写入自己的uid,他的作用是多用户登陆的时候区分回话表
chatId->integet/varchar 服务器生产回话 id当前的回话id,它作用是标识一个回话,比如我跟你聊天or 你跟我聊天,我们的回话id应该是一致的,对于群聊也是,在群中发送消息,每个人的回话id是一致的。
c_id->varchar unique,他是标记一台设备上某个用户的唯一回话,用于更新避免插入多条数据的,可以用到sqlite的update or replace,他的值可以是hash(uid+chatid)或者其他,该字段可以只是客户端具有,客户端生成并且自己维护。
from->integer/varchar 发送人id(自己发送就是自己的uid,不然就是别人的uid)
to->integer/varchar 接收人id(uid/group_id)
last_msg->varchar 最后的一条消息内容
last_user_name->varchar 最后的发送者名称
last_time->integer 最后消息发送时间
chat_type->integer 回话类型(群组消息/个人聊天/系统消息)
msg_type->integer 消息类型(文字/图片/文件/音乐等)
unread_count->integer 改回话未读数目
复制代码
该表注意的问题:同一个回话不要插入多条数据,利用c_id来进行replace数据,比如收到一个新的回话消息存在就更新就好了。可以用触发器也可以用sql语句。
b. 聊天详情表
字段设计:
id->integer auto increament primary key 自增长主键
msg_id 消息唯一id,一般服务器生成,或者客户端本地使用UUID生成
uid->Interger/varchar 所属者uid
from->Interger/varchar 发送者uid
from_avatar->Interger/varchar 发送者头像
from_name-> varchar 发送者名称
to-> Interger/varchar 接受者(uid/group_id)
chat_type 会话类型
msg_type 消息类型
msg-> 消息内容
file_info->文件信息json格式
send_time->发送时间
send_status->发送状态 发送中,发送完成,发送失败
extra->把人插入 一般可以为null,预留的额外字段,使用JOSN字符串存储
复制代码
c. 群组表
字段设计
id->integer auto increament primary key 自增长主键
group_id Integer/varchar unique
group_name varchar 群组名称
group_name 群组头像
group_type 群组类型
group_num 群组数量
group_create_uid 群组创建者uid
复制代码
d. 群组信息表
群组信息的字段可以继承群列表的字段。字段设计
id->integer