当前位置: 首页 > news >正文

用uniapp 及socket.io做一个简单聊天app1

####相关的表结构,用的是mysql

  1. 用户表(Users)
    存储用户的基本信息。
CREATE TABLE Users (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL UNIQUE,password VARCHAR(100) NOT NULL,email VARCHAR(100) UNIQUE,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
  1. 好友关系表(Friends)
    存储用户之间的好友关系。
CREATE TABLE Friends (user_id INT,friend_id INT,status ENUM('pending', 'accepted', 'blocked') DEFAULT 'pending',created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (user_id, friend_id),FOREIGN KEY (user_id) REFERENCES Users(id),FOREIGN KEY (friend_id) REFERENCES Users(id)
);
  1. 群组表(Groups)
    存储群组的信息。
CREATE TABLE Groups (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100) NOT NULL,description TEXT,owner_id INT,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,FOREIGN KEY (owner_id) REFERENCES Users(id)
);
  1. 群组成员表(GroupMembers)
    存储群组中的成员信息。
CREATE TABLE GroupMembers (group_id INT,user_id INT,role ENUM('member', 'admin') DEFAULT 'member',joined_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (group_id, user_id),FOREIGN KEY (group_id) REFERENCES Groups(id),FOREIGN KEY (user_id) REFERENCES Users(id)
);
  1. 聊天信息表(Messages)
    存储聊天消息,包括私聊和群聊。
CREATE TABLE Messages (id INT AUTO_INCREMENT PRIMARY KEY,sender_id INT,receiver_id INT, -- 可以是用户ID(私聊)或群组ID(群聊)type ENUM('private', 'group') NOT NULL,content TEXT NOT NULL,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,FOREIGN KEY (sender_id) REFERENCES Users(id),FOREIGN KEY (receiver_id) REFERENCES Groups(id) -- 如果是群聊消息
);
  1. 黑名单表(Blacklists)
    存储用户之间的拉黑关系。
CREATE TABLE Blacklists (user_id INT,blocked_user_id INT,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (user_id, blocked_user_id),FOREIGN KEY (user_id) REFERENCES Users(id),FOREIGN KEY (blocked_user_id) REFERENCES Users(id)
);
  1. 邀请表(Invites)
    存储群组邀请信息。
CREATE TABLE Invites (id INT AUTO_INCREMENT PRIMARY KEY,inviter_id INT,invitee_id INT,group_id INT,status ENUM('pending', 'accepted', 'declined') DEFAULT 'pending',created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,FOREIGN KEY (inviter_id) REFERENCES Users(id),FOREIGN KEY (invitee_id) REFERENCES Users(id),FOREIGN KEY (group_id) REFERENCES Groups(id)
);

数据库表关系描述
Users表 存储用户的基本信息。
Friends表 记录用户之间的好友关系,并支持拉黑功能。
Groups表 存储群组的信息,每个群组由一个用户创建(owner_id)。
GroupMembers表 存储群组成员及其角色(普通成员或管理员)。
Messages表 存储所有的聊天消息,可以是私聊消息或群聊消息。
Blacklists表 存储用户之间的拉黑关系。
Invites表 存储群组邀请信息,并记录邀请状态(待处理、接受、拒绝)。
示例流程
添加好友

用户A向用户B发送好友请求,在Friends表中插入一条记录,状态为pending。
用户B接受好友请求,将状态更新为accepted。
拉黑好友

用户A将用户B拉黑,在Blacklists表中插入一条记录。
在Friends表中将对应记录的状态更新为blocked。
创建群组

用户A创建一个群组,在Groups表中插入一条记录。
在GroupMembers表中插入一条记录,将用户A设为管理员。
邀请加入群组

用户A邀请用户B加入群组,在Invites表中插入一条记录,状态为pending。
用户B接受邀请,将状态更新为accepted,并在GroupMembers表中插入一条记录。
发送消息

用户A发送一条私聊消息给用户B,在Messages表中插入一条记录,type为private。
用户A在群组中发送一条消息,在Messages表中插入一条记录,type为group。
以上设计涵盖了基本的好友、群组、聊天消息以及拉黑和邀请功能。如果需要更详细的业务逻辑实现,还需要在应用层进行更多的逻辑处理。

最终的sql:

