前言
衔接上篇文章,这篇是相关的表结构sql语句记录
EchoMeet 会议系统数据库表结构设计
📋 设计概述
本文档定义了EchoMeet音视频会议系统的完整数据库表结构,采用微服务架构设计,支持高并发、可扩展的会议场景。
🎯 设计原则
- 高并发支持:优化索引设计,支持大量并发用户
- 数据一致性:合理的外键关系和约束设计
- 扩展性:预留扩展字段,便于后期功能迭代
- 性能优化:合理的分表策略和缓存设计
- 数据安全:敏感数据加密,软删除机制
- 职责分离:用户基础信息与会议配置分离,便于维护
📊 核心业务表设计
1. 用户表 (users)
用户基础信息表,只存储用户的核心身份信息。
CREATE TABLE `users` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`name` varchar(255) NOT NULL COMMENT '真实姓名',
`nick_name` varchar(255) NOT NULL COMMENT '昵称',
`gender` varchar(255) DEFAULT 'unknown' COMMENT '性别:male=男,female=女,unknown=未知',
`avatar` varchar(255) DEFAULT NULL COMMENT '头像URL',
`email` varchar(255) NOT NULL COMMENT '邮箱地址',
`phone` varchar(20) NOT NULL COMMENT '手机号码',
`password` varchar(255) NOT NULL COMMENT '密码(加密存储)',
`status` tinyint unsigned NOT NULL DEFAULT '1' COMMENT '状态:0=禁用,1=启用,2=已删除',
`online_status` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '在线状态:0=离线,1=在线,2=忙碌,3=离开',
`last_login_at` datetime DEFAULT NULL COMMENT '最后登录时间',
`last_ip` varchar(255) DEFAULT NULL COMMENT '最后登录IP地址',
`device` varchar(255) DEFAULT NULL COMMENT '登录设备信息',
`platform` varchar(255) DEFAULT NULL COMMENT '登录平台:web=网页,android=安卓,ios=苹果,desktop=桌面',
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted_at` datetime DEFAULT NULL COMMENT '删除时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_email` (`email`),
UNIQUE KEY `uk_phone` (`phone`),
UNIQUE KEY `uk_nick_name` (`nick_name`),
KEY `idx_status` (`status`),
KEY `idx_online_status` (`online_status`),
KEY `idx_created_at` (`created_at`),
KEY `idx_deleted_at` (`deleted_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户基础信息表';
2. 用户会议配置表 (user_meeting_configs)
用户会议相关的配置和统计信息,与用户表分离,便于扩展和维护。
CREATE TABLE `user_meeting_configs` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`user_id` bigint unsigned NOT NULL COMMENT '用户ID',
`meeting_nickname` varchar(100) DEFAULT NULL COMMENT '会议中显示的昵称',
`default_audio_enabled` tinyint unsigned NOT NULL DEFAULT '1' COMMENT '默认音频开启:0=关闭,1=开启',
`default_video_enabled` tinyint unsigned NOT NULL DEFAULT '1' COMMENT '默认视频开启:0=关闭,1=开启',
`meeting_permissions` json DEFAULT NULL COMMENT '会议权限设置(JSON格式)',
`total_meeting_time` bigint unsigned NOT NULL DEFAULT '0' COMMENT '累计会议时长(秒)',
`total_meetings_hosted` int unsigned NOT NULL DEFAULT '0' COMMENT '主持会议总数',
`total_meetings_joined` int unsigned NOT NULL DEFAULT '0' COMMENT '参与会议总数',
`preferred_camera` varchar(255) DEFAULT NULL COMMENT '首选摄像头设备ID',
`preferred_microphone` varchar(255) DEFAULT NULL COMMENT '首选麦克风设备ID',
`preferred_speaker` varchar(255) DEFAULT NULL COMMENT '首选扬声器设备ID',
`video_quality` tinyint unsigned NOT NULL DEFAULT '2' COMMENT '视频质量:1=低,2=中,3=高',
`auto_join_audio` tinyint unsigned NOT NULL DEFAULT '1' COMMENT '自动加入音频:0=否,1=是',
`auto_join_video` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '自动加入视频:0=否,1=是',
`enable_noise_suppression` tinyint unsigned NOT NULL DEFAULT '1' COMMENT '启用噪音抑制:0=否,1=是',
`enable_echo_cancellation` tinyint unsigned NOT NULL DEFAULT '1' COMMENT '启用回声消除:0=否,1=是',
`last_meeting_at` datetime DEFAULT NULL COMMENT '最后参与会议时间',
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_user_id` (`user_id`),
KEY `idx_meeting_stats` (`total_meetings_hosted`, `total_meetings_joined`),
KEY `idx_last_meeting_at` (`last_meeting_at`),
CONSTRAINT `fk_user_meeting_configs_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户会议配置表';
3. 会议室表 (meeting_rooms)
会议室是会议的载体,支持固定会议室和临时会议室。
CREATE TABLE `meeting_rooms` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`room_number` varchar(32) NOT NULL COMMENT '会议室号码(唯一标识)',
`room_name` varchar(255) NOT NULL COMMENT '会议室名称',
`room_type` tinyint unsigned NOT NULL DEFAULT '1' COMMENT '会议室类型:1=临时房间,2=固定房间,3=个人房间',
`owner_id` bigint unsigned NOT NULL COMMENT '房主用户ID',
`owner_type` tinyint unsigned NOT NULL DEFAULT '1' COMMENT '房主类型:1=普通用户,2=管理员',
`max_participants` int unsigned NOT NULL DEFAULT '50' COMMENT '最大参与人数',
`password` varchar(255) DEFAULT NULL COMMENT '会议室密码(加密存储)',
`is_public` tinyint unsigned NOT NULL DEFAULT '1' COMMENT '是否公开:0=私有,1=公开',
`description` text COMMENT '会议室描述',
`settings` json COMMENT '会议室设置(JSON格式)',
`status` tinyint unsigned NOT NULL DEFAULT '1' COMMENT '状态:0=禁用,1=启用,2=维护中',
`expires_at` datetime DEFAULT NULL COMMENT '过期时间(临时房间)',
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted_at` datetime DEFAULT NULL COMMENT '删除时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_room_number` (`room_number`),
KEY `idx_owner` (`owner_id`, `owner_type`),
KEY `idx_status_type` (`status`, `room_type`),
KEY `idx_created_at` (`created_at`),
KEY `idx_deleted_at` (`deleted_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会议室表';
4. 会议表 (meetings)
记录具体的会议会话信息,一个会议室可以有多次会议。
CREATE TABLE `meetings` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '会议ID',
`meeting_id` varchar(64) NOT NULL COMMENT '会议唯一标识符',
`room_id` bigint unsigned NOT NULL COMMENT '会议室ID',
`title` varchar(255) NOT NULL COMMENT '会议标题',
`description` text COMMENT '会议描述',
`host_id` bigint unsigned NOT NULL COMMENT '主持人用户ID',
`host_type` tinyint unsigned NOT NULL DEFAULT '1' COMMENT '主持人类型:1=普通用户,2=管理员',
`scheduled_start_time` datetime DEFAULT NULL COMMENT '预定开始时间',
`scheduled_end_time` datetime DEFAULT NULL COMMENT '预定结束时间',
`actual_start_time` datetime DEFAULT NULL COMMENT '实际开始时间',
`actual_end_time` datetime DEFAULT NULL COMMENT '实际结束时间',
`meeting_type` tinyint unsigned NOT NULL DEFAULT '1' COMMENT '会议类型:1=即时会议,2=预约会议,3=周期会议',
`status` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '会议状态:0=未开始,1=进行中,2=已结束,3=已取消',
`max_participants` int unsigned NOT NULL DEFAULT '50' COMMENT '最大参与人数',
`current_participants` int unsigned NOT NULL DEFAULT '0' COMMENT '当前参与人数',
`password` varchar(255) DEFAULT NULL COMMENT '会议密码(加密存储)',
`settings` json COMMENT '会议设置(录制、共享等)',
`metadata` json COMMENT '会议元数据(WebRTC相关配置)',
`recording_enabled` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '是否启用录制:0=否,1=是',
`recording_path` varchar(500) DEFAULT NULL COMMENT '录制文件路径',
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted_at` datetime DEFAULT NULL COMMENT '删除时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_meeting_id` (`meeting_id`),
KEY `idx_room_id` (`room_id`),
KEY `idx_host` (`host_id`, `host_type`),
KEY `idx_status_type` (`status`, `meeting_type`),
KEY `idx_scheduled_time` (`scheduled_start_time`, `scheduled_end_time`),
KEY `idx_created_at` (`created_at`),
KEY `idx_deleted_at` (`deleted_at`),
CONSTRAINT `fk_meetings_room` FOREIGN KEY (`room_id`) REFERENCES `meeting_rooms` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会议表';
5. 会议参与者表 (meeting_participants)
记录会议的参与者信息和状态。
CREATE TABLE `meeting_participants` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '参与记录ID',
`meeting_id` bigint unsigned NOT NULL COMMENT '会议ID',
`user_id` bigint unsigned NOT NULL COMMENT '用户ID',
`user_type` tinyint unsigned NOT NULL DEFAULT '1' COMMENT '用户类型:1=普通用户,2=管理员',
`role` tinyint unsigned NOT NULL DEFAULT '1' COMMENT '会议角色:1=参与者,2=主持人,3=协作主持人',
`join_time` datetime DEFAULT NULL COMMENT '加入时间',
`leave_time` datetime DEFAULT NULL COMMENT '离开时间',
`duration` int unsigned DEFAULT '0' COMMENT '参与时长(秒)',
`status` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '参与状态:0=邀请中,1=已加入,2=已离开,3=被踢出',
`connection_status` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '连接状态:0=离线,1=在线,2=连接中,3=重连中',
`audio_enabled` tinyint unsigned NOT NULL DEFAULT '1' COMMENT '音频状态:0=关闭,1=开启',
`video_enabled` tinyint unsigned NOT NULL DEFAULT '1' COMMENT '视频状态:0=关闭,1=开启',
`screen_sharing` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '屏幕共享:0=关闭,1=开启',
`client_info` json COMMENT '客户端信息(设备、浏览器等)',
`network_stats` json COMMENT '网络统计信息',
`permissions` json COMMENT '权限设置(发言、共享等)',
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_meeting_user` (`meeting_id`, `user_id`, `user_type`),
KEY `idx_meeting_id` (`meeting_id`),
KEY `idx_user` (`user_id`, `user_type`),
KEY `idx_status` (`status`, `connection_status`),
KEY `idx_join_time` (`join_time`),
CONSTRAINT `fk_participants_meeting` FOREIGN KEY (`meeting_id`) REFERENCES `meetings` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会议参与者表';
6. 会议邀请表 (meeting_invitations)
管理会议邀请信息。
CREATE TABLE `meeting_invitations` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '邀请ID',
`meeting_id` bigint unsigned NOT NULL COMMENT '会议ID',
`inviter_id` bigint unsigned NOT NULL COMMENT '邀请人ID',
`inviter_type` tinyint unsigned NOT NULL DEFAULT '1' COMMENT '邀请人类型:1=普通用户,2=管理员',
`invitee_id` bigint unsigned DEFAULT NULL COMMENT '被邀请人ID(注册用户)',
`invitee_email` varchar(255) DEFAULT NULL COMMENT '被邀请人邮箱(未注册用户)',
`invitee_phone` varchar(20) DEFAULT NULL COMMENT '被邀请人手机号',
`invitation_code` varchar(64) NOT NULL COMMENT '邀请码',
`message` text COMMENT '邀请消息',
`status` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '邀请状态:0=待回复,1=已接受,2=已拒绝,3=已过期',
`response_time` datetime DEFAULT NULL COMMENT '回复时间',
`expires_at` datetime NOT NULL COMMENT '过期时间',
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_invitation_code` (`invitation_code`),
KEY `idx_meeting_id` (`meeting_id`),
KEY `idx_inviter` (`inviter_id`, `inviter_type`),
KEY `idx_invitee` (`invitee_id`),
KEY `idx_email` (`invitee_email`),
KEY `idx_status` (`status`),
KEY `idx_expires_at` (`expires_at`),
CONSTRAINT `fk_invitations_meeting` FOREIGN KEY (`meeting_id`) REFERENCES `meetings` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会议邀请表';
7. 会议消息表 (meeting_messages)
存储会议期间的聊天消息。
CREATE TABLE `meeting_messages` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '消息ID',
`meeting_id` bigint unsigned NOT NULL COMMENT '会议ID',
`sender_id` bigint unsigned NOT NULL COMMENT '发送者ID',
`sender_type` tinyint unsigned NOT NULL DEFAULT '1' COMMENT '发送者类型:1=普通用户,2=管理员,3=系统',
`message_type` tinyint unsigned NOT NULL DEFAULT '1' COMMENT '消息类型:1=文本,2=图片,3=文件,4=系统通知',
`content` text NOT NULL COMMENT '消息内容',
`file_url` varchar(500) DEFAULT NULL COMMENT '文件URL(文件消息)',
`file_size` bigint unsigned DEFAULT NULL COMMENT '文件大小(字节)',
`file_type` varchar(50) DEFAULT NULL COMMENT '文件类型',
`reply_to_id` bigint unsigned DEFAULT NULL COMMENT '回复的消息ID',
`is_private` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '是否私聊:0=公开,1=私聊',
`recipient_id` bigint unsigned DEFAULT NULL COMMENT '私聊接收者ID',
`status` tinyint unsigned NOT NULL DEFAULT '1' COMMENT '消息状态:0=已删除,1=正常,2=已撤回',
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_meeting_id` (`meeting_id`),
KEY `idx_sender` (`sender_id`, `sender_type`),
KEY `idx_message_type` (`message_type`),
KEY `idx_created_at` (`created_at`),
KEY `idx_reply_to` (`reply_to_id`),
CONSTRAINT `fk_messages_meeting` FOREIGN KEY (`meeting_id`) REFERENCES `meetings` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会议消息表';
8. 会议录制表 (meeting_recordings)
管理会议录制文件信息。
CREATE TABLE `meeting_recordings` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '录制ID',
`meeting_id` bigint unsigned NOT NULL COMMENT '会议ID',
`recording_id` varchar(64) NOT NULL COMMENT '录制唯一标识',
`title` varchar(255) NOT NULL COMMENT '录制标题',
`file_path` varchar(500) NOT NULL COMMENT '录制文件路径',
`file_size` bigint unsigned NOT NULL DEFAULT '0' COMMENT '文件大小(字节)',
`duration` int unsigned NOT NULL DEFAULT '0' COMMENT '录制时长(秒)',
`format` varchar(20) NOT NULL DEFAULT 'mp4' COMMENT '文件格式',
`resolution` varchar(20) DEFAULT NULL COMMENT '视频分辨率',
`start_time` datetime NOT NULL COMMENT '录制开始时间',
`end_time` datetime DEFAULT NULL COMMENT '录制结束时间',
`status` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '录制状态:0=录制中,1=已完成,2=处理中,3=失败',
`download_count` int unsigned NOT NULL DEFAULT '0' COMMENT '下载次数',
`is_public` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '是否公开:0=私有,1=公开',
`password` varchar(255) DEFAULT NULL COMMENT '访问密码(加密存储)',
`expires_at` datetime DEFAULT NULL COMMENT '过期时间',
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted_at` datetime DEFAULT NULL COMMENT '删除时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_recording_id` (`recording_id`),
KEY `idx_meeting_id` (`meeting_id`),
KEY `idx_status` (`status`),
KEY `idx_created_at` (`created_at`),
KEY `idx_deleted_at` (`deleted_at`),
CONSTRAINT `fk_recordings_meeting` FOREIGN KEY (`meeting_id`) REFERENCES `meetings` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会议录制表';
🔧 扩展功能表设计
9. 会议模板表 (meeting_templates)
预设的会议模板,方便快速创建会议。
CREATE TABLE `meeting_templates` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '模板ID',
`template_name` varchar(255) NOT NULL COMMENT '模板名称',
`creator_id` bigint unsigned NOT NULL COMMENT '创建者ID',
`creator_type` tinyint unsigned NOT NULL DEFAULT '1' COMMENT '创建者类型:1=普通用户,2=管理员',
`is_public` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '是否公开:0=私有,1=公开',
`template_config` json NOT NULL COMMENT '模板配置(会议设置、权限等)',
`usage_count` int unsigned NOT NULL DEFAULT '0' COMMENT '使用次数',
`status` tinyint unsigned NOT NULL DEFAULT '1' COMMENT '状态:0=禁用,1=启用',
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted_at` datetime DEFAULT NULL COMMENT '删除时间',
PRIMARY KEY (`id`),
KEY `idx_creator` (`creator_id`, `creator_type`),
KEY `idx_public_status` (`is_public`, `status`),
KEY `idx_created_at` (`created_at`),
KEY `idx_deleted_at` (`deleted_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会议模板表';
10. 会议统计表 (meeting_statistics)
会议相关统计数据,用于分析和报表。
CREATE TABLE `meeting_statistics` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '统计ID',
`meeting_id` bigint unsigned NOT NULL COMMENT '会议ID',
`date` date NOT NULL COMMENT '统计日期',
`total_participants` int unsigned NOT NULL DEFAULT '0' COMMENT '总参与人数',
`max_concurrent_participants` int unsigned NOT NULL DEFAULT '0' COMMENT '最大并发人数',
`total_duration` int unsigned NOT NULL DEFAULT '0' COMMENT '会议总时长(秒)',
`average_duration_per_user` int unsigned NOT NULL DEFAULT '0' COMMENT '用户平均参与时长(秒)',
`audio_quality_score` decimal(3,2) DEFAULT NULL COMMENT '音频质量评分',
`video_quality_score` decimal(3,2) DEFAULT NULL COMMENT '视频质量评分',
`network_quality_score` decimal(3,2) DEFAULT NULL COMMENT '网络质量评分',
`total_messages` int unsigned NOT NULL DEFAULT '0' COMMENT '消息总数',
`screen_sharing_duration` int unsigned NOT NULL DEFAULT '0' COMMENT '屏幕共享总时长(秒)',
`recording_duration` int unsigned NOT NULL DEFAULT '0' COMMENT '录制时长(秒)',
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_meeting_date` (`meeting_id`, `date`),
KEY `idx_date` (`date`),
KEY `idx_created_at` (`created_at`),
CONSTRAINT `fk_statistics_meeting` FOREIGN KEY (`meeting_id`) REFERENCES `meetings` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会议统计表';
📈 性能优化建议
1. 分表策略
- 会议消息表:按月分表,提高查询性能
- 会议统计表:按年分表,便于历史数据管理
2. 索引优化
- 复合索引覆盖常用查询场景
- 定期分析慢查询,优化索引策略
3. 缓存策略
- Redis缓存:
- 活跃会议信息(30分钟过期)
- 用户会议权限(10分钟过期)
- 会议室状态(实时更新)
4. 数据清理
- 定期清理过期的临时会议室
- 归档历史会议数据
- 清理无效的邀请记录
🔒 安全考虑
1. 数据加密
- 会议密码使用bcrypt加密
- 敏感配置信息加密存储
2. 权限控制
- 基于角色的访问控制(RBAC)
- 会议级别的权限管理
3. 数据备份
- 定期数据库备份
- 重要会议录制文件备份
📝 总结
本数据库设计涵盖了EchoMeet会议系统的核心功能需求:
- ✅ 会议室管理(临时/固定/个人房间)
- ✅ 会议生命周期管理
- ✅ 参与者状态跟踪
- ✅ 邀请机制
- ✅ 实时消息
- ✅ 录制功能
- ✅ 统计分析
- ✅ 模板系统
设计充分考虑了高并发、可扩展性和数据安全性,为后续的mediasoup集成提供了坚实的数据基础。