数据库设计
This commit is contained in:
parent
a8253e7de5
commit
745aaf391d
137
rbac_system.sql
Normal file
137
rbac_system.sql
Normal 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 '头像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='用户扩展表(存储动态字段数据)';
|
127
yuheng.sql
Normal file
127
yuheng.sql
Normal 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 '系统配置';
|
||||||
|
|
Loading…
Reference in New Issue
Block a user