-- 创建 Users 表
CREATE TABLE Users (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL UNIQUE,password VARCHAR(100) NOT NULL,email VARCHAR(100) UNIQUE,avatar_url VARCHAR(255), -- 用户头像字段brief TEXT, -- 简介字段created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);-- 创建 Friends 表
CREATE TABLE Friends (user_id INT,group_friend_id INT,type ENUM('user', 'group') NOT NULL, -- 用于区分用户或群组status ENUM('pending', 'accepted', 'blocked') DEFAULT 'pending',created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (user_id, group_friend_id, type),FOREIGN KEY (user_id) REFERENCES Users(id),FOREIGN KEY (group_friend_id) REFERENCES Users(id) -- 或参考 ChatGroups(id) 根据 type
);-- 创建 ChatGroups 表
CREATE TABLE ChatGroups (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100) NOT NULL,description TEXT,avatar_url VARCHAR(255), -- 群组头像字段owner_id INT,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,FOREIGN KEY (owner_id) REFERENCES Users(id)
);-- 创建 Messages 表
CREATE TABLE Messages (id INT AUTO_INCREMENT PRIMARY KEY,sender_id INT,receiver_id INT, -- 可以是用户ID(私聊)或群组ID(群聊)receiver_type ENUM('user', 'group') NOT NULL, -- 用于区分用户或群组content_type ENUM('text', 'audio', 'video', 'image') NOT NULL,content TEXT NOT NULL,sender_avatar VARCHAR(255), -- 发送者头像receiver_avatar VARCHAR(255), -- 接收者头像is_retracted BOOLEAN DEFAULT 0, -- 是否被撤回retracted_at TIMESTAMP NULL DEFAULT NULL, -- 撤回时间created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,FOREIGN KEY (sender_id) REFERENCES Users(id),FOREIGN KEY (receiver_id) REFERENCES Users(id) -- 或参考 ChatGroups(id) 根据 receiver_type
);-- 创建 Blacklists 表
CREATE TABLE Blacklists (user_id INT,blocked_user_id INT,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (user_id, blocked_user_id),FOREIGN KEY (user_id) REFERENCES Users(id),FOREIGN KEY (blocked_user_id) REFERENCES Users(id)
);-- 创建 Invites 表
CREATE TABLE Invites (id INT AUTO_INCREMENT PRIMARY KEY,inviter_id INT,invitee_id INT,group_id INT,group_avatar VARCHAR(255), -- 群组头像字段inviter_avatar VARCHAR(255), -- 邀请人头像字段invitee_avatar VARCHAR(255), -- 被邀请人头像字段status ENUM('pending', 'accepted', 'declined') DEFAULT 'pending',created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,FOREIGN KEY (inviter_id) REFERENCES Users(id),FOREIGN KEY (invitee_id) REFERENCES Users(id),FOREIGN KEY (group_id) REFERENCES ChatGroups(id)
);
http://www.lryc.cn/news/409435.html

相关文章:

  • 在Postman中引用JS库
  • 学习笔记-系统框图简化求传递函数公式例题
  • postgrsql——事务概述
  • 1.Spring Boot 简介(Spring MVC+Mybatis-plus)
  • 《计算机网络》(学习笔记)
  • 指针函数和函数指针
  • Elasticsearch跨集群搜索
  • 基于FPGA的数字信号处理(19)--行波进位加法器
  • 树莓派下,centos7操作系统, TensorFlow java版实现植物分类功能
  • 开源一个react路由缓存库
  • go-kratos 学习笔记(7) 服务发现服务间通信grpc调用
  • SPSS个人版是什么软件
  • Minos 多主机分布式 docker-compose 集群部署
  • Unity + Hybridclr + Addressable + 微信小程序 热更新报错
  • 鸿蒙开发—黑马云音乐之Music页面
  • IsaacLab | 如何在Manipulation任务中添加新的目标(target)
  • 【Python从入门到进阶】61、Pandas中DataFrame对象的操作(二)
  • Linux(虚拟机)的介绍
  • CSS(九)——CSS 轮廓(outline)
  • Unity Timeline:构建复杂动画序列的利器
  • C# 与C++ cli
  • Linux文件编程--打开及创建
  • Vue3点击按钮实现跳转页面并携带参数
  • 探索Linux-1-虚拟机远程登陆XShell6远程传输文件Xftp6
  • SpringBoot中使用监听器
  • mybatise全接触-面试宝典-知识大全
  • Catalyst优化器:让你的Spark SQL查询提速10倍
  • 【Hot100】LeetCode—416. 分割等和子集
  • 前端开发知识-vue
  • 【嵌入式硬件】快衰减和慢衰减