Skip to content

Commit a0da059

Browse files
thewindwillstopfreshspf
authored andcommitted
docs(spx-backend): add documatation for database design
1 parent 1941356 commit a0da059

File tree

1 file changed

+135
-0
lines changed

1 file changed

+135
-0
lines changed
Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
# 数据库表设计文档
2+
3+
## 概述
4+
5+
本文档描述了 SPX Backend 中新增的 AI 资源管理相关数据库表设计。这些表主要用于管理 AI 生成的资源(如 SVG 图像)及其标签分类系统。
6+
7+
## 表结构设计
8+
9+
### 1. AI 资源表 (aiResource)
10+
11+
**表名**: `aiResource`
12+
**描述**: 存储 AI 生成的资源信息,主要是 SVG 图像资源
13+
14+
| 字段名 | 数据类型 | 约束 | 描述 |
15+
|--------|----------|------|------|
16+
| id | bigint | PRIMARY KEY, AUTO_INCREMENT | 主键,资源唯一标识 |
17+
| url | varchar | NOT NULL | 资源访问 URL |
18+
| created_at | timestamp | NOT NULL | 创建时间 |
19+
| updated_at | timestamp | NOT NULL | 更新时间 |
20+
| deleted_at | timestamp | INDEX | 软删除时间戳 |
21+
22+
**特性**:
23+
- 继承自基础 Model 结构,包含标准的时间戳字段和软删除支持
24+
- 支持通过多对多关系与标签关联
25+
- URL 字段存储资源的访问地址(可能是文件路径或云存储 URL)
26+
27+
### 2. 标签表 (label)
28+
29+
**表名**: `label`
30+
**描述**: 存储用于分类 AI 资源的标签信息
31+
32+
| 字段名 | 数据类型 | 约束 | 描述 |
33+
|--------|----------|------|------|
34+
| id | bigint | PRIMARY KEY, AUTO_INCREMENT | 主键,标签唯一标识 |
35+
| labelName | varchar(50) | UNIQUE, NOT NULL | 标签名称,唯一约束 |
36+
| created_at | timestamp | NOT NULL | 创建时间 |
37+
| updated_at | timestamp | NOT NULL | 更新时间 |
38+
| deleted_at | timestamp | INDEX | 软删除时间戳 |
39+
40+
**特性**:
41+
- 标签名称具有唯一性约束,防止重复标签
42+
- 限制标签名称长度为 50 字符
43+
- 支持通过多对多关系与 AI 资源关联
44+
45+
### 3. 资源标签关联表 (resource_label)
46+
47+
**表名**: `resource_label`
48+
**描述**: AI 资源与标签的多对多关联表
49+
50+
| 字段名 | 数据类型 | 约束 | 描述 |
51+
|--------|----------|------|------|
52+
| id | bigint | PRIMARY KEY, AUTO_INCREMENT | 主键,关联记录唯一标识 |
53+
| aiResourceId | bigint | NOT NULL, INDEX, FOREIGN KEY | 外键,引用 aiResource 表的 id |
54+
| labelId | bigint | NOT NULL, INDEX, FOREIGN KEY | 外键,引用 label 表的 id |
55+
| created_at | timestamp | NOT NULL | 创建时间 |
56+
| updated_at | timestamp | NOT NULL | 更新时间 |
57+
| deleted_at | timestamp | INDEX | 软删除时间戳 |
58+
59+
**外键关系**:
60+
- `aiResourceId``aiResource.id`
61+
- `labelId``label.id`
62+
63+
**索引设计**:
64+
- `aiResourceId` 字段建立索引,优化基于资源查询标签的性能
65+
- `labelId` 字段建立索引,优化基于标签查询资源的性能
66+
- `deleted_at` 字段建立索引,支持软删除查询优化
67+
68+
## 关系模型
69+
70+
```
71+
aiResource (1) ←→ (N) resource_label (N) ←→ (1) label
72+
```
73+
74+
这是一个典型的多对多关系设计:
75+
- 一个 AI 资源可以有多个标签
76+
- 一个标签可以被多个 AI 资源使用
77+
- 通过中间表 `resource_label` 实现多对多关联
78+
79+
## 数据库特性
80+
81+
### 软删除支持
82+
所有表都支持软删除功能:
83+
- 使用 `deleted_at` 字段标记删除状态
84+
- 查询时自动过滤已删除记录
85+
- 支持数据恢复
86+
87+
### 时间戳审计
88+
每个表都包含完整的时间戳字段:
89+
- `created_at`: 记录创建时间
90+
- `updated_at`: 记录最后更新时间
91+
- `deleted_at`: 软删除时间(为 NULL 表示未删除)
92+
93+
### 索引优化
94+
- 主键自动建立聚簇索引
95+
- 外键字段建立普通索引,优化关联查询
96+
- `deleted_at` 字段建立索引,优化软删除查询
97+
- 标签名称的唯一索引确保数据一致性
98+
99+
## 使用场景
100+
101+
### 1. AI 资源管理
102+
- 存储 SVG 图像生成结果
103+
- 记录资源的访问 URL
104+
- 支持资源的软删除和恢复
105+
106+
### 2. 标签分类系统
107+
- 为 AI 资源打标签进行分类
108+
- 支持多维度标签组合
109+
- 便于资源的检索和过滤
110+
111+
### 3. 查询优化
112+
- 通过标签快速筛选相关资源
113+
- 通过资源查看所有关联标签
114+
- 支持复杂的标签组合查询
115+
116+
## 扩展性考虑
117+
118+
### 1. 字段扩展
119+
- AI 资源表可以根据需要添加更多元数据字段(如尺寸、格式等)
120+
- 标签表可以添加描述、颜色、图标等字段
121+
122+
### 2. 关系扩展
123+
- 可以为关联表添加权重字段,支持标签重要性排序
124+
- 可以添加标签层级关系,支持标签树形结构
125+
126+
### 3. 性能优化
127+
- 根据查询模式可以添加复合索引
128+
- 考虑分表策略应对大数据量场景
129+
130+
## 注意事项
131+
132+
1. **数据一致性**: 删除标签时需要考虑关联资源的处理策略
133+
2. **性能监控**: 需要监控多对多查询的性能,必要时进行索引优化
134+
3. **数据清理**: 定期清理软删除的数据,避免表空间过度膨胀
135+
4. **权限控制**: 考虑用户权限,确保资源访问的安全性

0 commit comments

Comments
 (0)