新增数据库开发规范

This commit is contained in:
ageerle
2025-09-17 17:35:51 +08:00
parent b2a589ed9c
commit 2a45776aeb
6 changed files with 1560 additions and 1383 deletions

View File

@@ -1,4 +0,0 @@
-- 为 chat_message 表添加 billing_type 字段
ALTER TABLE chat_message
ADD COLUMN billing_type char NULL COMMENT '计费类型1-token计费2-次数计费null-普通消息)';

View File

@@ -1,26 +0,0 @@
alter table chat_model
add priority int default 1 null comment '模型优先级(值越大优先级越高)';
UPDATE `ruoyi-ai`.chat_model t
SET t.priority = 3
WHERE t.id = 1782792839548735492;
UPDATE `ruoyi-ai`.chat_model t
SET t.priority = 6
WHERE t.id = 1859570229117022212;
UPDATE `ruoyi-ai`.chat_model t
SET t.priority = 5
WHERE t.id = 1859570229117022211;
UPDATE `ruoyi-ai`.chat_model t
SET t.priority = 4
WHERE t.id = 1782792839548735493;
UPDATE `ruoyi-ai`.chat_model t
SET t.priority = 2
WHERE t.id = 1828324413241466881;
UPDATE `ruoyi-ai`.chat_model t
SET t.priority = 2
WHERE t.id = 1782792839548735491;

View File

@@ -0,0 +1,162 @@
# 数据库开发规范
## 1. 建表规约
### 1.1 表命名规范
**【强制】** 表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字。
**【强制】** 表名采用 `业务-模块-功能` 的命名方式,使用下划线分隔。
**正例:**
```sql
-- 聊天业务-配置模块-配置功能
chat_config
-- 聊天业务-消息模块-消息功能
chat_message
-- 聊天业务-模型模块-模型功能
chat_model
-- 系统业务-用户模块-用户功能
sys_user
-- 系统业务-角色模块-角色功能
sys_role
-- 知识库业务-角色模块-角色功能
knowledge_role
```
**反例:**
```sql
-- 不规范的命名
chatConfig
ChatMessage
chat-model
user1
2user
user__info
```
### 1.2 字段命名规范
**【强制】** 字段名必须使用小写字母或数字,使用下划线分隔。
**【推荐】** 表达是与否概念的字段,必须使用 `is_xxx` 的方式命名,数据类型是 `char(1)`1 表示是0 表示否。
**正例:** `is_deleted``is_enabled`
## 2. 公共字段规范
### 2.1 必备公共字段
**【推荐】** 表增加以下公共字段:
| 字段名 | 类型 | 默认值 | 说明 | 是否必须 |
|--------|------|--------|------|----------|
| `id` | `bigint(20)` | AUTO_INCREMENT | 主键ID | 是 |
| `create_time` | `datetime` | NULL | 创建时间 | 是 |
| `update_time` | `datetime` | NULL | 更新时间 | 是 |
| `create_by` | `bigint(20)` | NULL | 创建者ID | 是 |
| `update_by` | `bigint(20)` | NULL | 更新者ID | 是 |
| `create_dept` | `bigint(20)` | NULL | 创建部门ID | 是 |
| `del_flag` | `char(1)` | '0' | 删除标志0存在 1删除 | 推荐 |
| `tenant_id` | `varchar(20)` | '000000' | 租户编号 | 多租户必须 |
| `remark` | `varchar(500)` | NULL | 备注 | 是 |
| `version` | `int(11)` | NULL | 版本号(乐观锁) | 可选 |
### 2.2 公共字段说明
- **`id`**: 主键,使用雪花算法生成的 bigint 类型
- **`create_time`**: 记录创建时间,便于数据追踪和审计
- **`update_time`**: 记录最后更新时间,便于数据同步和缓存失效
- **`create_by`**: 创建者用户ID便于权限控制和数据追溯
- **`update_by`**: 更新者用户ID便于操作审计
- **`del_flag`**: 逻辑删除标志0表示正常1表示删除
- **`tenant_id`**: 租户隔离字段,支持多租户架构
- **`remark`**: 备注信息,便于业务说明
## 3. SQL 更新管理规范
### 3.1 目录结构
```
script/
├── sql/
│ ├── ruoyi-ai.sql # 初始化SQL文件
│ └── update/ # 增量更新SQL目录
│ ├── 2024-05-24-chat-message-billing-type.sql
│ ├── 2024-07-13-chat-model-priority.sql
│ └── 2024-08-15-knowledge-role-bak.sql
└── deploy/
└── deploy/
└── mysql-init/
└── ruoyi-ai.sql # Docker初始化SQL与主文件同步
```
### 3.2 更新SQL规范
**【强制】** 增量更新SQL文件必须放在 `script/sql/update/` 目录下。
**【强制】** 更新SQL文件命名格式`YYYY-MM-DD-功能描述.sql`
**正例:**
```
2024-05-24-chat-message-billing-type.sql
2024-07-13-chat-model-priority.sql
2024-08-15-knowledge-role-backup.sql
```
**【强制】** 每个更新SQL文件必须包含
- 文件头部注释说明变更内容
- 变更日期和负责人
- 具体的DDL/DML语句
**正例:**
```sql
-- 为 chat_message 表添加 billing_type 字段
-- 变更日期: 2024-05-24
-- 负责人: 张三
-- 说明: 支持消息计费类型区分
ALTER TABLE chat_message
ADD COLUMN billing_type char NULL COMMENT '计费类型1-token计费2-次数计费null-普通消息)';
```
### 3.3 部署流程
#### 3.3.1 首次部署
**【强制】** 首次初始化项目只需要执行:
```bash
mysql -u root -p database_name < script/sql/ruoyi-ai.sql
```
#### 3.3.2 增量更新
**【强制】** 代码更新时,按日期顺序执行 `script/sql/update/` 下的补丁SQL
```bash
# 按文件名日期顺序执行
mysql -u root -p database_name < script/sql/update/2024-05-24-chat-message-billing-type.sql
mysql -u root -p database_name < script/sql/update/2024-07-13-chat-model-priority.sql
```
#### 3.3.3 同步更新
**【强制】** 当数据库发生变化时,必须同时完成以下操作:
1.`script/sql/update/` 下添加增量SQL补丁
2. 将变更同步更新到初始化文件 `script/sql/ruoyi-ai.sql`
3. 同步更新Docker初始化文件 `script/deploy/deploy/mysql-init/ruoyi-ai.sql`
**说明:** 确保三个文件的最终状态保持一致,新部署的环境和增量更新的环境数据库结构完全相同。
---
>
> 最后更新时间2025-09-17

