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

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

  1. 用户表(Users)
    存储用户的基本信息。
php 复制代码
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)
    存储用户之间的好友关系。
php 复制代码
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)
    存储群组的信息。
php 复制代码
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)
    存储群组中的成员信息。
php 复制代码
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)
    存储聊天消息,包括私聊和群聊。
php 复制代码
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)
    存储用户之间的拉黑关系。
php 复制代码
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)
    存储群组邀请信息。
php 复制代码
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)
);
相关推荐
halo14163 分钟前
uni-app 界面TabBar中间大图标设置的两种方法
开发语言·javascript·uni-app
daiyang123...10 分钟前
MySQL【知识改变命运】11
android·数据库·mysql
89315196044 分钟前
Android开发教程案例源码分享-匹配动画多个头像飘动效果
android·android开发·android教程·kotlin教程·android头像飘动动画·android匹配动画·android多个头像飘动动画
敲代码不忘补水1 小时前
Python Matplotlib 数据可视化全面解析:选择它的七大理由与入门简介
开发语言·python·信息可视化·numpy·pandas·matplotlib
前端拾光者1 小时前
前端数据可视化思路及实现案例
前端·数据库·信息可视化
老码沉思录1 小时前
Android开发实战班 - 网络编程 - WebSocket 实时通信
android·网络·websocket
江上清风山间明月1 小时前
Android 14 screenrecord录制视频失败的原因分析
android·视频·大小·失败·录制·screenrecord·0kb
keeng20082 小时前
Compose学习记录(3): ViewModel数据驱动更新组件
android
唐诺2 小时前
android MQTT使用示例
android·mqtt
菠菠萝宝3 小时前
【YOLOv8】安卓端部署-1-项目介绍
android·java·c++·yolo·目标检测·目标跟踪·kotlin