Files
admin-vben/docs/数据库设计文档.md

10 KiB
Raw Permalink Blame History

数据库设计文档

数据库概述

本系统采用前后端分离架构,前端不直接操作数据库,但需要了解后端数据库设计以便进行合理的数据交互和界面设计。

数据库选型

推荐数据库

  • MySQL 8.0+: 关系型数据库,事务支持完善
  • PostgreSQL 13+: 高级特性丰富JSON 支持好
  • MongoDB 5.0+: 文档数据库,灵活 schema

选择建议

  • 中小型项目: MySQL
  • 大型复杂项目: PostgreSQL
  • 快速原型: MongoDB

核心表设计

1. 用户表 (sys_user)

字段名 类型 长度 主键 非空 默认值 说明
id bigint 20 自增 用户ID
username varchar 50 用户名
password varchar 100 密码(加密)
nickname varchar 50 昵称
email varchar 100 邮箱
phone varchar 20 手机号
avatar varchar 500 头像
status tinyint 1 1 状态(0禁用,1启用)
create_time datetime CURRENT_TIMESTAMP 创建时间
update_time datetime CURRENT_TIMESTAMP 更新时间

索引设计:

  • 主键索引: PRIMARY KEY (id)
  • 唯一索引: UNIQUE KEY uk_username (username)
  • 普通索引: INDEX idx_email (email)

2. 角色表 (sys_role)

字段名 类型 长度 主键 非空 默认值 说明
id bigint 20 自增 角色ID
name varchar 50 角色名称
code varchar 50 角色编码
description varchar 200 角色描述
status tinyint 1 1 状态(0禁用,1启用)
create_time datetime CURRENT_TIMESTAMP 创建时间
update_time datetime CURRENT_TIMESTAMP 更新时间

索引设计:

  • 主键索引: PRIMARY KEY (id)
  • 唯一索引: UNIQUE KEY uk_code (code)

3. 权限表 (sys_permission)

字段名 类型 长度 主键 非空 默认值 说明
id bigint 20 自增 权限ID
name varchar 50 权限名称
code varchar 100 权限编码
type tinyint 1 权限类型(1菜单,2按钮)
parent_id bigint 20 0 父级ID
path varchar 200 路由路径
component varchar 200 组件路径
icon varchar 50 图标
sort int 11 0 排序
status tinyint 1 1 状态(0禁用,1启用)
create_time datetime CURRENT_TIMESTAMP 创建时间
update_time datetime CURRENT_TIMESTAMP 更新时间

索引设计:

  • 主键索引: PRIMARY KEY (id)
  • 普通索引: INDEX idx_parent_id (parent_id)
  • 普通索引: INDEX idx_type (type)

4. 用户角色关联表 (sys_user_role)

字段名 类型 长度 主键 非空 默认值 说明
id bigint 20 自增 关联ID
user_id bigint 20 用户ID
role_id bigint 20 角色ID
create_time datetime CURRENT_TIMESTAMP 创建时间

索引设计:

  • 主键索引: PRIMARY KEY (id)
  • 唯一索引: UNIQUE KEY uk_user_role (user_id, role_id)
  • 普通索引: INDEX idx_user_id (user_id)
  • 普通索引: INDEX idx_role_id (role_id)

5. 角色权限关联表 (sys_role_permission)

字段名 类型 长度 主键 非空 默认值 说明
id bigint 20 自增 关联ID
role_id bigint 20 角色ID
permission_id bigint 20 权限ID
create_time datetime CURRENT_TIMESTAMP 创建时间

索引设计:

  • 主键索引: PRIMARY KEY (id)
  • 唯一索引: UNIQUE KEY uk_role_permission (role_id, permission_id)
  • 普通索引: INDEX idx_role_id (role_id)
  • 普通索引: INDEX idx_permission_id (permission_id)

6. 菜单表 (sys_menu)

字段名 类型 长度 主键 非空 默认值 说明
id bigint 20 自增 菜单ID
name varchar 50 菜单名称
type tinyint 1 菜单类型(1目录,2菜单,3按钮)
parent_id bigint 20 0 父级ID
path varchar 200 路由路径
component varchar 200 组件路径
icon varchar 50 图标
sort int 11 0 排序
status tinyint 1 1 状态(0禁用,1启用)
create_time datetime CURRENT_TIMESTAMP 创建时间
update_time datetime CURRENT_TIMESTAMP 更新时间

