在线直播系统的用户和频道是支撑业务运转的基础数据实体,合理的MySQL表设计需要覆盖核心业务场景,同时兼顾后续功能扩展和查询性能。用户表需要存储用户的基础信息、账号状态、权限相关数据,频道表则需要关联所属用户、存储频道配置和状态信息。

用户表设计
用户表需要覆盖用户注册、登录、权限管理、个人资料展示等核心场景,字段设计要避免过度冗余,同时预留扩展字段应对后续业务变化。
核心字段说明
- user_id:用户唯一标识,采用自增主键,方便后续关联查询
- username:用户登录名,设置唯一索引避免重复注册
- password_hash:密码加密后的哈希值,不存储明文密码
- nickname:用户昵称,支持用户自定义修改
- avatar_url:用户头像地址,存储图片的访问路径
- user_status:用户状态,0表示正常,1表示封禁,2表示未激活
- role_type:用户角色,0表示普通用户,1表示主播,2表示管理员
- register_time:注册时间,默认取当前时间戳
- last_login_time:最后登录时间,每次登录时更新
建表语句
CREATE TABLE `live_user` ( `user_id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户唯一ID', `username` varchar(50) NOT NULL COMMENT '登录用户名', `password_hash` varchar(255) NOT NULL COMMENT '密码哈希值', `nickname` varchar(30) DEFAULT '' COMMENT '用户昵称', `avatar_url` varchar(255) DEFAULT '' COMMENT '头像地址', `user_status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '用户状态 0正常 1封禁 2未激活', `role_type` tinyint(1) NOT NULL DEFAULT '0' COMMENT '用户角色 0普通 1主播 2管理员', `register_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间', `last_login_time` datetime DEFAULT NULL COMMENT '最后登录时间', PRIMARY KEY (`user_id`), UNIQUE KEY `idx_username` (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='直播系统用户表';
频道表设计
频道表需要关联所属主播用户,存储频道的配置信息、状态信息和统计数据,同时要考虑频道分类、直播状态等常见业务需求。
核心字段说明
- channel_id:频道唯一标识,自增主键
- user_id:频道所属主播的用户ID,关联用户表的user_id字段
- channel_name:频道名称,支持主播自定义
- channel_desc:频道简介,描述频道的内容方向
- category_id:频道分类ID,关联分类表,方便内容归类
- channel_status:频道状态,0表示未开播,1表示直播中,2表示已下架
- cover_url:频道封面地址,直播未开始时展示的封面图
- live_url:直播流地址,直播中时存储推流地址
- viewer_count:当前观看人数,实时更新
- create_time:频道创建时间
- update_time:频道信息最后更新时间
建表语句
CREATE TABLE `live_channel` ( `channel_id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '频道唯一ID', `user_id` int(11) unsigned NOT NULL COMMENT '所属主播用户ID', `channel_name` varchar(50) NOT NULL COMMENT '频道名称', `channel_desc` varchar(255) DEFAULT '' COMMENT '频道简介', `category_id` int(11) unsigned NOT NULL COMMENT '频道分类ID', `channel_status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '频道状态 0未开播 1直播中 2下架', `cover_url` varchar(255) DEFAULT '' COMMENT '频道封面地址', `live_url` varchar(255) DEFAULT '' COMMENT '直播流地址', `viewer_count` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '当前观看人数', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`channel_id`), KEY `idx_user_id` (`user_id`), KEY `idx_category_status` (`category_id`,`channel_status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='直播系统频道表';
表关联与扩展建议
用户表和频道表通过user_id字段建立一对多关联,一个主播用户可以拥有多个频道,查询主播的所有频道时可以通过该字段快速检索。如果后续需要增加用户关注频道、频道礼物统计等功能,可以新增关联表或扩展字段,不需要修改原有表结构。
对于高频查询场景,比如查询直播中的频道列表,可以给channel_status和category_id建立联合索引,提升查询效率。如果用户量或频道量增长到千万级别,可以考虑对用户表按user_id进行分表,频道表按category_id进行分表,降低单表数据量压力。