音视频会议服务搭建(设计方案-数据库sql)-02

发布于:2025-07-05 ⋅ 阅读:(15) ⋅ 点赞:(0)

在这里插入图片描述

前言

衔接上篇文章,这篇是相关的表结构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集成提供了坚实的数据基础。


网站公告

今日签到

点亮在社区的每一天
去签到