CREATE DATABASE IF NOT EXISTS kbase DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE kbase; -- 1. 用户基础表 CREATE TABLE IF NOT EXISTS user ( id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '用户ID,主键', username VARCHAR(64) NOT NULL UNIQUE COMMENT '登录用户名,唯一', password VARCHAR(128) NOT NULL COMMENT '用户密码(建议加密存储)', add_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间', update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间' ) COMMENT='用户基础表'; -- 2. 角色表 CREATE TABLE IF NOT EXISTS role ( id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '角色ID', role_code VARCHAR(64) NOT NULL UNIQUE COMMENT '角色编码(如 admin/user/guest)', role_name VARCHAR(64) NOT NULL COMMENT '角色名称', add_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间', update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间' ) COMMENT='系统角色表'; -- 3. 用户-角色关联表 CREATE TABLE IF NOT EXISTS user_role ( id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键', user_id BIGINT NOT NULL COMMENT '用户ID', role_id BIGINT NOT NULL COMMENT '角色ID', add_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间', update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', INDEX idx_user_id(user_id), INDEX idx_role_id(role_id), UNIQUE KEY uk_user_role (user_id, role_id) ) COMMENT='用户与角色关联表'; -- 4. 文件表 CREATE TABLE IF NOT EXISTS file ( id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '文件ID', file_name VARCHAR(255) NOT NULL COMMENT '文件名或路径', file_path VARCHAR(512) NOT NULL COMMENT '存储路径', add_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间', update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间' ) COMMENT='知识库文件表'; -- 5. 角色-文件可见规则表(适合批量规则分配权限) CREATE TABLE IF NOT EXISTS role_file_rule ( id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键', role_id BIGINT NOT NULL COMMENT '角色ID', file_pattern VARCHAR(255) NOT NULL COMMENT '可访问文件名/路径模式(如前缀、正则)', remark VARCHAR(255) COMMENT '规则说明', add_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间', update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', INDEX idx_role_id(role_id), UNIQUE KEY uk_role_pattern (role_id, file_pattern) ) COMMENT='角色-文件可访问规则表'; -- 6. 用户token表 CREATE TABLE IF NOT EXISTS user_token ( id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键,自增', user_id BIGINT NOT NULL COMMENT '用户ID,业务逻辑关联user表', token VARCHAR(128) NOT NULL UNIQUE COMMENT '用户登录token', login_at DATETIME NOT NULL COMMENT '登录时间', expired_at DATETIME NOT NULL COMMENT '过期时间', add_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间', update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', INDEX idx_user_id(user_id), INDEX idx_token(token) ) COMMENT='用户登录Token表'; -- 7. 用户-文件直接授权关联表 CREATE TABLE IF NOT EXISTS user_file ( id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键', user_id BIGINT NOT NULL COMMENT '用户ID', file_id BIGINT NOT NULL COMMENT '文件ID', add_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间', update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', INDEX idx_user_id(user_id), INDEX idx_file_id(file_id), UNIQUE INDEX uniq_user_file(user_id, file_id) ) COMMENT='用户-文件直接授权关联表(用于特殊文件个别授权)'; -- 8. 对象存储上传记录表 CREATE TABLE IF NOT EXISTS oss_upload_record ( id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键', file_name VARCHAR(255) NOT NULL COMMENT '文件名', bucket_name VARCHAR(128) NOT NULL COMMENT '目标 bucket 名', uploader VARCHAR(128) NOT NULL COMMENT '上传人用户名', upload_time DATETIME NOT NULL COMMENT '上传时间', object_path VARCHAR(512) NOT NULL COMMENT 'MinIO 存储路径', url VARCHAR(1024) COMMENT '访问链接(如CDN代理后的地址)', expire_time DATETIME NOT NULL DEFAULT '9999-12-31 23:59:59' COMMENT '链接过期时间(默认永久)', add_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间', update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', INDEX idx_uploader(uploader), INDEX idx_file_name(file_name), INDEX idx_bucket(bucket_name) ) COMMENT='对象存储上传记录表';