zoukankan      html  css  js  c++  java
  • 关于聊天记录数据库表结构设计

    1、首先表结构设计针对单个用户,然后拓展到n个用用户记录的存储。

    2、这里会用msql数据库给出数据库表脚本,但是实际生产环境应该是在APP端生成sqlite数据库文件,把sqlite文件上传到server端作为聊天记录存储。

    有【联系人表】、【群组表】、【会话表】、【用户表】、【聊天记录表】

    # 聊天记录表

    CREATE TABLE `message` (
      `msg_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '消息id,自增长',
      `msg_type` int(11) DEFAULT NULL COMMENT '类型 1:文字;47:emoji;43:音频;436207665:红包;49:文件;48:位置;3:图片',
      `is_send` int(11) DEFAULT NULL COMMENT '是否是自己发送 0:不是;1:是',
      `create_time` datetime DEFAULT NULL COMMENT '消息发送时间',
      `content` text COMMENT '消息格式【发信人id:内容】',
      `talker` varchar(55) DEFAULT NULL COMMENT '聊天对象。群聊,则是群id(xxx@chatroom);一对一,聊天对象的唯一标识。',
      PRIMARY KEY (`msg_id`),
      KEY `index_chat_id` (`talker`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

    注意⚠️ content:不是自己发送的消息,并且是群聊,才会带有发信人id标记。

    msg_id在同一个账户切换了设备后产生的msg_id可能是重复的,所以在聊天记录存储在server端时需要注意到这一点。

     

    #联系人表

    CREATE TABLE `recontact` (
      `username` varchar(45) NOT NULL COMMENT '联系人唯一标识',
      `nickname` varchar(45) DEFAULT NULL COMMENT '联系人昵称',
      `remark` varchar(45) DEFAULT NULL COMMENT '备注名称',
      `avatar` varchar(200) DEFAULT NULL COMMENT '联系人头像地址',
      `is_friend` varchar(45) DEFAULT NULL COMMENT '是否是好友。1,3 好友 4;群里非好友',
      PRIMARY KEY (`username`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='联系人,非好友';

    联系人表存储了好友以及非好友。

    #群组表

    CREATE TABLE `chat_room` (
      `chat_room_name` varchar(30) CHARACTER SET utf8mb4 NOT NULL,
      `member_list` text CHARACTER SET utf8mb4 COMMENT '群组成员id列表,分号分割。a53255001;nan1242;jiabailo002',
      `display_name_list` text CHARACTER SET utf8mb4 COMMENT '群成员昵称列表【中文顿号分割】海、二、老僧、刘伟、齐彬、毛、Echo、曹',
      `room_owner` varchar(45) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '群主id',
      `self_display_name` varchar(45) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '自己在群里的自定义群昵称',
      `chat_room_nick` varchar(45) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '群昵称,没有自定义群昵称则从display_name中截取20个字符作为群昵称。',
      PRIMARY KEY (`chat_room_name`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='群组';
    chat_room_name为群id,格式为xxx@chatroom

    #用户表

    CREATE TABLE `users` (
      `id` varchar(45) NOT NULL COMMENT '用户id',
      `nickname` varchar(45) DEFAULT NULL,
      `email` varchar(45) DEFAULT NULL,
      `sign` varchar(200) DEFAULT NULL COMMENT '签名',
      `city` varchar(45) DEFAULT NULL,
      `provincial` varchar(45) DEFAULT NULL COMMENT '省份',
      `avatar_url` varchar(500) DEFAULT NULL COMMENT '头像',
      `created_at` datetime DEFAULT NULL,
      `updated_at` datetime DEFAULT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `id_UNIQUE` (`id`),
      KEY `index_updated_at` (`updated_at`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户';

     

    QQ技术交流群:282575808

    --------------------------------------

    声明: 原创文章,未经允许,禁止转载!

    --------------------------------------

     

     

  • 相关阅读:
    常见的 常见的 User_Agent
    scp 传送数据的几种方式
    最近面试的几个问题 (三) io 多路复用
    mac 磁盘分区 时间胶囊创建失败
    最近面试的几个问题 (二) request_url 去重之布隆去重
    最近面试的几个问题 (一) 进程和线程、协程的区别
    chromedriver与chrome最新版本对应表 转自-河岸上的酸菜鱼 简书地址-https://www.jianshu.com/u/bbea92f78aca
    Sql代码美化工具:Sql Pretty Printer for SSMS V3.6.1
    如何给非理科生讲明白什么是云计算、大数椐(下)
    如何给非理科生讲明白什么是云计算、大数椐(上)
  • 原文地址:https://www.cnblogs.com/xxoome/p/9149923.html
Copyright © 2011-2022 走看看