docs(db): 添加双数据库架构规范文档

- 在开发规范 steering 文件中新增第九节:双数据库架构规范
- 在开发文档中新增第八节:双数据库架构说明
- 明确 Admin 库与 Business 库的职责划分
- 定义配置数据分离规则和 DbContext 映射关系
- 规定跨库访问只读原则
This commit is contained in:
zpc 2026-02-20 15:52:28 +08:00
parent 8489b4300c
commit 2c3940895f
2 changed files with 128 additions and 8 deletions

View File

@ -443,7 +443,90 @@ entity.UpdateTime = DateTime.Now;
await _dbContext.SaveChangesAsync();
```
## 九、状态值定义
## 九、双数据库架构规范
### 9.1 数据库划分
本项目采用双数据库架构,严格区分后台管理数据与业务数据:
| 数据库 | 名称 | 职责 |
|--------|------|------|
| Admin 库 | `MiAssessment_Admin` | 后台管理系统自身运行所需数据RBAC、审计、运营配置 |
| Business 库 | `MiAssessment_Business` | C端用户产生的或直接服务C端的业务数据 |
### 9.2 Admin 库表清单
| 表名 | 说明 |
|------|------|
| `admin_users` | 后台管理员 |
| `roles` | 角色 |
| `menus` | 菜单 |
| `departments` | 部门 |
| `permissions` | 权限 |
| `role_menus` | 角色-菜单关联 |
| `role_permissions` | 角色-权限关联 |
| `user_roles` | 用户-角色关联 |
| `operation_logs` | 操作日志 |
| `refresh_tokens` | 刷新令牌 |
| `admin_configs` | 运营配置(支付、小程序、上传、短信等) |
| `dict_types` | 字典类型 |
| `dict_items` | 字典项 |
### 9.3 Business 库表清单
| 表名 | 说明 |
|------|------|
| `configs` | 业务配置(测评价格、佣金比例、提现限额、联系方式、协议等) |
| `banners` | 轮播图 |
| `promotions` | 宣传图 |
| `assessment_types` | 测评类型 |
| `questions` | 题目 |
| `report_categories` | 报告分类 |
| `question_category_mappings` | 题目-分类映射 |
| `report_conclusions` | 报告结论 |
| `assessment_records` | 测评记录 |
| `assessment_answers` | 测评答案 |
| `assessment_results` | 测评结果 |
| `users` | C端用户 |
| `orders` | 订单 |
| `planners` | 规划师 |
| `planner_bookings` | 规划预约 |
| `invite_codes` | 邀请码 |
| `commissions` | 佣金记录 |
| `withdrawals` | 提现记录 |
| `business_pages` | 业务页面 |
### 9.4 配置数据分离规则
| 配置类型 | 所在库 | 表名 | 示例 Key |
|----------|--------|------|----------|
| 运营配置 | Admin 库 | `admin_configs` | `weixinpay_setting`, `miniprogram_setting`, `upload_setting`, `sms_setting`, `app_setting`, `base` |
| 业务配置 | Business 库 | `configs` | `assessment_price`, `commission_rate_direct`, `commission_rate_indirect`, `withdraw_min_amount`, `contact_wechat`, `user_agreement`, `privacy_policy` |
### 9.5 DbContext 映射
| DbContext | 所在项目 | 连接数据库 | 读写权限 | 用途 |
|-----------|----------|------------|----------|------|
| `AdminDbContext` | MiAssessment.Admin | Admin 库 | 读写 | 后台管理系统主上下文 |
| `AdminBusinessDbContext` | MiAssessment.Admin.Business | Business 库 | 读写 | 后台管理业务数据 |
| `AdminConfigDbContext` | MiAssessment.Admin.Business | Admin 库 | 只读 | Business 项目读取运营配置 |
| `AdminConfigReadDbContext` | MiAssessment.Model | Admin 库 | 只读 | Core/API 项目读取运营配置 |
| `MiAssessmentDbContext` | MiAssessment.Model | Business 库 | 读写 | 小程序 API 主上下文 |
### 9.6 跨库访问规则
1. **Business 项目对 Admin 库只读**:通过 `AdminConfigDbContext` 读取运营配置,禁止写入
2. **Core/API 项目对 Admin 库只读**:通过 `AdminConfigReadDbContext` 读取运营配置,禁止写入
3. **Admin 库的写操作只通过 Admin 项目进行**:所有运营配置的增删改必须通过 `AdminDbContext`
4. **连接字符串命名**Admin 库使用 `AdminConnection`Business 库使用 `DefaultConnection`
### 9.7 新增配置项规则
- 如果配置是**运营/系统级别**(支付密钥、上传凭证、短信配置等)→ 存入 Admin 库 `admin_configs`
- 如果配置是**业务级别**(价格、佣金比例、协议内容等)→ 存入 Business 库 `configs`
- 新增 DbContext 时必须明确标注读写权限,跨库上下文必须标注 `只读`
## 十、状态值定义
### 9.1 通用状态
@ -471,7 +554,7 @@ await _dbContext.SaveChangesAsync();
| 2 | 合伙人 |
| 3 | 渠道合伙人 |
## 十、测试规范
## 十、测试规范
### 10.1 测试框架
@ -504,7 +587,7 @@ public Property PaginationReturnsCorrectCount()
}
```
## 十、Git 提交规范
## 十、Git 提交规范
### 11.1 提交信息格式
@ -536,7 +619,7 @@ feat(user): 添加用户列表分页查询功能
- 添加分页参数验证
```
## 十、前端开发规范(小程序)
## 十、前端开发规范(小程序)
### 12.1 Vue 组件规范

View File

@ -715,17 +715,54 @@ Content-Type: application/json
---
## 八、附录
## 八、双数据库架构
### 8.1 设计图地址
### 8.1 架构说明
本项目采用双数据库架构,严格区分后台管理数据与业务数据:
| 数据库 | 名称 | 职责 |
|--------|------|------|
| Admin 库 | `MiAssessment_Admin` | 后台管理系统自身运行所需数据RBAC、审计、运营配置 |
| Business 库 | `MiAssessment_Business` | C端用户产生的或直接服务C端的业务数据 |
### 8.2 配置数据分离
| 配置类型 | 所在库 | 表名 | 说明 |
|----------|--------|------|------|
| 运营配置 | Admin 库 | `admin_configs` | 支付密钥、小程序配置、上传凭证、短信配置等 |
| 业务配置 | Business 库 | `configs` | 测评价格、佣金比例、提现限额、联系方式、协议内容等 |
### 8.3 DbContext 映射
| DbContext | 所在项目 | 连接数据库 | 读写权限 |
|-----------|----------|------------|----------|
| `AdminDbContext` | MiAssessment.Admin | Admin 库 | 读写 |
| `AdminBusinessDbContext` | MiAssessment.Admin.Business | Business 库 | 读写 |
| `AdminConfigDbContext` | MiAssessment.Admin.Business | Admin 库 | 只读 |
| `AdminConfigReadDbContext` | MiAssessment.Model | Admin 库 | 只读 |
| `MiAssessmentDbContext` | MiAssessment.Model | Business 库 | 读写 |
### 8.4 跨库访问规则
1. Business 项目对 Admin 库**只读**,通过 `AdminConfigDbContext`
2. Core/API 项目对 Admin 库**只读**,通过 `AdminConfigReadDbContext`
3. Admin 库的**写操作只通过 Admin 项目**的 `AdminDbContext` 进行
4. 连接字符串Admin 库 = `AdminConnection`Business 库 = `DefaultConnection`
---
## 九、附录
### 9.1 设计图地址
Figma: https://www.figma.com/design/88edYGASUcyID6afiwILdf/项目?node-id=432-1991
### 8.2 相关文档
### 9.2 相关文档
- 需求文档:`docs/需求文档.md`
- 题库文档:`docs/题库和结论/`
- 设计切图:`docs/切图/`
- 设计图:`docs/设计图/`
### 8.3 题目-分类映射汇总
### 9.3 题目-分类映射汇总
详见各分析报告对应题目文档,核心映射关系已在 3.5 节说明。