阅读量:0
####相关的表结构,用的是mysql
- 用户表(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 );
- 好友关系表(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) );
- 群组表(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) );
- 群组成员表(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) );
- 聊天信息表(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) -- 如果是群聊消息 );
- 黑名单表(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, 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) );