数据库设计文档¶
📊 数据库选型¶
- 主数据库:MySQL 8.0+
- 缓存数据库:Redis 7.0+
- 字符集:UTF8MB4
- 存储引擎:InnoDB
🗂️ 表结构设计¶
1. 用户模块¶
sys_user(用户表)¶
CREATE TABLE `sys_user` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '用户ID',
`username` VARCHAR(64) NOT NULL COMMENT '用户名',
`password` VARCHAR(128) NOT NULL COMMENT '密码(BCrypt加密)',
`nickname` VARCHAR(64) DEFAULT NULL COMMENT '昵称',
`email` VARCHAR(128) DEFAULT NULL COMMENT '邮箱',
`phone` VARCHAR(20) DEFAULT NULL COMMENT '手机号',
`avatar` VARCHAR(255) DEFAULT NULL COMMENT '头像URL',
`gender` TINYINT DEFAULT 0 COMMENT '性别(0:未知 1:男 2:女)',
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态(0:禁用 1:正常 2:锁定)',
`user_type` TINYINT DEFAULT 1 COMMENT '用户类型(1:普通用户 2:管理员 3:超级管理员)',
`tenant_id` VARCHAR(32) NOT NULL COMMENT '租户ID',
`last_login_time` DATETIME DEFAULT NULL COMMENT '最后登录时间',
`last_login_ip` VARCHAR(64) DEFAULT NULL COMMENT '最后登录IP',
`password_update_time` DATETIME DEFAULT NULL COMMENT '密码修改时间',
`is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '删除标志(0:未删除 1:已删除)',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`create_by` BIGINT DEFAULT NULL COMMENT '创建人',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`update_by` BIGINT DEFAULT NULL COMMENT '更新人',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_username_tenant` (`username`, `tenant_id`),
UNIQUE KEY `uk_email_tenant` (`email`, `tenant_id`),
UNIQUE KEY `uk_phone_tenant` (`phone`, `tenant_id`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_status` (`status`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
sys_user_detail(用户详细信息表)¶
CREATE TABLE `sys_user_detail` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
`user_id` BIGINT NOT NULL COMMENT '用户ID',
`real_name` VARCHAR(64) DEFAULT NULL COMMENT '真实姓名',
`id_card` VARCHAR(32) DEFAULT NULL COMMENT '身份证号',
`birthday` DATE DEFAULT NULL COMMENT '生日',
`province` VARCHAR(32) DEFAULT NULL COMMENT '省份',
`city` VARCHAR(32) DEFAULT NULL COMMENT '城市',
`district` VARCHAR(32) DEFAULT NULL COMMENT '区县',
`address` VARCHAR(255) DEFAULT NULL COMMENT '详细地址',
`remark` VARCHAR(500) DEFAULT NULL COMMENT '备注',
`extra_info` JSON DEFAULT NULL COMMENT '扩展信息(JSON)',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户详细信息表';
2. 角色权限模块¶
sys_role(角色表)¶
CREATE TABLE `sys_role` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '角色ID',
`role_code` VARCHAR(64) NOT NULL COMMENT '角色编码',
`role_name` VARCHAR(64) NOT NULL COMMENT '角色名称',
`role_level` INT DEFAULT 0 COMMENT '角色级别(数字越小权限越大)',
`data_scope` TINYINT DEFAULT 1 COMMENT '数据范围(1:全部 2:本部门及下级 3:本部门 4:仅本人 5:自定义)',
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态(0:禁用 1:正常)',
`tenant_id` VARCHAR(32) NOT NULL COMMENT '租户ID',
`remark` VARCHAR(500) DEFAULT NULL COMMENT '备注',
`is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '删除标志',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`create_by` BIGINT DEFAULT NULL COMMENT '创建人',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`update_by` BIGINT DEFAULT NULL COMMENT '更新人',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_role_code_tenant` (`role_code`, `tenant_id`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色表';
sys_permission(权限表)¶
CREATE TABLE `sys_permission` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '权限ID',
`permission_code` VARCHAR(128) NOT NULL COMMENT '权限编码(如: user:read)',
`permission_name` VARCHAR(64) NOT NULL COMMENT '权限名称',
`permission_type` TINYINT NOT NULL COMMENT '权限类型(1:菜单 2:按钮 3:API)',
`parent_id` BIGINT DEFAULT 0 COMMENT '父权限ID',
`resource_id` BIGINT DEFAULT NULL COMMENT '关联资源ID',
`tenant_id` VARCHAR(32) NOT NULL COMMENT '租户ID',
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态',
`sort_order` INT DEFAULT 0 COMMENT '排序',
`remark` VARCHAR(500) DEFAULT NULL COMMENT '备注',
`is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '删除标志',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`create_by` BIGINT DEFAULT NULL COMMENT '创建人',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`update_by` BIGINT DEFAULT NULL COMMENT '更新人',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_permission_code_tenant` (`permission_code`, `tenant_id`),
KEY `idx_parent_id` (`parent_id`),
KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='权限表';
sys_user_role(用户角色关联表)¶
CREATE TABLE `sys_user_role` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
`user_id` BIGINT NOT NULL COMMENT '用户ID',
`role_id` BIGINT NOT NULL COMMENT '角色ID',
`tenant_id` VARCHAR(32) NOT NULL COMMENT '租户ID',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`create_by` BIGINT DEFAULT NULL COMMENT '创建人',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_user_role` (`user_id`, `role_id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_role_id` (`role_id`),
KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户角色关联表';
sys_role_permission(角色权限关联表)¶
CREATE TABLE `sys_role_permission` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
`role_id` BIGINT NOT NULL COMMENT '角色ID',
`permission_id` BIGINT NOT NULL COMMENT '权限ID',
`tenant_id` VARCHAR(32) NOT NULL COMMENT '租户ID',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`create_by` BIGINT DEFAULT NULL COMMENT '创建人',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_role_permission` (`role_id`, `permission_id`),
KEY `idx_role_id` (`role_id`),
KEY `idx_permission_id` (`permission_id`),
KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色权限关联表';
3. 资源模块¶
sys_menu(菜单表)¶
CREATE TABLE `sys_menu` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '菜单ID',
`menu_name` VARCHAR(64) NOT NULL COMMENT '菜单名称',
`menu_code` VARCHAR(64) NOT NULL COMMENT '菜单编码',
`parent_id` BIGINT DEFAULT 0 COMMENT '父菜单ID',
`menu_type` TINYINT NOT NULL COMMENT '菜单类型(1:目录 2:菜单 3:按钮)',
`path` VARCHAR(255) DEFAULT NULL COMMENT '路由地址',
`component` VARCHAR(255) DEFAULT NULL COMMENT '组件路径',
`permission` VARCHAR(128) DEFAULT NULL COMMENT '权限标识',
`icon` VARCHAR(64) DEFAULT NULL COMMENT '图标',
`sort_order` INT DEFAULT 0 COMMENT '排序',
`visible` TINYINT DEFAULT 1 COMMENT '是否可见(0:否 1:是)',
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态(0:禁用 1:正常)',
`tenant_id` VARCHAR(32) NOT NULL COMMENT '租户ID',
`is_external` TINYINT DEFAULT 0 COMMENT '是否外链(0:否 1:是)',
`keep_alive` TINYINT DEFAULT 0 COMMENT '是否缓存(0:否 1:是)',
`remark` VARCHAR(500) DEFAULT NULL COMMENT '备注',
`is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '删除标志',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`create_by` BIGINT DEFAULT NULL COMMENT '创建人',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`update_by` BIGINT DEFAULT NULL COMMENT '更新人',
PRIMARY KEY (`id`),
KEY `idx_parent_id` (`parent_id`),
KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='菜单表';
sys_api(API接口表)¶
CREATE TABLE `sys_api` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT 'API ID',
`api_name` VARCHAR(64) NOT NULL COMMENT 'API名称',
`api_code` VARCHAR(128) NOT NULL COMMENT 'API编码',
`api_path` VARCHAR(255) NOT NULL COMMENT 'API路径',
`api_method` VARCHAR(16) NOT NULL COMMENT '请求方法(GET/POST/PUT/DELETE)',
`api_category` VARCHAR(64) DEFAULT NULL COMMENT 'API分类',
`require_auth` TINYINT DEFAULT 1 COMMENT '是否需要认证(0:否 1:是)',
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态',
`tenant_id` VARCHAR(32) NOT NULL COMMENT '租户ID',
`remark` VARCHAR(500) DEFAULT NULL COMMENT '备注',
`is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '删除标志',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`create_by` BIGINT DEFAULT NULL COMMENT '创建人',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`update_by` BIGINT DEFAULT NULL COMMENT '更新人',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_api_path_method_tenant` (`api_path`, `api_method`, `tenant_id`),
KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='API接口表';
4. 租户模块¶
sys_tenant(租户表)¶
CREATE TABLE `sys_tenant` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '租户ID',
`tenant_code` VARCHAR(32) NOT NULL COMMENT '租户编码',
`tenant_name` VARCHAR(64) NOT NULL COMMENT '租户名称',
`contact_name` VARCHAR(64) DEFAULT NULL COMMENT '联系人',
`contact_phone` VARCHAR(20) DEFAULT NULL COMMENT '联系电话',
`contact_email` VARCHAR(128) DEFAULT NULL COMMENT '联系邮箱',
`expire_time` DATETIME DEFAULT NULL COMMENT '过期时间',
`account_limit` INT DEFAULT -1 COMMENT '账号数量限制(-1:不限制)',
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态(0:禁用 1:正常 2:过期)',
`logo` VARCHAR(255) DEFAULT NULL COMMENT 'Logo URL',
`domain` VARCHAR(128) DEFAULT NULL COMMENT '域名',
`remark` VARCHAR(500) DEFAULT NULL COMMENT '备注',
`is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '删除标志',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`create_by` BIGINT DEFAULT NULL COMMENT '创建人',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`update_by` BIGINT DEFAULT NULL COMMENT '更新人',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_tenant_code` (`tenant_code`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='租户表';
sys_tenant_config(租户配置表)¶
CREATE TABLE `sys_tenant_config` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
`tenant_id` VARCHAR(32) NOT NULL COMMENT '租户ID',
`config_key` VARCHAR(64) NOT NULL COMMENT '配置键',
`config_value` TEXT DEFAULT NULL COMMENT '配置值',
`config_type` VARCHAR(32) DEFAULT NULL COMMENT '配置类型',
`remark` VARCHAR(500) DEFAULT NULL 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 (`id`),
UNIQUE KEY `uk_tenant_config_key` (`tenant_id`, `config_key`),
KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='租户配置表';
5. OAuth模块¶
oauth_client(OAuth客户端表)¶
CREATE TABLE `oauth_client` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '客户端ID',
`client_id` VARCHAR(64) NOT NULL COMMENT '客户端标识',
`client_secret` VARCHAR(255) NOT NULL COMMENT '客户端密钥',
`client_name` VARCHAR(64) NOT NULL COMMENT '客户端名称',
`resource_ids` VARCHAR(255) DEFAULT NULL COMMENT '资源ID集合',
`scope` VARCHAR(255) DEFAULT 'all' COMMENT '授权范围',
`authorized_grant_types` VARCHAR(255) NOT NULL COMMENT '授权类型(authorization_code,password,refresh_token,client_credentials)',
`web_server_redirect_uri` VARCHAR(512) DEFAULT NULL COMMENT '回调地址',
`authorities` VARCHAR(255) DEFAULT NULL COMMENT '权限',
`access_token_validity` INT DEFAULT 7200 COMMENT 'AccessToken有效期(秒)',
`refresh_token_validity` INT DEFAULT 604800 COMMENT 'RefreshToken有效期(秒)',
`additional_information` JSON DEFAULT NULL COMMENT '附加信息',
`auto_approve` TINYINT DEFAULT 0 COMMENT '是否自动授权',
`tenant_id` VARCHAR(32) NOT NULL COMMENT '租户ID',
`status` TINYINT NOT NULL DEFAULT 1 COMMENT '状态',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`create_by` BIGINT DEFAULT NULL COMMENT '创建人',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`update_by` BIGINT DEFAULT NULL COMMENT '更新人',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_client_id` (`client_id`),
KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='OAuth客户端表';
6. 日志模块¶
sys_login_log(登录日志表)¶
CREATE TABLE `sys_login_log` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '日志ID',
`username` VARCHAR(64) DEFAULT NULL COMMENT '用户名',
`user_id` BIGINT DEFAULT NULL COMMENT '用户ID',
`tenant_id` VARCHAR(32) DEFAULT NULL COMMENT '租户ID',
`login_type` TINYINT DEFAULT 1 COMMENT '登录类型(1:账号密码 2:手机验证码 3:第三方)',
`ip_address` VARCHAR(64) DEFAULT NULL COMMENT 'IP地址',
`location` VARCHAR(128) DEFAULT NULL COMMENT '登录地点',
`browser` VARCHAR(64) DEFAULT NULL COMMENT '浏览器',
`os` VARCHAR(64) DEFAULT NULL COMMENT '操作系统',
`device` VARCHAR(64) DEFAULT NULL COMMENT '设备类型',
`status` TINYINT NOT NULL COMMENT '登录状态(0:失败 1:成功)',
`message` VARCHAR(255) DEFAULT NULL COMMENT '提示消息',
`login_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '登录时间',
PRIMARY KEY (`id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_login_time` (`login_time`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='登录日志表';
sys_operation_log(操作日志表)¶
CREATE TABLE `sys_operation_log` (
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '日志ID',
`user_id` BIGINT DEFAULT NULL COMMENT '用户ID',
`username` VARCHAR(64) DEFAULT NULL COMMENT '用户名',
`tenant_id` VARCHAR(32) DEFAULT NULL COMMENT '租户ID',
`module` VARCHAR(64) DEFAULT NULL COMMENT '模块名称',
`operation` VARCHAR(64) DEFAULT NULL COMMENT '操作类型',
`method` VARCHAR(255) DEFAULT NULL COMMENT '请求方法',
`request_url` VARCHAR(512) DEFAULT NULL COMMENT '请求URL',
`request_method` VARCHAR(16) DEFAULT NULL COMMENT '请求方式',
`request_params` TEXT DEFAULT NULL COMMENT '请求参数',
`response_result` TEXT DEFAULT NULL COMMENT '响应结果',
`ip_address` VARCHAR(64) DEFAULT NULL COMMENT 'IP地址',
`location` VARCHAR(128) DEFAULT NULL COMMENT '操作地点',
`status` TINYINT DEFAULT 1 COMMENT '状态(0:失败 1:成功)',
`error_msg` TEXT DEFAULT NULL COMMENT '错误消息',
`execute_time` INT DEFAULT 0 COMMENT '执行时间(毫秒)',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间',
PRIMARY KEY (`id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_tenant_id` (`tenant_id`),
KEY `idx_create_time` (`create_time`),
KEY `idx_module` (`module`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='操作日志表';
📝 初始化数据¶
默认租户¶
INSERT INTO `sys_tenant` (`id`, `tenant_code`, `tenant_name`, `status`)
VALUES (1, 'DEFAULT', '默认租户', 1);
超级管理员¶
-- 密码: admin123 (BCrypt加密后)
INSERT INTO `sys_user` (`id`, `username`, `password`, `nickname`, `status`, `user_type`, `tenant_id`)
VALUES (1, 'admin', '$2a$10$...', '超级管理员', 1, 3, 'DEFAULT');
默认角色¶
INSERT INTO `sys_role` (`id`, `role_code`, `role_name`, `tenant_id`)
VALUES
(1, 'SUPER_ADMIN', '超级管理员', 'DEFAULT'),
(2, 'ADMIN', '管理员', 'DEFAULT'),
(3, 'USER', '普通用户', 'DEFAULT');
用户角色关联¶
默认权限¶
INSERT INTO `sys_permission` (`permission_code`, `permission_name`, `permission_type`, `tenant_id`)
VALUES
('*:*:*', '所有权限', 1, 'DEFAULT'),
('user:read', '用户查询', 2, 'DEFAULT'),
('user:write', '用户编辑', 2, 'DEFAULT'),
('role:read', '角色查询', 2, 'DEFAULT'),
('role:write', '角色编辑', 2, 'DEFAULT');
OAuth默认客户端¶
INSERT INTO `oauth_client` (`client_id`, `client_secret`, `client_name`, `authorized_grant_types`, `scope`, `tenant_id`)
VALUES
('web-client', '$2a$10$...', 'Web客户端', 'authorization_code,refresh_token', 'all', 'DEFAULT'),
('mobile-client', '$2a$10$...', '移动客户端', 'password,refresh_token', 'all', 'DEFAULT'),
('service-client', '$2a$10$...', '服务客户端', 'client_credentials', 'all', 'DEFAULT');
🔍 索引优化建议¶
常用查询索引¶
- 用户查询
idx_username_tenantidx_email_tenant-
idx_phone_tenant -
权限查询
idx_user_id_role-
idx_role_id_permission -
日志查询
idx_user_id_timeidx_create_time
联合索引原则¶
遵循最左前缀原则,常用查询条件放在前面。
📊 分区策略(可选)¶
日志表分区¶
对于日志表,可以按时间分区提高查询性能:
ALTER TABLE sys_login_log
PARTITION BY RANGE (TO_DAYS(login_time)) (
PARTITION p202401 VALUES LESS THAN (TO_DAYS('2024-02-01')),
PARTITION p202402 VALUES LESS THAN (TO_DAYS('2024-03-01')),
...
);
🗄️ 数据归档策略¶
日志归档¶
- 登录日志保留6个月,之后归档到历史表
- 操作日志保留3个月,之后归档到历史表
-- 创建归档表
CREATE TABLE sys_login_log_archive LIKE sys_login_log;
-- 定期归档(可用定时任务)
INSERT INTO sys_login_log_archive
SELECT * FROM sys_login_log
WHERE login_time < DATE_SUB(NOW(), INTERVAL 6 MONTH);
DELETE FROM sys_login_log
WHERE login_time < DATE_SUB(NOW(), INTERVAL 6 MONTH);