View File

@@ -1,100 +0,0 @@
/*
Navicat Premium Dump SQL
Source Server : mysql-local-study
Source Server Type : MySQL
Source Server Version : 80405 (8.4.5)
Source Host : 100.168.0.1:3500
Source Schema : ruoyi-ai
Target Server Type : MySQL
Target Server Version : 80405 (8.4.5)
File Encoding : 65001
Date: 20/07/2025 10:01:42
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for knowledge_role
-- ----------------------------
DROP TABLE IF EXISTS `knowledge_role`;
CREATE TABLE `knowledge_role`
(
`id` bigint NOT NULL COMMENT '知识库角色id',
`name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '知识库角色name',
`del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '删除标志0代表存在 2代表删除',
`create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
`create_by` bigint NULL DEFAULT NULL COMMENT '创建者',
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`update_by` bigint NULL DEFAULT NULL COMMENT '更新者',
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
`group_id` bigint NULL DEFAULT NULL COMMENT '知识库角色组id',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB
CHARACTER SET = utf8mb4
COLLATE = utf8mb4_general_ci COMMENT = '知识库角色表'
ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Table structure for knowledge_role_group
-- ----------------------------
DROP TABLE IF EXISTS `knowledge_role_group`;
CREATE TABLE `knowledge_role_group`
(
`id` bigint NOT NULL COMMENT '知识库角色组id',
`name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '知识库角色组name',
`del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '删除标志0代表存在 2代表删除',
`create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
`create_by` bigint NULL DEFAULT NULL COMMENT '创建者',
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`update_by` bigint NULL DEFAULT NULL COMMENT '更新者',
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB
CHARACTER SET = utf8mb4
COLLATE = utf8mb4_general_ci COMMENT = '知识库角色组表'
ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Table structure for knowledge_role_relation
-- ----------------------------
DROP TABLE IF EXISTS `knowledge_role_relation`;
CREATE TABLE `knowledge_role_relation`
(
`id` bigint NOT NULL COMMENT 'id',
`del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '删除标志0代表存在 2代表删除',
`create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
`create_by` bigint NULL DEFAULT NULL COMMENT '创建者',
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`update_by` bigint NULL DEFAULT NULL COMMENT '更新者',
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
`knowledge_role_id` bigint NULL DEFAULT NULL COMMENT '知识库角色id',
`knowledge_id` bigint NULL DEFAULT NULL COMMENT '知识库id',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB
CHARACTER SET = utf8mb4
COLLATE = utf8mb4_general_ci COMMENT = '知识库角色与知识库关联表'
ROW_FORMAT = DYNAMIC;
SET FOREIGN_KEY_CHECKS = 1;
-- 菜单
INSERT INTO `sys_menu` (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query_param`,
`is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_dept`,
`create_by`, `create_time`, `update_by`, `update_time`, `remark`)
VALUES (1946483381643743233, '知识库角色管理', 1775500307898949634, '12', 'knowledgeRole',
'operator/knowledgeRole/index', NULL, 1, 0, 'C', '0', '0', NULL, 'ri:user-3-fill', 103, 1,
'2025-07-19 16:41:17', NULL, NULL, '知识库角色管理');
-- 用户表添加字段
ALTER TABLE sys_user
ADD COLUMN `krole_group_type` VARCHAR(50) COMMENT '关联知识库角色/角色组',
ADD COLUMN `krole_group_ids` TEXT COMMENT '关联知识库角色/角色组id';