索引设计:

  • 主键索引: PRIMARY KEY (id)
  • 普通索引: INDEX idx_parent_id (parent_id)

业务表设计

7. 操作日志表 (sys_operation_log)

字段名 类型 长度 主键 非空 默认值 说明
id bigint 20 自增 日志ID
user_id bigint 20 用户ID
username varchar 50 用户名
operation varchar 100 操作描述
method varchar 10 请求方法
url varchar 500 请求URL
ip varchar 50 IP地址
user_agent varchar 500 用户代理
params text 请求参数
result text 返回结果
status tinyint 1 1 状态(0失败,1成功)
error_msg text 错误信息
execute_time int 11 0 执行时间(ms)
create_time datetime CURRENT_TIMESTAMP 创建时间

索引设计:

  • 主键索引: PRIMARY KEY (id)
  • 普通索引: INDEX idx_user_id (user_id)
  • 普通索引: INDEX idx_create_time (create_time)

8. 字典表 (sys_dict)

字段名 类型 长度 主键 非空 默认值 说明
id bigint 20 自增 字典ID
type varchar 50 字典类型
code varchar 50 字典编码
name varchar 100 字典名称
value varchar 200 字典值
sort int 11 0 排序
status tinyint 1 1 状态(0禁用,1启用)
description varchar 200 描述
create_time datetime CURRENT_TIMESTAMP 创建时间
update_time datetime CURRENT_TIMESTAMP 更新时间

索引设计:

  • 主键索引: PRIMARY KEY (id)
  • 唯一索引: UNIQUE KEY uk_type_code (type, code)
  • 普通索引: INDEX idx_type (type)

数据库关系图

erDiagram
    sys_user ||--o{ sys_user_role : has
    sys_role ||--o{ sys_user_role : has
    sys_role ||--o{ sys_role_permission : has
    sys_permission ||--o{ sys_role_permission : has
    sys_permission ||--o{ sys_menu : extends
    
    sys_user {
        bigint id PK
        varchar username
        varchar password
        varchar nickname
        varchar email
        varchar phone
        varchar avatar
        tinyint status
        datetime create_time
        datetime update_time
    }
    
    sys_role {
        bigint id PK
        varchar name
        varchar code
        varchar description
        tinyint status
        datetime create_time
        datetime update_time
    }
    
    sys_permission {
        bigint id PK
        varchar name
        varchar code
        tinyint type
        bigint parent_id
        varchar path
        varchar component
        varchar icon
        int sort
        tinyint status
        datetime create_time
        datetime update_time
    }
    
    sys_user_role {
        bigint id PK
        bigint user_id
        bigint role_id
        datetime create_time
    }
    
    sys_role_permission {
        bigint id PK
        bigint role_id
        bigint permission_id
        datetime create_time
    }

数据字典

状态枚举

表名 字段名 枚举值 说明
sys_user status 0 禁用
sys_user status 1 启用
sys_role status 0 禁用
sys_role status 1 启用
sys_permission status 0 禁用
sys_permission status 1 启用
sys_operation_log status 0 失败
sys_operation_log status 1 成功

类型枚举

表名 字段名 枚举值 说明
sys_permission type 1 菜单权限
sys_permission type 2 按钮权限
sys_menu type 1 目录
sys_menu type 2 菜单
sys_menu type 3 按钮

数据库优化建议

1. 索引优化

  • 为常用查询字段建立索引
  • 避免过度索引影响写入性能
  • 定期分析索引使用情况

2. 查询优化

  • 使用分页查询避免大数据量
  • 避免 SELECT * 查询
  • 合理使用 JOIN 查询

3. 存储优化

  • 合理设置字段长度
  • 使用合适的数据类型
  • 定期清理历史数据

4. 安全优化

  • 敏感字段加密存储
  • 定期备份数据
  • 访问权限控制

迁移策略

版本管理

  • 使用 Flyway 或 Liquibase 进行数据库版本管理
  • 每个版本创建对应的迁移脚本
  • 测试环境先行验证

数据迁移

  • 生产环境数据备份
  • 灰度发布验证
  • 回滚方案准备

监控维护

性能监控

  • 慢查询日志分析
  • 连接数监控
  • 磁盘空间监控

日常维护

  • 定期数据备份
  • 索引重建优化
  • 日志文件清理