698 lines
20 KiB
Markdown
698 lines
20 KiB
Markdown
# Lyzsys 数据库设计文档
|
||
|
||
## 📖 目录
|
||
|
||
- [数据库概述](#数据库概述)
|
||
- [设计规范](#设计规范)
|
||
- [核心表设计](#核心表设计)
|
||
- [索引设计](#索引设计)
|
||
- [数据字典](#数据字典)
|
||
- [多租户设计](#多租户设计)
|
||
- [数据库优化](#数据库优化)
|
||
- [数据库管理](#数据库管理)
|
||
|
||
---
|
||
|
||
## 数据库概述
|
||
|
||
### 技术选型
|
||
|
||
| 特性 | 说明 |
|
||
|------|------|
|
||
| 数据库 | MySQL 5.7+ / 8.0+ |
|
||
| 字符集 | utf8mb4 |
|
||
| 排序规则 | utf8mb4_unicode_ci |
|
||
| 引擎 | InnoDB |
|
||
| 时区 | Asia/Shanghai |
|
||
|
||
### 支持的数据库
|
||
|
||
- MySQL 5.7、8.0+
|
||
- PostgreSQL 9.6+
|
||
| Oracle 11g+
|
||
| SQL Server 2012+
|
||
| H2 2.x (开发测试)
|
||
|
||
### 数据库特点
|
||
|
||
1. **多数据库支持**: 通过 MyBatis Plus 实现
|
||
2. **租户隔离**: 支持多租户数据隔离
|
||
3. **逻辑删除**: 支持软删除
|
||
4. **数据权限**: 支持行级数据权限
|
||
5. **审计日志**: 完整的创建、更新日志
|
||
|
||
---
|
||
|
||
## 设计规范
|
||
|
||
### 命名规范
|
||
|
||
#### 数据库命名
|
||
|
||
- 格式: `lyzsys`
|
||
- 示例: `lyzsys`
|
||
|
||
#### 表命名
|
||
|
||
- 格式: `{模块}_{业务}_{实体}`
|
||
- 规则: 小写字母 + 下划线
|
||
- 示例:
|
||
- `system_users` - 系统用户表
|
||
- `system_roles` - 系统角色表
|
||
- `mall_orders` - 商城订单表
|
||
- `bpm_process_instance` - 工作流实例表
|
||
|
||
#### 字段命名
|
||
|
||
- 格式: 小写字母 + 下划线
|
||
- 规则: 使用有意义的单词组合
|
||
- 示例:
|
||
- `user_id` - 用户 ID
|
||
- `user_name` - 用户名
|
||
- `create_time` - 创建时间
|
||
- `update_time` - 更新时间
|
||
|
||
#### 索引命名
|
||
|
||
- 主键索引: `PRIMARY`
|
||
- 唯一索引: `uniq_{字段名}`
|
||
- 普通索引: `idx_{字段名}`
|
||
- 示例:
|
||
- `uniq_username` - 用户名唯一索引
|
||
- `idx_dept_id` - 部门 ID 普通索引
|
||
|
||
### 字段类型
|
||
|
||
#### 整数类型
|
||
|
||
| 类型 | 字节 | 范围 | 用途 |
|
||
|------|------|------|------|
|
||
| TINYINT | 1 | -128 ~ 127 | 状态、标识 |
|
||
| SMALLINT | 2 | -32768 ~ 32767 | 枚举值 |
|
||
| INT | 4 | -21亿 ~ 21亿 | 数量、序号 |
|
||
| BIGINT | 8 | 极大数值 | 主键、外键 |
|
||
|
||
#### 字符串类型
|
||
|
||
| 类型 | 长度 | 用途 |
|
||
|------|------|------|
|
||
| CHAR | 0-255 | 固定长度字符串 |
|
||
| VARCHAR | 0-65535 | 变长字符串 |
|
||
| TEXT | 0-65535 | 长文本 |
|
||
| LONGTEXT | 0-4294967295 | 超长文本 |
|
||
|
||
#### 日期时间类型
|
||
|
||
| 类型 | 格式 | 用途 |
|
||
|------|------|------|
|
||
| DATE | YYYY-MM-DD | 日期 |
|
||
| DATETIME | YYYY-MM-DD HH:MM:SS | 日期时间 |
|
||
| TIMESTAMP | 时间戳 | 时间戳 |
|
||
|
||
#### 小数类型
|
||
|
||
| 类型 | 用途 |
|
||
|------|------|
|
||
| DECIMAL(M,D) | 金额、精度数值 |
|
||
|
||
### 通用字段
|
||
|
||
每张表都包含以下通用字段:
|
||
|
||
```sql
|
||
-- 主键
|
||
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键'
|
||
|
||
-- 创建信息
|
||
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
|
||
creator VARCHAR(64) COMMENT '创建人'
|
||
|
||
-- 更新信息
|
||
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
|
||
updater VARCHAR(64) COMMENT '更新人'
|
||
|
||
-- 删除标记
|
||
deleted BIT NOT NULL DEFAULT FALSE COMMENT '是否删除'
|
||
|
||
-- 租户 ID (多租户表)
|
||
tenant_id BIGINT NOT NULL COMMENT '租户 ID'
|
||
```
|
||
|
||
---
|
||
|
||
## 核心表设计
|
||
|
||
### 系统管理模块
|
||
|
||
#### 1. 用户表 (system_users)
|
||
|
||
```sql
|
||
CREATE TABLE `system_users` (
|
||
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '用户ID',
|
||
`username` VARCHAR(30) NOT NULL COMMENT '用户账号',
|
||
`password` VARCHAR(100) NOT NULL COMMENT '密码',
|
||
`nickname` VARCHAR(30) NOT NULL COMMENT '用户昵称',
|
||
`remark` VARCHAR(500) COMMENT '备注',
|
||
`dept_id` BIGINT NOT NULL COMMENT '部门ID',
|
||
`post_ids` VARCHAR(255) COMMENT '岗位编号数组',
|
||
`email` VARCHAR(50) COMMENT '用户邮箱',
|
||
`mobile` VARCHAR(11) COMMENT '手机号码',
|
||
`sex` TINYINT COMMENT '用户性别',
|
||
`avatar` VARCHAR(100) COMMENT '头像地址',
|
||
`status` TINYINT NOT NULL DEFAULT 0 COMMENT '帐号状态(0正常 1停用)',
|
||
`login_ip` VARCHAR(50) COMMENT '最后登录IP',
|
||
`login_date` DATETIME COMMENT '最后登录时间',
|
||
`tenant_id` BIGINT NOT NULL COMMENT '租户 ID',
|
||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||
`creator` VARCHAR(64) COMMENT '创建人',
|
||
`updater` VARCHAR(64) COMMENT '更新人',
|
||
`deleted` BIT NOT NULL DEFAULT FALSE COMMENT '是否删除',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uniq_username` (`username`, `update_time`, `tenant_id`, `deleted`)
|
||
) ENGINE=InnoDB COMMENT='用户信息表';
|
||
```
|
||
|
||
#### 2. 角色表 (system_roles)
|
||
|
||
```sql
|
||
CREATE TABLE `system_roles` (
|
||
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '角色ID',
|
||
`name` VARCHAR(30) NOT NULL COMMENT '角色名称',
|
||
`code` VARCHAR(100) NOT NULL COMMENT '角色权限字符串',
|
||
`sort` INT NOT NULL COMMENT '显示顺序',
|
||
`data_scope` TINYINT NOT NULL DEFAULT 1 COMMENT '数据范围(1:全部数据权限 2:本部门及以下数据权限 3:本部门数据权限 4:仅本人数据权限)',
|
||
`data_scope_dept_ids` VARCHAR(500) COMMENT '数据范围-部门数组',
|
||
`status` TINYINT NOT NULL COMMENT '角色状态(0正常 1停用)',
|
||
`type` TINYINT NOT NULL COMMENT '角色类型(1:系统内置 2:自定义)',
|
||
`remark` VARCHAR(500) COMMENT '备注',
|
||
`tenant_id` BIGINT NOT NULL COMMENT '租户 ID',
|
||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||
`creator` VARCHAR(64) COMMENT '创建人',
|
||
`updater` VARCHAR(64) COMMENT '更新人',
|
||
`deleted` BIT NOT NULL DEFAULT FALSE COMMENT '是否删除',
|
||
PRIMARY KEY (`id`)
|
||
) ENGINE=InnoDB COMMENT='角色信息表';
|
||
```
|
||
|
||
#### 3. 菜单表 (system_menu)
|
||
|
||
```sql
|
||
CREATE TABLE `system_menu` (
|
||
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '菜单ID',
|
||
`name` VARCHAR(50) NOT NULL COMMENT '菜单名称',
|
||
`permission` VARCHAR(100) NOT NULL COMMENT '权限标识',
|
||
`type` TINYINT NOT NULL COMMENT '菜单类型(1:目录 2:菜单 3:按钮)',
|
||
`sort` INT NOT NULL DEFAULT 0 COMMENT '显示顺序',
|
||
`parent_id` BIGINT NOT NULL DEFAULT 0 COMMENT '父菜单ID',
|
||
`path` VARCHAR(200) COMMENT '路由地址',
|
||
`icon` VARCHAR(100) COMMENT '菜单图标',
|
||
`component` VARCHAR(255) COMMENT '组件路径',
|
||
`component_name` VARCHAR(255) COMMENT '组件名',
|
||
`status` TINYINT NOT NULL DEFAULT 0 COMMENT '菜单状态(0正常 1停用)',
|
||
`visible` BIT NOT NULL DEFAULT TRUE COMMENT '是否可见',
|
||
`keep_alive` BIT NOT NULL DEFAULT FALSE COMMENT '是否缓存',
|
||
`always_show` BIT NOT NULL DEFAULT FALSE COMMENT '是否总是显示',
|
||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||
`creator` VARCHAR(64) COMMENT '创建人',
|
||
`updater` VARCHAR(64) COMMENT '更新人',
|
||
`deleted` BIT NOT NULL DEFAULT FALSE COMMENT '是否删除',
|
||
PRIMARY KEY (`id`)
|
||
) ENGINE=InnoDB COMMENT='菜单权限表';
|
||
```
|
||
|
||
#### 4. 部门表 (system_dept)
|
||
|
||
```sql
|
||
CREATE TABLE `system_dept` (
|
||
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '部门id',
|
||
`parent_id` BIGINT NOT NULL DEFAULT 0 COMMENT '父部门id',
|
||
`name` VARCHAR(30) NOT NULL COMMENT '部门名称',
|
||
`sort` INT NOT NULL DEFAULT 0 COMMENT '显示顺序',
|
||
`leader_user_id` BIGINT COMMENT '负责人',
|
||
`phone` VARCHAR(11) COMMENT '联系电话',
|
||
`email` VARCHAR(64) COMMENT '邮箱',
|
||
`status` TINYINT NOT NULL COMMENT '部门状态(0正常 1停用)',
|
||
`tenant_id` BIGINT NOT NULL COMMENT '租户 ID',
|
||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||
`creator` VARCHAR(64) COMMENT '创建人',
|
||
`updater` VARCHAR(64) COMMENT '更新人',
|
||
`deleted` BIT NOT NULL DEFAULT FALSE COMMENT '是否删除',
|
||
PRIMARY KEY (`id`)
|
||
) ENGINE=InnoDB COMMENT='部门表';
|
||
```
|
||
|
||
#### 5. 字典表 (system_dict_type)
|
||
|
||
```sql
|
||
CREATE TABLE `system_dict_type` (
|
||
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '字典主键',
|
||
`name` VARCHAR(100) NOT NULL COMMENT '字典名称',
|
||
`type` VARCHAR(100) NOT NULL COMMENT '字典类型',
|
||
`status` TINYINT NOT NULL DEFAULT 0 COMMENT '状态(0正常 1停用)',
|
||
`remark` VARCHAR(500) COMMENT '备注',
|
||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||
`creator` VARCHAR(64) COMMENT '创建人',
|
||
`updater` VARCHAR(64) COMMENT '更新人',
|
||
`deleted` BIT NOT NULL DEFAULT FALSE COMMENT '是否删除',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uniq_type` (`type`, `update_time`, `deleted`)
|
||
) ENGINE=InnoDB COMMENT='字典类型表';
|
||
```
|
||
|
||
### 基础设施模块
|
||
|
||
#### 6. 代码生成表 (infra_codegen_column)
|
||
|
||
```sql
|
||
CREATE TABLE `infra_codegen_column` (
|
||
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '编号',
|
||
`table_id` BIGINT NOT NULL COMMENT '表编号',
|
||
`column_name` VARCHAR(200) NOT NULL COMMENT '字段名',
|
||
`data_type` VARCHAR(100) NOT NULL COMMENT '字段类型',
|
||
`column_comment` VARCHAR(500) COMMENT '字段描述',
|
||
`nullable` BIT NOT NULL COMMENT '是否允许为空',
|
||
`pk` BIT NOT NULL COMMENT '是否主键',
|
||
`ordinal_position` INT NOT NULL COMMENT '排序',
|
||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||
`creator` VARCHAR(64) COMMENT '创建人',
|
||
`updater` VARCHAR(64) COMMENT '更新人',
|
||
`deleted` BIT NOT NULL DEFAULT FALSE COMMENT '是否删除',
|
||
PRIMARY KEY (`id`)
|
||
) ENGINE=InnoDB COMMENT='代码生成字段表';
|
||
```
|
||
|
||
#### 7. 定时任务表 (infra_job)
|
||
|
||
```sql
|
||
CREATE TABLE `infra_job` (
|
||
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '任务ID',
|
||
`name` VARCHAR(200) NOT NULL COMMENT '任务名称',
|
||
`status` TINYINT NOT NULL COMMENT '任务状态',
|
||
`handler_name` VARCHAR(200) NOT NULL COMMENT '处理器的名字',
|
||
`handler_param` VARCHAR(500) COMMENT '处理器的参数',
|
||
`cron_expression` VARCHAR(100) NOT NULL COMMENT 'Cron 表达式',
|
||
`retry_count` INT NOT NULL DEFAULT 0 COMMENT '重试次数',
|
||
`retry_interval` INT NOT NULL DEFAULT 0 COMMENT '重试间隔',
|
||
`monitor_timeout` INT NOT NULL DEFAULT 0 COMMENT '监控超时时间',
|
||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||
`creator` VARCHAR(64) COMMENT '创建人',
|
||
`updater` VARCHAR(64) COMMENT '更新人',
|
||
`deleted` BIT NOT NULL DEFAULT FALSE COMMENT '是否删除',
|
||
PRIMARY KEY (`id`)
|
||
) ENGINE=InnoDB COMMENT='定时任务表';
|
||
```
|
||
|
||
### 工作流模块
|
||
|
||
#### 8. 流程实例表 (bpm_process_instance)
|
||
|
||
```sql
|
||
CREATE TABLE `bpm_process_instance` (
|
||
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '编号',
|
||
`process_definition_id` VARCHAR(64) NOT NULL COMMENT '流程定义的编号',
|
||
`process_instance_id` VARCHAR(64) NOT NULL COMMENT '流程实例的编号',
|
||
`start_user_id` BIGINT NOT NULL COMMENT '发起人的用户编号',
|
||
`name` VARCHAR(255) COMMENT '流程实例的名字',
|
||
`business_key` VARCHAR(64) COMMENT '业务标识',
|
||
`status` TINYINT NOT NULL COMMENT '流程实例的状态',
|
||
`tenant_id` BIGINT NOT NULL COMMENT '租户 ID',
|
||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||
`creator` VARCHAR(64) COMMENT '创建人',
|
||
`updater` VARCHAR(64) COMMENT '更新人',
|
||
`deleted` BIT NOT NULL DEFAULT FALSE COMMENT '是否删除',
|
||
PRIMARY KEY (`id`)
|
||
) ENGINE=InnoDB COMMENT='流程实例表';
|
||
```
|
||
|
||
### 商城模块
|
||
|
||
#### 9. 商品表 (mall_product)
|
||
|
||
```sql
|
||
CREATE TABLE `mall_product` (
|
||
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '商品编号',
|
||
`name` VARCHAR(200) NOT NULL COMMENT '商品名称',
|
||
`sell_point` VARCHAR(500) COMMENT '卖点',
|
||
`description` VARCHAR(2000) COMMENT '商品详情',
|
||
`category_id` BIGINT NOT NULL COMMENT '分类编号',
|
||
`brand_id` BIGINT COMMENT '品牌编号',
|
||
`price` BIGINT NOT NULL COMMENT '价格,单位:分',
|
||
`stock` INT NOT NULL COMMENT '库存',
|
||
`pic_url` VARCHAR(500) COMMENT '商品主图',
|
||
`status` TINYINT NOT NULL COMMENT '商品状态',
|
||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||
`creator` VARCHAR(64) COMMENT '创建人',
|
||
`updater` VARCHAR(64) COMMENT '更新人',
|
||
`deleted` BIT NOT NULL DEFAULT FALSE COMMENT '是否删除',
|
||
PRIMARY KEY (`id`)
|
||
) ENGINE=InnoDB COMMENT='商品表';
|
||
```
|
||
|
||
#### 10. 订单表 (mall_order)
|
||
|
||
```sql
|
||
CREATE TABLE `mall_order` (
|
||
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '订单编号',
|
||
`user_id` BIGINT NOT NULL COMMENT '用户编号',
|
||
`order_no` VARCHAR(64) NOT NULL COMMENT '订单号',
|
||
`total_price` BIGINT NOT NULL COMMENT '订单总价,单位:分',
|
||
`status` TINYINT NOT NULL COMMENT '订单状态',
|
||
`pay_time` DATETIME COMMENT '付款时间',
|
||
`delivery_time` DATETIME COMMENT '发货时间',
|
||
`receiver_time` DATETIME COMMENT '收货时间',
|
||
`comment_time` DATETIME COMMENT '评论时间',
|
||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||
`creator` VARCHAR(64) COMMENT '创建人',
|
||
`updater` VARCHAR(64) COMMENT '更新人',
|
||
`deleted` BIT NOT NULL DEFAULT FALSE COMMENT '是否删除',
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uniq_order_no` (`order_no`)
|
||
) ENGINE=InnoDB COMMENT='订单表';
|
||
```
|
||
|
||
---
|
||
|
||
## 索引设计
|
||
|
||
### 索引类型
|
||
|
||
#### 1. 主键索引 (PRIMARY KEY)
|
||
|
||
每张表都有主键索引:
|
||
|
||
```sql
|
||
PRIMARY KEY (`id`)
|
||
```
|
||
|
||
#### 2. 唯一索引 (UNIQUE)
|
||
|
||
用于保证字段的唯一性:
|
||
|
||
```sql
|
||
UNIQUE KEY `uniq_username` (`username`, `update_time`, `tenant_id`, `deleted`)
|
||
```
|
||
|
||
#### 3. 普通索引 (INDEX)
|
||
|
||
用于提升查询性能:
|
||
|
||
```sql
|
||
KEY `idx_dept_id` (`dept_id`)
|
||
```
|
||
|
||
#### 4. 联合索引
|
||
|
||
用于多字段查询:
|
||
|
||
```sql
|
||
KEY `idx_user_id_status` (`user_id`, `status`)
|
||
```
|
||
|
||
### 索引规范
|
||
|
||
1. **主键索引**: 使用自增 BIGINT
|
||
2. **唯一索引**: 业务唯一字段
|
||
3. **普通索引**: 频繁查询的字段
|
||
4. **联合索引**: 多字段组合查询,遵循最左前缀原则
|
||
5. **索引数量**: 单表索引不超过 5 个
|
||
|
||
### 索引示例
|
||
|
||
```sql
|
||
-- 用户表索引
|
||
PRIMARY KEY (`id`)
|
||
UNIQUE KEY `uniq_username` (`username`, `update_time`, `tenant_id`, `deleted`)
|
||
KEY `idx_dept_id` (`dept_id`)
|
||
KEY `idx_status` (`status`)
|
||
|
||
-- 订单表索引
|
||
PRIMARY KEY (`id`)
|
||
UNIQUE KEY `uniq_order_no` (`order_no`)
|
||
KEY `idx_user_id` (`user_id`)
|
||
KEY `idx_status` (`status`)
|
||
KEY `idx_create_time` (`create_time`)
|
||
```
|
||
|
||
---
|
||
|
||
## 数据字典
|
||
|
||
### 通用数据字典
|
||
|
||
#### 1. 用户性别 (system_user_sex)
|
||
|
||
| 字典值 | 字典标签 | 颜色 |
|
||
|--------|----------|------|
|
||
| 1 | 男 | blue |
|
||
| 2 | 女 | pink |
|
||
| 3 | 未知 | gray |
|
||
|
||
#### 2. 用户状态 (system_common_status)
|
||
|
||
| 字典值 | 字典标签 | 颜色 |
|
||
|--------|----------|------|
|
||
| 0 | 启用 | success |
|
||
| 1 | 停用 | danger |
|
||
|
||
#### 3. 菜单类型 (system_menu_type)
|
||
|
||
| 字典值 | 字典标签 | 颜色 |
|
||
|--------|----------|------|
|
||
| 1 | 目录 | |
|
||
| 2 | 菜单 | |
|
||
| 3 | 按钮 | |
|
||
|
||
#### 4. 数据范围 (system_data_scope)
|
||
|
||
| 字典值 | 字典标签 |
|
||
|--------|----------|
|
||
| 1 | 全部数据权限 |
|
||
| 2 | 本部门及以下数据权限 |
|
||
| 3 | 本部门数据权限 |
|
||
| 4 | 仅本人数据权限 |
|
||
|
||
#### 5. 流程实例状态 (bpm_process_instance_status)
|
||
|
||
| 字典值 | 字典标签 | 颜色 |
|
||
|--------|----------|------|
|
||
| 1 | 进行中 | primary |
|
||
| 2 | 已结束 | success |
|
||
|
||
---
|
||
|
||
## 多租户设计
|
||
|
||
### 租户隔离策略
|
||
|
||
#### 1. 共享数据库、共享 Schema
|
||
|
||
所有租户共享同一个数据库,通过 `tenant_id` 字段隔离。
|
||
|
||
#### 2. 自动过滤
|
||
|
||
MyBatis Plus 拦截器自动添加租户条件:
|
||
|
||
```java
|
||
// 查询时自动添加租户条件
|
||
List<UserDO> users = userMapper.selectList();
|
||
|
||
// 实际 SQL
|
||
SELECT * FROM system_users
|
||
WHERE deleted = 0
|
||
AND tenant_id = 1
|
||
```
|
||
|
||
### 租户表设计
|
||
|
||
#### 租户表 (system_tenant)
|
||
|
||
```sql
|
||
CREATE TABLE `system_tenant` (
|
||
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '租户编号',
|
||
`name` VARCHAR(30) NOT NULL COMMENT '租户名',
|
||
`contact_user_id` BIGINT NOT NULL COMMENT '联系人的用户编号',
|
||
`contact_name` VARCHAR(30) NOT NULL COMMENT '联系人',
|
||
`contact_mobile` VARCHAR(11) COMMENT '联系手机',
|
||
`status` TINYINT NOT NULL COMMENT '租户状态',
|
||
`website` VARCHAR(256) COMMENT '绑定域名',
|
||
`package_id` BIGINT NOT NULL COMMENT '租户套餐编号',
|
||
`expire_time` DATETIME NOT NULL COMMENT '过期时间',
|
||
`account_count` INT NOT NULL COMMENT '账号数量',
|
||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||
`creator` VARCHAR(64) COMMENT '创建人',
|
||
`updater` VARCHAR(64) COMMENT '更新人',
|
||
`deleted` BIT NOT NULL DEFAULT FALSE COMMENT '是否删除',
|
||
PRIMARY KEY (`id`)
|
||
) ENGINE=InnoDB COMMENT='租户表';
|
||
```
|
||
|
||
#### 租户套餐表 (system_tenant_package)
|
||
|
||
```sql
|
||
CREATE TABLE `system_tenant_package` (
|
||
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '套餐编号',
|
||
`name` VARCHAR(30) NOT NULL COMMENT '套餐名',
|
||
`status` TINYINT NOT NULL COMMENT '套餐状态',
|
||
`remark` VARCHAR(500) COMMENT '备注',
|
||
`menu_ids` VARCHAR(500) NOT NULL COMMENT '关联的菜单编号',
|
||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||
`creator` VARCHAR(64) COMMENT '创建人',
|
||
`updater` VARCHAR(64) COMMENT '更新人',
|
||
`deleted` BIT NOT NULL DEFAULT FALSE COMMENT '是否删除',
|
||
PRIMARY KEY (`id`)
|
||
) ENGINE=InnoDB COMMENT='租户套餐表';
|
||
```
|
||
|
||
---
|
||
|
||
## 数据库优化
|
||
|
||
### SQL 优化
|
||
|
||
#### 1. 避免全表扫描
|
||
|
||
```sql
|
||
-- 不推荐
|
||
SELECT * FROM system_users
|
||
|
||
-- 推荐
|
||
SELECT id, username, nickname FROM system_users
|
||
```
|
||
|
||
#### 2. 使用索引
|
||
|
||
```sql
|
||
-- 不推荐
|
||
SELECT * FROM system_users WHERE SUBSTRING(username, 1, 3) = 'adm'
|
||
|
||
-- 推荐
|
||
SELECT * FROM system_users WHERE username LIKE 'adm%'
|
||
```
|
||
|
||
#### 3. 分页查询
|
||
|
||
```sql
|
||
-- 使用分页插件
|
||
SELECT * FROM system_users
|
||
LIMIT 10 OFFSET 0
|
||
```
|
||
|
||
### 表结构优化
|
||
|
||
#### 1. 字段类型选择
|
||
|
||
```sql
|
||
-- 不推荐
|
||
VARCHAR(1000) -- 过长
|
||
|
||
-- 推荐
|
||
VARCHAR(200) -- 合理长度
|
||
```
|
||
|
||
#### 2. 字段数量控制
|
||
|
||
单表字段数量不超过 50 个。
|
||
|
||
#### 3. 表分区
|
||
|
||
大表可以采用分区策略:
|
||
|
||
```sql
|
||
-- 按时间分区
|
||
CREATE TABLE `system_operate_log` (
|
||
`id` BIGINT NOT NULL AUTO_INCREMENT,
|
||
`create_time` DATETIME NOT NULL,
|
||
PRIMARY KEY (`id`, `create_time`)
|
||
) ENGINE=InnoDB
|
||
PARTITION BY RANGE (TO_DAYS(create_time)) (
|
||
PARTITION p202301 VALUES LESS THAN (TO_DAYS('2023-02-01')),
|
||
PARTITION p202302 VALUES LESS THAN (TO_DAYS('2023-03-01'))
|
||
);
|
||
```
|
||
|
||
---
|
||
|
||
## 数据库管理
|
||
|
||
### 数据库备份
|
||
|
||
#### 1. 逻辑备份
|
||
|
||
```bash
|
||
# 备份
|
||
mysqldump -u root -p lyzsys > lyzsys_backup.sql
|
||
|
||
# 恢复
|
||
mysql -u root -p lyzsys < lyzsys_backup.sql
|
||
```
|
||
|
||
#### 2. 物理备份
|
||
|
||
```bash
|
||
# 复制数据文件
|
||
cp -r /var/lib/mysql/lyzsys /backup/lyzsys
|
||
```
|
||
|
||
### 数据库监控
|
||
|
||
#### 1. 慢查询日志
|
||
|
||
```sql
|
||
-- 开启慢查询日志
|
||
SET GLOBAL slow_query_log = 'ON';
|
||
SET GLOBAL long_query_time = 2;
|
||
```
|
||
|
||
#### 2. 性能监控
|
||
|
||
```sql
|
||
-- 查看连接数
|
||
SHOW PROCESSLIST;
|
||
|
||
-- 查看状态
|
||
SHOW STATUS;
|
||
```
|
||
|
||
### 数据库维护
|
||
|
||
#### 1. 表优化
|
||
|
||
```sql
|
||
-- 优化表
|
||
OPTIMIZE TABLE system_users;
|
||
|
||
-- 分析表
|
||
ANALYZE TABLE system_users;
|
||
|
||
-- 修复表
|
||
REPAIR TABLE system_users;
|
||
```
|
||
|
||
#### 2. 索引优化
|
||
|
||
```sql
|
||
-- 查看索引使用情况
|
||
SHOW INDEX FROM system_users;
|
||
|
||
-- 删除无用索引
|
||
DROP INDEX idx_unused ON system_users;
|
||
```
|
||
|
||
---
|
||
|
||
**文档版本**: v1.0.0
|
||
**最后更新**: 2025-01-19
|
||
**维护团队**: Lyzsys 数据库团队
|