/* * 核心用户体系 * 存储系统用户基础身份信息 */ CREATE TABLE `sys_user` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '用户ID(自增主键)', `username` VARCHAR(50) NOT NULL COMMENT '用户名(唯一标识,必须小写字母开头)', `email` VARCHAR(100) NOT NULL COMMENT '邮箱(唯一标识,格式校验由程序控制)', `phone` VARCHAR(20) COMMENT '手机号(国际区号+号码,例如+8613912345678)', `is_locked` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '账户锁定状态(0-正常 1-锁定)', `last_login_at` DATETIME COMMENT '最后登录时间(UTC时区)', `avatar_url` VARCHAR(255) COMMENT '头像URL(CDN地址,格式:https://域名/路径)', `user_type` VARCHAR(20) NOT NULL DEFAULT 'SYSTEM' COMMENT '用户类型(SYSTEM:系统用户/EXTERNAL:外部用户)', `parent_id` BIGINT COMMENT '父用户ID(构建用户树形结构,NULL表示根节点)', `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`) COMMENT '主键约束', UNIQUE INDEX `idx_username` (`username`) COMMENT '用户名唯一索引(加速登录验证)', UNIQUE INDEX `idx_email` (`email`) COMMENT '邮箱唯一索引(保证账号唯一性)', FOREIGN KEY (`parent_id`) REFERENCES `sys_user` (`id`) ON DELETE SET NULL COMMENT '外键约束(父用户删除时置空,防止数据不一致)' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户主表(存储核心身份信息)'; -- 用户认证体系相关表(密码分离存储) CREATE TABLE `sys_user_auth` ( `user_id` BIGINT NOT NULL COMMENT '用户ID(与sys_user.id一对一绑定)', `password_hash` VARCHAR(128) NOT NULL COMMENT 'BCrypt加密哈希值(固定60字符长度)', `password_modified` DATETIME NOT NULL COMMENT '密码最后修改时间(UTC时区)', `password_expire` DATETIME COMMENT '密码过期时间(NULL表示永不过期)', PRIMARY KEY (`user_id`) COMMENT '主键约束', FOREIGN KEY (`user_id`) REFERENCES `sys_user` (`id`) ON DELETE CASCADE COMMENT '级联删除(用户删除时自动删除认证信息)' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户认证表(存储敏感凭证信息)'; -- 密码历史记录表(防止重复使用旧密码) CREATE TABLE `sys_password_history` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '记录ID(自增主键)', `user_id` BIGINT NOT NULL COMMENT '用户ID(与sys_user.id关联)', `old_password` VARCHAR(128) NOT NULL COMMENT '历史密码哈希值', `modified_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间(UTC时区)', PRIMARY KEY (`id`) COMMENT '主键约束', INDEX `idx_user_pwd` (`user_id`, `modified_at`) COMMENT '复合索引(加速历史密码查询)', FOREIGN KEY (`user_id`) REFERENCES `sys_user` (`id`) ON DELETE CASCADE COMMENT '级联删除(用户删除时自动清理历史记录)' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='密码历史表(保存最近N次历史密码)'; -- 组织架构体系相关表(支持树形结构) CREATE TABLE `sys_organization` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '组织ID(自增主键)', `org_name` VARCHAR(100) NOT NULL COMMENT '组织名称(显示用中文名)', `org_code` VARCHAR(50) NOT NULL COMMENT '组织编码(唯一业务标识,如DEP001)', `parent_id` BIGINT COMMENT '父组织ID(构建树形结构,NULL表示根节点)', `manager_id` BIGINT COMMENT '负责人ID(关联sys_user.id)', `tags` JSON COMMENT '组织标签(JSON数组,如["子公司","研发中心"])', `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间(UTC时区)', `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间(UTC时区)', PRIMARY KEY (`id`) COMMENT '主键约束', UNIQUE INDEX `idx_org_code` (`org_code`) COMMENT '组织编码唯一索引', FOREIGN KEY (`parent_id`) REFERENCES `sys_organization` (`id`) COMMENT '外键约束(维护树形结构完整性)', FOREIGN KEY (`manager_id`) REFERENCES `sys_user` (`id`) ON DELETE SET NULL COMMENT '外键约束(负责人删除时置空)' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='组织架构表(支持多层级结构)'; /* * RBAC核心表(基于角色的访问控制) * 包含角色、权限及其关联关系 */ CREATE TABLE `sys_role` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '角色ID(自增主键)', `role_name` VARCHAR(50) NOT NULL COMMENT '角色名称(显示用中文名)', `role_key` VARCHAR(50) NOT NULL COMMENT '角色标识符(唯一英文键,如admin)', `description` VARCHAR(255) COMMENT '角色描述(功能说明)', `parent_id` BIGINT COMMENT '父角色ID(构建角色继承树)', PRIMARY KEY (`id`), UNIQUE INDEX `idx_role_key` (`role_key`) COMMENT '角色标识符唯一索引', FOREIGN KEY (`parent_id`) REFERENCES `sys_role` (`id`) COMMENT '外键约束(维护角色继承关系)' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色表(定义系统角色)'; CREATE TABLE `sys_permission` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '权限ID(自增主键)', `perm_name` VARCHAR(50) NOT NULL COMMENT '权限名称(显示用中文名)', `perm_key` VARCHAR(100) NOT NULL COMMENT '权限标识符(唯一业务键,如user:delete)', `description` VARCHAR(255) COMMENT '权限描述(功能说明)', `parent_id` BIGINT COMMENT '父权限ID(构建权限树形结构)', PRIMARY KEY (`id`), UNIQUE INDEX `idx_perm_key` (`perm_key`) COMMENT '权限标识符唯一索引', FOREIGN KEY (`parent_id`) REFERENCES `sys_permission` (`id`) COMMENT '外键约束(维护权限继承关系)' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='权限表(定义细粒度权限)'; -- 用户-角色关联表(多对多关系) CREATE TABLE `sys_user_role` ( `user_id` BIGINT NOT NULL COMMENT '用户ID(关联sys_user.id)', `role_id` BIGINT NOT NULL COMMENT '角色ID(关联sys_role.id)', PRIMARY KEY (`user_id`, `role_id`) COMMENT '复合主键', FOREIGN KEY (`user_id`) REFERENCES `sys_user` (`id`) ON DELETE CASCADE COMMENT '级联删除(用户删除时自动解除关联)', FOREIGN KEY (`role_id`) REFERENCES `sys_role` (`id`) ON DELETE CASCADE COMMENT '级联删除(角色删除时自动解除关联)' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户角色关联表(建立用户与角色的多对多关系)'; -- 角色-权限关联表(多对多关系) CREATE TABLE `sys_role_permission` ( `role_id` BIGINT NOT NULL COMMENT '角色ID(关联sys_role.id)', `perm_id` BIGINT NOT NULL COMMENT '权限ID(关联sys_permission.id)', PRIMARY KEY (`role_id`, `perm_id`) COMMENT '复合主键', FOREIGN KEY (`role_id`) REFERENCES `sys_role` (`id`) ON DELETE CASCADE COMMENT '级联删除(角色删除时自动解除关联)', FOREIGN KEY (`perm_id`) REFERENCES `sys_permission` (`id`) ON DELETE CASCADE COMMENT '级联删除(权限删除时自动解除关联)' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色权限关联表(建立角色与权限的多对多关系)'; /* * 扩展字段体系(支持动态字段管理) * 包含字段定义和用户扩展数据存储 */ CREATE TABLE `sys_field_definition` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '字段ID(自增主键)', `field_key` VARCHAR(50) NOT NULL COMMENT '字段标识符(英文唯一键,如birthday)', `field_name` VARCHAR(50) NOT NULL COMMENT '字段显示名称(如"出生日期")', `field_type` ENUM('STRING','NUMBER','DATE','BOOLEAN','TEXT') NOT NULL DEFAULT 'STRING' COMMENT '字段类型(控制数据格式)', `is_required` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否必填(0-否 1-是)', `is_unique` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否唯一(0-否 1-是)', `user_types` JSON NOT NULL COMMENT '适用的用户类型(JSON数组,如["SYSTEM","EXTERNAL"])', `status` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '状态(0-停用 1-启用)', `created_by` BIGINT NOT NULL COMMENT '创建人ID(关联sys_user.id)', `updated_by` BIGINT NOT NULL COMMENT '最后修改人ID(关联sys_user.id)', `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间(UTC时区)', `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间(UTC时区)', PRIMARY KEY (`id`), UNIQUE INDEX `idx_field_key` (`field_key`) COMMENT '字段标识符唯一索引', FOREIGN KEY (`created_by`) REFERENCES `sys_user` (`id`) COMMENT '外键约束(创建人必须存在)', FOREIGN KEY (`updated_by`) REFERENCES `sys_user` (`id`) COMMENT '外键约束(修改人必须存在)' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='字段定义表(管理员维护动态字段)'; CREATE TABLE `sys_user_profile` ( `user_id` BIGINT NOT NULL COMMENT '用户ID(关联sys_user.id)', `field_id` BIGINT NOT NULL COMMENT '字段ID(关联sys_field_definition.id)', `field_value` TEXT NOT NULL COMMENT '字段值(根据字段类型校验格式)', `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间(UTC时区)', `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间(UTC时区)', PRIMARY KEY (`user_id`, `field_id`) COMMENT '复合主键', FOREIGN KEY (`user_id`) REFERENCES `sys_user` (`id`) ON DELETE CASCADE COMMENT '级联删除(用户删除时自动清理扩展数据)', FOREIGN KEY (`field_id`) REFERENCES `sys_field_definition` (`id`) COMMENT '外键约束(确保字段定义有效)' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户扩展表(存储动态字段数据)';