数据库设计

This commit is contained in:
expressgy 2025-03-19 18:21:25 +08:00
parent a8253e7de5
commit 745aaf391d
2 changed files with 264 additions and 0 deletions

137
rbac_system.sql Normal file
View File

@ -0,0 +1,137 @@
/*
*
*
*/
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 '头像URLCDN地址格式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='用户扩展表(存储动态字段数据)';

127
yuheng.sql Normal file
View File

@ -0,0 +1,127 @@
CREATE TABLE `sys_dict` (
`id` int NOT NULL,
`pid` int NULL,
`module` tinyint NULL,
`key` varchar(255) NULL,
`value` varchar(255) NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `sys_organization` (
`org_id` bigint NOT NULL,
`pid` bigint NULL,
`org_name` varchar(255) NULL,
`org_code` varchar(128) NULL,
`org_type` int NULL,
`desc` varchar(255) NULL,
PRIMARY KEY (`org_id`)
);
CREATE TABLE `sys_organization_manager` (
`id` bigint NOT NULL COMMENT '1',
`org_id` bigint NOT NULL COMMENT '1',
`user_id` bigint NOT NULL COMMENT '1',
`rank` int NOT NULL COMMENT '1',
`status` int ZEROFILL NOT NULL COMMENT '1',
`desc` varchar(255) NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `sys_permission` (
`perm_id` int NOT NULL,
`pid` int NULL,
`perm_name` varchar(255) NULL,
`perm_key` varchar(255) NULL,
`avatar_url` varchar(255) NULL,
`desc` varchar(255) NULL,
`perm_type` varchar(255) NULL,
PRIMARY KEY (`perm_id`)
);
CREATE TABLE `sys_re_role_permission` (
`id` int NOT NULL,
`role_id` int NULL,
`perm_id` int NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `sys_re_user_organization` (
`id` int NOT NULL,
`user_id` int NULL,
`org_id` int NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `sys_re_user_role` (
`id` int NOT NULL,
`user_id` int NULL,
`role_id` int NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `sys_role` (
`role_id` int NOT NULL,
`pid` int NULL,
`role_name` varchar(255) NULL,
`role_key` varchar(255) NULL,
`desc` varchar(255) NULL,
PRIMARY KEY (`role_id`)
);
CREATE TABLE `sys_user` (
`user_id` bigint NOT NULL COMMENT '用户ID',
`pid` bigint ZEROFILL NOT NULL COMMENT '上级ID',
`username` varchar(255) NOT NULL COMMENT '用户名,全小写',
`email` varchar(255) NOT NULL COMMENT '邮箱',
`phone` varchar(255) NULL COMMENT '手机号',
`avatar_url` varchar(255) NULL COMMENT '图标',
`user_type` tinyint NULL DEFAULT NULL COMMENT '用户类型从字典取',
`status` tinyint DEFAULT 0 NOT NULL COMMENT '状态',
PRIMARY KEY (`user_id`)
) COMMENT '用户基础信息表';
CREATE TABLE `sys_user_auth` (
`user_id` bigint NOT NULL COMMENT '用户ID',
`password_hash` varchar(255) NOT NULL COMMENT '用户密码',
`password_modified` varchar(255) NOT NULL COMMENT '上一次修改时间',
`password_expire` varchar(255) NULL DEFAULT NULL COMMENT '过期时间',
PRIMARY KEY (`user_id`)
) COMMENT '用户密码表';
CREATE TABLE `sys_user_auth_history` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '历史记录自增主键',
`user_id` bigint NOT NULL COMMENT '用户id',
`password_hash` varchar(255) NOT NULL COMMENT '历史密码值,注意需要限制密码更改次数',
`modified_at` varchar(255) NOT NULL COMMENT '上次修改的时间',
PRIMARY KEY (`id`)
) COMMENT '历史密码表';
CREATE TABLE `sys_user_field_definition` (
`field_id` int NOT NULL AUTO_INCREMENT COMMENT '用户拓展字段ID',
`field_name` varchar(255) NOT NULL COMMENT '拓展字段名称',
`field_key` varchar(255) NOT NULL COMMENT '拓展字段标识',
`field_type` tinyint NOT NULL COMMENT '拓展字段类型0文字1数字2日期3单选4多选5附件6富文本',
`dict_module` int NULL COMMENT '字典集模块值',
`is_required` tinyint NOT NULL DEFAULT 0 COMMENT '是否必填0否1是',
`limit` int NULL COMMENT '值长度最大2048',
PRIMARY KEY (`field_id`)
) COMMENT '用户拓展字段定义表';
CREATE TABLE `sys_user_field_value` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户拓展字段记录id',
`user_id` bigint NOT NULL COMMENT '用户ID',
`field_id` int NOT NULL COMMENT '字段ID',
`dictId` int NULL COMMENT '使用字典后的字典ID',
`value` varchar(4096) NULL COMMENT '用户拓展字段值',
PRIMARY KEY (`id`)
) COMMENT '用户拓展字段记录表';
CREATE TABLE `sys_user_profile` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '系统配置自增主键',
`name` varchar(32) NOT NULL COMMENT '系统配置名称',
`key` varchar(255) NOT NULL COMMENT '系统配置记录Key',
`desc` varchar(255) NULL COMMENT '系统配置记录描述',
`content` varchar(255) NULL COMMENT '系统配置记录值',
PRIMARY KEY (`id`)
) COMMENT '系统配置';