feat(aia): Complete AIA V2.0 with universal streaming capabilities
Major Changes: - Add StreamingService with OpenAI Compatible format - Upgrade Chat component V2 with Ant Design X integration - Implement AIA module with 12 intelligent agents - Update API routes to unified /api/v1 prefix - Update system documentation Backend (~1300 lines): - common/streaming: OpenAI Compatible adapter - modules/aia: 12 agents, conversation service, streaming integration - Update route versions (RVW, PKB to v1) Frontend (~3500 lines): - modules/aia: AgentHub + ChatWorkspace (100% prototype restoration) - shared/Chat: AIStreamChat, ThinkingBlock, useAIStream Hook - Update API endpoints to v1 Documentation: - AIA module status guide - Universal capabilities catalog - System overview updates - All module documentation sync Tested: Stream response verified, authentication working Status: AIA V2.0 core completed (85%)
This commit is contained in:
@@ -1,45 +1,45 @@
|
||||
# 数据库设计规范
|
||||
# <EFBFBD>唳旿摨栞挽霈∟<EFBFBD><EFBFBD>?
|
||||
|
||||
> **版本:** v2.0
|
||||
> **<EFBFBD><EFBFBD>𧋦嚗?* v2.0
|
||||
> **<2A><><EFBFBD>擧凒<E693A7>堆<EFBFBD>** 2025-11-06
|
||||
> **<2A>唳旿摨橒<E691A8>** PostgreSQL 15+
|
||||
> **ORM:** Prisma
|
||||
> **适用范围:** 平台层 + 能力层 + 业务模块层
|
||||
> **ORM嚗?* Prisma
|
||||
> **<EFBFBD><EFBFBD>鍂<EFBFBD><EFBFBD>凒嚗?* 撟喳蝱撅?+ <20>賢<EFBFBD>撅?+ 銝𡁜𦛚璅∪<E79285>撅?
|
||||
|
||||
---
|
||||
|
||||
## <20><> <20>詨<EFBFBD><E8A9A8>笔<EFBFBD>
|
||||
|
||||
本规范是所有模块数据库设计的基础规范,必须严格遵守。
|
||||
<EFBFBD>祈<EFBFBD><EFBFBD><EFBFBD>糓<EFBFBD><EFBFBD><EFBFBD>㗇芋<EFBFBD>埈㺭<EFBFBD>桀<EFBFBD>霈曇恣<EFBFBD><EFBFBD>抅蝖<EFBFBD>閫<EFBFBD><EFBFBD>嚗<EFBFBD><EFBFBD>憿颱艇<EFBFBD>潮<EFBFBD>摰<EFBFBD><EFBFBD>?
|
||||
|
||||
**设计原则:**
|
||||
- ✅ 遵循第三范式(3NF)
|
||||
- ✅ 使用SERIAL作为主键(整数自增,性能更好)
|
||||
- ✅ 所有表包含created_at和updated_at时间戳
|
||||
- ✅ 重要表使用软删除(保留deleted_at字段)
|
||||
- ✅ 外键约束使用ON DELETE CASCADE
|
||||
- ✅ 敏感字段加密存储(密码使用bcrypt)
|
||||
**霈曇恣<EFBFBD>笔<EFBFBD>嚗?*
|
||||
- <EFBFBD>?<3F>萄儐蝚砌<E89D9A><E7A08C><EFBFBD><EFBFBD>嚗?NF嚗?
|
||||
- <EFBFBD>?雿輻鍂SERIAL雿靝蛹銝駁睸嚗<EFBFBD>㟲<EFBFBD>啗䌊憓痹<EFBFBD><EFBFBD>扯<EFBFBD><EFBFBD>游末嚗?
|
||||
- <EFBFBD>?<3F><><EFBFBD>㕑”<E39591><E2809D>鉄created_at<EFBFBD>吴pdated_at<EFBFBD>園𡢿<EFBFBD>?
|
||||
- <EFBFBD>?<3F>滩<EFBFBD>銵其蝙<E585B6>刻蔓<E588BB>𣳇膄嚗<E88684><E59A97><EFBFBD>羮eleted_at摮埈挾嚗?
|
||||
- <EFBFBD>?憭㚚睸蝥行<E89DA5>雿輻鍂ON DELETE CASCADE
|
||||
- <EFBFBD>?<3F>𤩺<EFBFBD>摮埈挾<E59F88>惩<EFBFBD>摮睃<E691AE>嚗<EFBFBD><E59A97><EFBFBD><EFBFBD>蝙<EFBFBD>灸crypt嚗?
|
||||
|
||||
---
|
||||
|
||||
## 🏗️ Schema隔离策略 ⭐ 最重要
|
||||
## <EFBFBD><EFBFBD>儭?Schema<EFBFBD>𠉛氖蝑𣇉裦 潃?<3F><><EFBFBD>滩<EFBFBD>
|
||||
|
||||
### 銝箔<E98A9D>銋<EFBFBD><E98A8B>閬<EFBFBD>chema<6D>𠉛氖
|
||||
|
||||
**核心原因:**
|
||||
1. ✅ **模块独立性**:每个业务模块有独立的Schema
|
||||
2. ✅ **支持独立部署**:可以单独导出某个模块的数据
|
||||
3. ✅ **支持独立销售**:可以单独交付某个模块
|
||||
4. ✅ **权限隔离**:可以为不同Schema设置不同权限
|
||||
5. ✅ **避免命名冲突**:不同模块可以有相同的表名
|
||||
**<EFBFBD>詨<EFBFBD><EFBFBD>笔<EFBFBD>嚗?*
|
||||
1. <EFBFBD>?**璅∪<E79285><E288AA>祉<EFBFBD><E7A589>?*嚗𡁏<E59A97>銝芯<E98A9D><E88AAF>⊥芋<E28AA5>埈<EFBFBD><E59F88>祉<EFBFBD><E7A589><EFBFBD>chema
|
||||
2. <EFBFBD>?**<2A>舀<EFBFBD><E88880>祉<EFBFBD><E7A589>函蔡**嚗𡁜虾隞亙<E99A9E><E4BA99>砍紡<E7A08D>箸<EFBFBD>銝芣芋<E88AA3>㛖<EFBFBD><E39B96>唳旿
|
||||
3. <EFBFBD>?**<2A>舀<EFBFBD><E88880>祉<EFBFBD><E7A589><EFBFBD><EFBFBD>?*嚗𡁜虾隞亙<E99A9E><E4BA99>砌漱隞䀹<E99A9E>銝芣芋<E88AA3>?
|
||||
4. <EFBFBD>?**<2A><><EFBFBD><EFBFBD>𠉛氖**嚗𡁜虾隞乩蛹銝滚<E98A9D>Schema霈曄蔭銝滚<E98A9D><E6BB9A><EFBFBD><EFBFBD>
|
||||
5. <EFBFBD>?**<2A>踹<EFBFBD><E8B8B9>賢<EFBFBD><E8B3A2>脩<EFBFBD>**嚗帋<E59A97><E5B88B>峕芋<E5B395>堒虾隞交<E99A9E><E4BAA4>詨<EFBFBD><E8A9A8><EFBFBD>”<EFBFBD>?
|
||||
|
||||
### Schema<6D>賢<EFBFBD>閫<EFBFBD><E996AB>
|
||||
|
||||
```
|
||||
platform_schema # 平台基础层(全局共享)
|
||||
platform_schema # 撟喳蝱<EFBFBD>箇<EFBFBD>撅<EFBFBD><EFBFBD><EFBFBD>典<EFBFBD><EFBFBD>曹澈嚗?
|
||||
aia_schema # AI<41>箄<EFBFBD><E7AE84>桃<EFBFBD>
|
||||
asl_schema # AI<41>箄<EFBFBD><E7AE84><EFBFBD>讃
|
||||
pkb_schema # 个人知识库
|
||||
pkb_schema # 銝芯犖<EFBFBD>亥<EFBFBD>摨?
|
||||
dc_schema # <20>唳旿皜<E697BF><E79A9C><EFBFBD>渡<EFBFBD>
|
||||
ssa_schema # <20>箄<EFBFBD>蝏蠘恣<E8A098><E681A3><EFBFBD>
|
||||
st_schema # 蝏蠘恣<E8A098><E681A3><EFBFBD>撌亙<E6928C>
|
||||
@@ -56,18 +56,18 @@ CREATE SCHEMA IF NOT EXISTS aia_schema;
|
||||
-- ...<2E>嗡<EFBFBD>Schema
|
||||
```
|
||||
|
||||
### 跨Schema依赖规则 ⭐ 必须遵守
|
||||
### 頝沒chema靘肽<EFBFBD>閫<EFBFBD><EFBFBD> 潃?敹<>◆<EFBFBD>萄<EFBFBD>
|
||||
|
||||
**<EFBFBD><EFBFBD>捂<EFBFBD><EFBFBD><EFBFBD>韏吔<EFBFBD>**
|
||||
```sql
|
||||
-- ✅ 允许:业务模块引用platform_schema
|
||||
-- <EFBFBD>?<3F><>捂嚗帋<E59A97><E5B88B>⊥芋<E28AA5>堒<EFBFBD><E5A092>私latform_schema
|
||||
CREATE TABLE asl_schema.literature_projects (
|
||||
id SERIAL PRIMARY KEY,
|
||||
user_id INTEGER REFERENCES platform_schema.users(id) ON DELETE CASCADE,
|
||||
...
|
||||
);
|
||||
|
||||
-- ✅ 允许:通用能力引用platform_schema
|
||||
-- <EFBFBD>?<3F><>捂嚗𡁻<E59A97>𡁶鍂<F0A181B6>賢<EFBFBD>撘閧鍂platform_schema
|
||||
CREATE TABLE platform_schema.llm_usage (
|
||||
id SERIAL PRIMARY KEY,
|
||||
user_id INTEGER REFERENCES platform_schema.users(id) ON DELETE CASCADE,
|
||||
@@ -77,14 +77,14 @@ CREATE TABLE platform_schema.llm_usage (
|
||||
|
||||
**蝳<>迫<EFBFBD><E8BFAB><EFBFBD>韏吔<E99F8F>**
|
||||
```sql
|
||||
-- ❌ 禁止:业务模块之间互相引用
|
||||
-- <EFBFBD>?蝳<>迫嚗帋<E59A97><E5B88B>⊥芋<E28AA5>𦯀<EFBFBD><F0A6AF80>港<EFBFBD><E6B8AF>詨<EFBFBD><E8A9A8>?
|
||||
CREATE TABLE ssa_schema.analysis_projects (
|
||||
id SERIAL PRIMARY KEY,
|
||||
-- 错误!不能引用其他业务模块
|
||||
-- <EFBFBD>躰秤嚗<EFBFBD><EFBFBD><EFBFBD>賢<EFBFBD><EFBFBD>典<EFBFBD>隞碶<EFBFBD><EFBFBD>⊥芋<EFBFBD>?
|
||||
literature_project_id INTEGER REFERENCES asl_schema.literature_projects(id)
|
||||
);
|
||||
|
||||
-- ❌ 禁止:platform_schema反向依赖业务模块
|
||||
-- <EFBFBD>?蝳<>迫嚗䮝latform_schema<EFBFBD>滚<EFBFBD>靘肽<EFBFBD>銝𡁜𦛚璅∪<EFBFBD>
|
||||
CREATE TABLE platform_schema.users (
|
||||
id SERIAL PRIMARY KEY,
|
||||
-- <20>躰秤嚗<E7A7A4>latform_schema銝滩<E98A9D>靘肽<E99D98>銝𡁜𦛚璅∪<E79285>
|
||||
@@ -92,104 +92,104 @@ CREATE TABLE platform_schema.users (
|
||||
);
|
||||
```
|
||||
|
||||
**正确做法:**
|
||||
**甇<EFBFBD>&<EFBFBD>𡁏<EFBFBD>嚗?*
|
||||
```
|
||||
跨模块数据关联在应用层处理,不在数据库层!
|
||||
頝冽芋<EFBFBD>埈㺭<EFBFBD>桀<EFBFBD><EFBFBD>𥪜銁摨𠉛鍂撅<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>銝滚銁<EFBFBD>唳旿摨枏<EFBFBD>嚗?
|
||||
|
||||
<EFBFBD>孵<EFBFBD>1嚗𡁻<EFBFBD>朞<EFBFBD>user_id<EFBFBD>唾<EFBFBD>
|
||||
- 銝支葵璅∪<E79285><E288AA>賢<EFBFBD><E8B3A2>私latform_schema.users
|
||||
- 在应用层通过user_id查询两个模块的数据
|
||||
- <EFBFBD>典<EFBFBD><EFBFBD>典<EFBFBD><EFBFBD>朞<EFBFBD>user_id<EFBFBD>亥砭銝支葵璅∪<EFBFBD><EFBFBD><EFBFBD>㺭<EFBFBD>?
|
||||
- <20>典<EFBFBD><E585B8>典<EFBFBD>蝏<EFBFBD><E89D8F><EFBFBD>唳旿
|
||||
|
||||
方式2:存储业务ID字符串
|
||||
- 在表中存储其他模块的业务ID(VARCHAR)
|
||||
- 不建立外键关系
|
||||
- 在应用层验证ID的有效性
|
||||
<EFBFBD>孵<EFBFBD>2嚗𡁜<EFBFBD><EFBFBD>其<EFBFBD><EFBFBD>!D摮㛖泵銝?
|
||||
- <EFBFBD>刻”銝剖<EFBFBD><EFBFBD>典<EFBFBD>隞𡝗芋<EFBFBD>㛖<EFBFBD>銝𡁜𦛚ID嚗ĀARCHAR嚗?
|
||||
- 銝滚遣蝡见<EFBFBD><EFBFBD>桀<EFBFBD>蝟?
|
||||
- <EFBFBD>典<EFBFBD><EFBFBD>典<EFBFBD>撉諹<EFBFBD>ID<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## <20><> <20>賢<EFBFBD>閫<EFBFBD><E996AB>
|
||||
|
||||
### 表命名
|
||||
### 銵典𦶢<EFBFBD>?
|
||||
|
||||
**规则:**
|
||||
**閫<EFBFBD><EFBFBD>嚗?*
|
||||
- 撠誩<E692A0>摮埈<E691AE>
|
||||
- 下划线分隔
|
||||
- 銝见<EFBFBD>蝥踹<EFBFBD><EFBFBD>?
|
||||
- 憭齿㺭敶W<E695B6>
|
||||
- Schema前缀(查询时使用)
|
||||
- Schema<EFBFBD>滨<EFBFBD>嚗<EFBFBD>䰻霂X𧒄雿輻鍂嚗?
|
||||
|
||||
**示例:**
|
||||
**蝷箔<EFBFBD>嚗?*
|
||||
```sql
|
||||
-- ✅ 正确
|
||||
-- <EFBFBD>?甇<>&
|
||||
CREATE TABLE asl_schema.literature_projects (...);
|
||||
CREATE TABLE platform_schema.users (...);
|
||||
CREATE TABLE pkb_schema.knowledge_bases (...);
|
||||
|
||||
-- ❌ 错误
|
||||
-- <EFBFBD>?<3F>躰秤
|
||||
CREATE TABLE ASLSchema.LiteratureProject (...); -- 撽澆陸
|
||||
CREATE TABLE asl_schema.project (...); -- <20>閙㺭
|
||||
CREATE TABLE literature-projects (...); -- 使用连字符
|
||||
CREATE TABLE literature-projects (...); -- 雿輻鍂餈𧼮<EFBFBD>蝚?
|
||||
```
|
||||
|
||||
### 摮埈挾<E59F88>賢<EFBFBD>
|
||||
|
||||
**规则:**
|
||||
**閫<EFBFBD><EFBFBD>嚗?*
|
||||
- 撠誩<E692A0>摮埈<E691AE>
|
||||
- 下划线分隔
|
||||
- 銝见<EFBFBD>蝥踹<EFBFBD><EFBFBD>?
|
||||
- 霂凋<E99C82>皜<EFBFBD>苊
|
||||
|
||||
**示例:**
|
||||
**蝷箔<EFBFBD>嚗?*
|
||||
```sql
|
||||
-- ✅ 正确
|
||||
-- <EFBFBD>?甇<>&
|
||||
user_id
|
||||
created_at
|
||||
project_name
|
||||
is_active
|
||||
|
||||
-- ❌ 错误
|
||||
-- <EFBFBD>?<3F>躰秤
|
||||
userId -- 撽澆陸
|
||||
createdat -- 没有下划线
|
||||
prjName -- 缩写不清晰
|
||||
createdat -- 瘝⊥<EFBFBD>銝见<EFBFBD>蝥?
|
||||
prjName -- 蝻拙<EFBFBD>銝齿<EFBFBD><EFBFBD>?
|
||||
```
|
||||
|
||||
### 蝝W<E89D9D><EFBCB7>賢<EFBFBD>
|
||||
|
||||
**规则:** `idx_表名_字段名`
|
||||
**閫<EFBFBD><EFBFBD>嚗?* `idx_銵典<E98AB5>_摮埈挾<E59F88>崾
|
||||
|
||||
**示例:**
|
||||
**蝷箔<EFBFBD>嚗?*
|
||||
```sql
|
||||
-- ✅ 正确
|
||||
-- <20>?甇<>&
|
||||
CREATE INDEX idx_users_email ON platform_schema.users(email);
|
||||
CREATE INDEX idx_projects_user_id ON asl_schema.literature_projects(user_id);
|
||||
CREATE INDEX idx_projects_user_status ON asl_schema.literature_projects(user_id, status);
|
||||
|
||||
-- ❌ 错误
|
||||
-- <20>?<3F>躰秤
|
||||
CREATE INDEX user_email_idx ... -- 憿箏<E686BF><E7AE8F>躰秤
|
||||
CREATE INDEX index_on_email ... -- 名称不清晰
|
||||
CREATE INDEX index_on_email ... -- <EFBFBD>滨妍銝齿<EFBFBD><EFBFBD>?
|
||||
```
|
||||
|
||||
### 憭㚚睸<E39A9A>賢<EFBFBD>
|
||||
|
||||
**规则:** `fk_表名_关联表名`
|
||||
**閫<EFBFBD><EFBFBD>嚗?* `fk_銵典<EFBFBD>_<EFBFBD>唾<EFBFBD>銵典<EFBFBD>`
|
||||
|
||||
**示例:**
|
||||
**蝷箔<EFBFBD>嚗?*
|
||||
```sql
|
||||
-- ✅ 正确
|
||||
-- <20>?甇<>&
|
||||
CONSTRAINT fk_projects_users
|
||||
FOREIGN KEY (user_id) REFERENCES platform_schema.users(id);
|
||||
|
||||
CONSTRAINT fk_items_projects
|
||||
FOREIGN KEY (project_id) REFERENCES asl_schema.literature_projects(id);
|
||||
|
||||
-- ❌ 错误
|
||||
CONSTRAINT user_fk ... -- 名称不清晰
|
||||
-- <20>?<3F>躰秤
|
||||
CONSTRAINT user_fk ... -- <EFBFBD>滨妍銝齿<EFBFBD><EFBFBD>?
|
||||
CONSTRAINT foreign_key_users ... -- 憭芷鵭
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📊 通用字段 ⭐ 必须包含
|
||||
## <EFBFBD><EFBFBD> <20>𡁶鍂摮埈挾 潃?敹<>◆<EFBFBD><E29786>鉄
|
||||
|
||||
### <20><><EFBFBD>㕑”敹<E2809D>◆<EFBFBD><E29786>鉄
|
||||
|
||||
@@ -201,13 +201,13 @@ CREATE TABLE xxx_schema.table_name (
|
||||
-- 銝𡁜𦛚摮埈挾
|
||||
...
|
||||
|
||||
-- 时间戳(必须)
|
||||
-- <EFBFBD>園𡢿<EFBFBD>喉<EFBFBD>敹<EFBFBD>◆嚗?
|
||||
created_at TIMESTAMP DEFAULT NOW() NOT NULL,
|
||||
updated_at TIMESTAMP DEFAULT NOW() NOT NULL
|
||||
);
|
||||
```
|
||||
|
||||
### 重要表应包含(软删除)
|
||||
### <EFBFBD>滩<EFBFBD>銵典<EFBFBD><EFBFBD><EFBFBD>鉄嚗<EFBFBD>蔓<EFBFBD>𣳇膄嚗?
|
||||
|
||||
```sql
|
||||
CREATE TABLE xxx_schema.important_table (
|
||||
@@ -219,7 +219,7 @@ CREATE TABLE xxx_schema.important_table (
|
||||
-- 頧臬<E9A0A7><E887AC>文<EFBFBD>畾蛛<E795BE><E89B9B>舫<EFBFBD>㚁<EFBFBD><E39A81>滩<EFBFBD>銵典遣霈格溶<E6A0BC>𩤃<EFBFBD>
|
||||
deleted_at TIMESTAMP,
|
||||
|
||||
-- 时间戳(必须)
|
||||
-- <EFBFBD>園𡢿<EFBFBD>喉<EFBFBD>敹<EFBFBD>◆嚗?
|
||||
created_at TIMESTAMP DEFAULT NOW() NOT NULL,
|
||||
updated_at TIMESTAMP DEFAULT NOW() NOT NULL
|
||||
);
|
||||
@@ -228,7 +228,7 @@ CREATE TABLE xxx_schema.important_table (
|
||||
SELECT * FROM xxx_schema.important_table WHERE deleted_at IS NULL;
|
||||
```
|
||||
|
||||
### 用户关联表必须包含
|
||||
### <EFBFBD>冽<EFBFBD><EFBFBD>唾<EFBFBD>銵典<EFBFBD>憿餃<EFBFBD><EFBFBD>?
|
||||
|
||||
```sql
|
||||
CREATE TABLE xxx_schema.user_related_table (
|
||||
@@ -240,7 +240,7 @@ CREATE TABLE xxx_schema.user_related_table (
|
||||
-- 銝𡁜𦛚摮埈挾
|
||||
...
|
||||
|
||||
-- 时间戳(必须)
|
||||
-- <EFBFBD>園𡢿<EFBFBD>喉<EFBFBD>敹<EFBFBD>◆嚗?
|
||||
created_at TIMESTAMP DEFAULT NOW() NOT NULL,
|
||||
updated_at TIMESTAMP DEFAULT NOW() NOT NULL
|
||||
);
|
||||
@@ -250,7 +250,7 @@ CREATE TABLE xxx_schema.user_related_table (
|
||||
|
||||
## <20><> 蝝W<E89D9D>霈曇恣閫<E681A3><E996AB>
|
||||
|
||||
### 必须添加索引的字段
|
||||
### 敹<EFBFBD>◆瘛餃<EFBFBD>蝝W<EFBFBD><EFBFBD><EFBFBD><EFBFBD>畾?
|
||||
|
||||
**1. 銝駁睸**
|
||||
```sql
|
||||
@@ -266,7 +266,7 @@ CREATE INDEX idx_projects_user_id ON asl_schema.literature_projects(user_id);
|
||||
|
||||
**3. 撣貊鍂<E8B28A>亥砭摮埈挾**
|
||||
```sql
|
||||
-- status(状态字段,常用于WHERE)
|
||||
-- status嚗<EFBFBD>𠶖<EFBFBD><EFBFBD><EFBFBD>畾蛛<EFBFBD>撣貊鍂鈭竝HERE嚗?
|
||||
CREATE INDEX idx_projects_status ON asl_schema.literature_projects(status);
|
||||
|
||||
-- created_at嚗<74>𧒄<EFBFBD>游<EFBFBD>畾蛛<E795BE>撣貊鍂鈭擧<E988AD>摨𧶏<E691A8>
|
||||
@@ -281,22 +281,22 @@ CREATE UNIQUE INDEX idx_users_email ON platform_schema.users(email);
|
||||
|
||||
### 憭滚<E686AD>蝝W<E89D9D>
|
||||
|
||||
**规则:**
|
||||
**閫<EFBFBD><EFBFBD>嚗?*
|
||||
- 擃㗛<E69383>蝏<EFBFBD><E89D8F><EFBFBD>亥砭雿輻鍂憭滚<E686AD>蝝W<E89D9D>
|
||||
- <20><>撣豢䰻霂Y<E99C82>摮埈挾<E59F88>曉銁<E69B89>漤𢒰
|
||||
- 复合索引最多3个字段
|
||||
- 憭滚<E686AD>蝝W<E89D9D><EFBCB7><EFBFBD>憭?銝芸<E98A9D>畾?
|
||||
|
||||
**示例:**
|
||||
**蝷箔<EFBFBD>嚗?*
|
||||
```sql
|
||||
-- ✅ 正确:user_id + status 组合查询
|
||||
-- <20>?甇<>&嚗鮁ser_id + status 蝏<EFBFBD><EFBFBD><EFBFBD>亥砭
|
||||
CREATE INDEX idx_projects_user_status
|
||||
ON asl_schema.literature_projects(user_id, status);
|
||||
|
||||
-- 可以优化以下查询:
|
||||
-- <20>臭誑隡睃<E99AA1>隞乩<E99A9E><E4B9A9>亥砭嚗?
|
||||
-- WHERE user_id = ? AND status = ?
|
||||
-- WHERE user_id = ? (只用前缀)
|
||||
-- WHERE user_id = ? 嚗<EFBFBD>蘨<EFBFBD>典<EFBFBD>蝻<EFBFBD>嚗?
|
||||
|
||||
-- ❌ 错误:字段过多
|
||||
-- <20>?<3F>躰秤嚗𡁜<E59A97>畾菔<E795BE>憭?
|
||||
CREATE INDEX idx_projects_complex
|
||||
ON asl_schema.literature_projects(user_id, status, created_at, updated_at);
|
||||
```
|
||||
@@ -307,7 +307,7 @@ CREATE INDEX idx_projects_complex
|
||||
|
||||
### ON DELETE蝑𣇉裦
|
||||
|
||||
**规则:**
|
||||
**閫<EFBFBD><EFBFBD>嚗?*
|
||||
```sql
|
||||
-- <20>冽<EFBFBD><E586BD>𣳇膄<F0A3B387>塚<EFBFBD>蝥扯<E89DA5><E689AF>𣳇膄<F0A3B387>唾<EFBFBD><E594BE>唳旿
|
||||
FOREIGN KEY (user_id)
|
||||
@@ -319,15 +319,15 @@ FOREIGN KEY (project_id)
|
||||
REFERENCES asl_schema.literature_projects(id)
|
||||
ON DELETE CASCADE;
|
||||
|
||||
-- 特殊情况:不能删除
|
||||
-- <20>寞<EFBFBD><E5AF9E><EFBFBD><EFBFBD>嚗帋<E59A97><E5B88B>賢<EFBFBD><E8B3A2>?
|
||||
FOREIGN KEY (parent_id)
|
||||
REFERENCES xxx_schema.parent_table(id)
|
||||
ON DELETE RESTRICT; -- 有子记录时禁止删除
|
||||
ON DELETE RESTRICT; -- <20>匧<EFBFBD>霈啣<E99C88><E595A3>嗥<EFBFBD>甇W<E79487><EFBCB7>?
|
||||
```
|
||||
|
||||
### 憭㚚睸蝝W<E89D9D>
|
||||
|
||||
**规则:** 所有外键必须添加索引
|
||||
**閫<EFBFBD><EFBFBD>嚗?* <20><><EFBFBD>匧<EFBFBD><E58CA7>桀<EFBFBD>憿餅溶<E9A485>删揣撘?
|
||||
|
||||
```sql
|
||||
-- <20>𥕦遣憭㚚睸
|
||||
@@ -342,11 +342,11 @@ CREATE INDEX idx_items_project_id ON asl_schema.literature_items(project_id);
|
||||
|
||||
---
|
||||
|
||||
## ⚡ 性能优化规范
|
||||
## <EFBFBD>?<3F>扯<EFBFBD>隡睃<E99AA1>閫<EFBFBD><E996AB>
|
||||
|
||||
### 憭扯”<E689AF><E2809D>躹嚗<E8BAB9>虾<EFBFBD>㚁<EFBFBD>
|
||||
|
||||
**适用场景:** 年增长 > 100万记录
|
||||
**<EFBFBD><EFBFBD>鍂<EFBFBD>箸艶嚗?* 撟游<E6929F><E6B8B8>?> 100銝<30>扇敶?
|
||||
|
||||
```sql
|
||||
-- <20>㗇<EFBFBD><E39787><EFBFBD>躹嚗<E8BAB9><E59A97>llm_usage銵剁<E98AB5>
|
||||
@@ -388,13 +388,13 @@ WHERE created_at < NOW() - INTERVAL '1 year';
|
||||
|
||||
```sql
|
||||
-- 撖<><E69296>摮埈挾
|
||||
password VARCHAR(255) NOT NULL -- 使用bcrypt加密,存储哈希值
|
||||
password VARCHAR(255) NOT NULL -- 雿輻鍂bcrypt<70>惩<EFBFBD>嚗<EFBFBD><E59A97><EFBFBD>典<EFBFBD>撣<EFBFBD><E692A3>?
|
||||
|
||||
-- API Key摮埈挾
|
||||
api_key_encrypted TEXT NOT NULL -- 雿輻鍂AES-256<35>惩<EFBFBD>
|
||||
|
||||
-- 銝芯犖<E88AAF>𤩺<EFBFBD>靽⊥<E99DBD>
|
||||
phone_encrypted VARCHAR(255) -- 手机号加密
|
||||
phone_encrypted VARCHAR(255) -- <EFBFBD>𧢲㦤<EFBFBD>瑕<EFBFBD>撖?
|
||||
id_card_encrypted VARCHAR(255) -- 頨思遢霂<E981A2>噡<EFBFBD>惩<EFBFBD>
|
||||
```
|
||||
|
||||
@@ -402,7 +402,7 @@ id_card_encrypted VARCHAR(255) -- 身份证号加密
|
||||
|
||||
```sql
|
||||
-- <20>亙<EFBFBD>銝凋<E98A9D>霈啣<E99C88><E595A3>𤩺<EFBFBD>摮埈挾
|
||||
-- 开发/测试环境使用脱敏数据
|
||||
-- 撘<><E69298>?瘚贝<E7989A><E8B49D>臬<EFBFBD>雿輻鍂<E8BCBB>望<EFBFBD><E69C9B>唳旿
|
||||
UPDATE platform_schema.users
|
||||
SET
|
||||
email = CONCAT('user', id, '@example.com'),
|
||||
@@ -416,71 +416,71 @@ WHERE environment = 'development';
|
||||
|
||||
### 撣貊鍂摮埈挾蝐餃<E89D90>
|
||||
|
||||
| 用途 | 推荐类型 | 说明 |
|
||||
| <EFBFBD>券<EFBFBD>?| <20>刻<EFBFBD>蝐餃<E89D90> | 霂湔<E99C82> |
|
||||
|------|---------|------|
|
||||
| 銝駁睸 | SERIAL | <20>湔㺭<E6B994>芸<EFBFBD> |
|
||||
| 外键 | INTEGER | 与主键类型一致 |
|
||||
| 短文本 | VARCHAR(N) | N<500,如姓名、标题 |
|
||||
| 长文本 | TEXT | 无长度限制,如描述、内容 |
|
||||
| 布尔值 | BOOLEAN | true/false |
|
||||
| 日期时间 | TIMESTAMP | 精确到毫秒 |
|
||||
| 憭㚚睸 | INTEGER | 銝𦒘蜓<EFBFBD>桃掩<EFBFBD>衤<EFBFBD><EFBFBD>?|
|
||||
| <EFBFBD>剜<EFBFBD><EFBFBD>?| VARCHAR(N) | N<500嚗<EFBFBD><EFBFBD>憪枏<EFBFBD><EFBFBD><EFBFBD><EFBFBD>憸?|
|
||||
| <EFBFBD>踵<EFBFBD><EFBFBD>?| TEXT | <EFBFBD>𣳇鵭摨阡<EFBFBD><EFBFBD>塚<EFBFBD>憒<EFBFBD><EFBFBD>餈啜<EFBFBD><EFBFBD><EFBFBD>摰?|
|
||||
| 撣<EFBFBD><EFBFBD><EFBFBD>?| BOOLEAN | true/false |
|
||||
| <EFBFBD>交<EFBFBD><EFBFBD>園𡢿 | TIMESTAMP | 蝎曄&<EFBFBD>唳神蝘?|
|
||||
| <20>煾<EFBFBD> | DECIMAL(10,2) | <20>踹<EFBFBD>蝎曉漲<E69B89>桅<EFBFBD> |
|
||||
| JSON | JSONB | <20>舀<EFBFBD>蝝W<E89D9D>嚗峕<E59A97>扯<EFBFBD><E689AF>游末 |
|
||||
|
||||
### 摮埈挾<E59F88>踹漲撱箄悅
|
||||
|
||||
```sql
|
||||
-- 短文本
|
||||
-- <20>剜<EFBFBD><E5899C>?
|
||||
name VARCHAR(100) -- 憪枏<E686AA>
|
||||
title VARCHAR(200) -- <20><><EFBFBD>
|
||||
email VARCHAR(255) -- <20>桃拳
|
||||
phone VARCHAR(20) -- 手机号
|
||||
phone VARCHAR(20) -- <EFBFBD>𧢲㦤<EFBFBD>?
|
||||
|
||||
-- 状态枚举
|
||||
-- <20>嗆<EFBFBD><E59786><EFBFBD>銝?
|
||||
status VARCHAR(20) -- active, inactive, deleted
|
||||
role VARCHAR(20) -- user, admin
|
||||
|
||||
-- 长文本
|
||||
-- <20>踵<EFBFBD><E8B8B5>?
|
||||
description TEXT -- <20>讛膩
|
||||
content TEXT -- <20><>捆
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ✅ 检查清单
|
||||
## <EFBFBD>?璉<><E79289>交<EFBFBD><E4BAA4>?
|
||||
|
||||
**霈曇恣<E69B87>啗”<E59597>嗅<EFBFBD>憿餅<E686BF><E9A485>伐<EFBFBD>**
|
||||
- [ ] 表名符合命名规范(小写+下划线+复数)
|
||||
- [ ] 銵典<EFBFBD>蝚血<EFBFBD><EFBFBD>賢<EFBFBD>閫<EFBFBD><EFBFBD>嚗<EFBFBD><EFBFBD><EFBFBD>?銝见<E98A9D>蝥?憭齿㺭嚗?
|
||||
- [ ] 雿輻鍂甇<E98D82>&<EFBFBD><EFBC86>chema嚗īlatform/aia/asl/pkb蝑㚁<E89D91>
|
||||
- [ ] 包含id主键(SERIAL PRIMARY KEY)
|
||||
- [ ] 包含created_at和updated_at时间戳
|
||||
- [ ] <EFBFBD><EFBFBD>鉄id銝駁睸嚗𠄎ERIAL PRIMARY KEY嚗?
|
||||
- [ ] <EFBFBD><EFBFBD>鉄created_at<EFBFBD>吴pdated_at<EFBFBD>園𡢿<EFBFBD>?
|
||||
- [ ] <20>冽<EFBFBD><E586BD>唾<EFBFBD>銵典<E98AB5><E585B8>哎ser_id憭㚚睸
|
||||
- [ ] <20><><EFBFBD>匧<EFBFBD><E58CA7>桅<EFBFBD><E6A185>伨N DELETE蝑𣇉裦
|
||||
- [ ] 所有外键都添加了索引
|
||||
- [ ] 常用查询字段添加了索引
|
||||
- [ ] <EFBFBD><EFBFBD><EFBFBD>匧<EFBFBD><EFBFBD>桅<EFBFBD>瘛餃<EFBFBD>鈭<EFBFBD>揣撘?
|
||||
- [ ] 撣貊鍂<EFBFBD>亥砭摮埈挾瘛餃<EFBFBD>鈭<EFBFBD>揣撘?
|
||||
- [ ] 憭㚚睸蝥行<E89DA5>蝚血<E89D9A>頝沒chema靘肽<E99D98>閫<EFBFBD><E996AB>
|
||||
- [ ] 敏感字段已加密存储
|
||||
- [ ] <EFBFBD>𤩺<EFBFBD>摮埈挾撌脣<EFBFBD>撖<EFBFBD><EFBFBD><EFBFBD>?
|
||||
|
||||
---
|
||||
|
||||
## <20><> <20>詨<EFBFBD><E8A9A8><EFBFBD>﹝
|
||||
|
||||
**总览:**
|
||||
- [数据库全局视图](./03-数据库全局视图.md) ⭐ 查看所有Schema和表
|
||||
**<EFBFBD>餉<EFBFBD>嚗?*
|
||||
- [<EFBFBD>唳旿摨枏<EFBFBD>撅<EFBFBD>閫<EFBFBD>㦛](./03-<2D>唳旿摨枏<E691A8>撅<EFBFBD>閫<EFBFBD>㦛.md) 潃?<3F>亦<EFBFBD><E4BAA6><EFBFBD><EFBFBD>农chema<EFBFBD>諹”
|
||||
|
||||
**模板:**
|
||||
- [数据库设计模板](../_templates/数据库设计-模板.md)
|
||||
**璅⊥踎嚗?*
|
||||
- [<EFBFBD>唳旿摨栞挽霈⊥芋<EFBFBD>瓢(../_templates/<EFBFBD>唳旿摨栞挽霈?璅⊥踎.md)
|
||||
|
||||
**<EFBFBD><EFBFBD>芋<EFBFBD>𡑒挽霈∴<EFBFBD>**
|
||||
- [平台基础层](../01-平台基础层/README.md)
|
||||
- [通用能力层](../02-通用能力层/README.md)
|
||||
- [撟喳蝱<EFBFBD>箇<EFBFBD>撅<EFBFBD>(../01-撟喳蝱<E596B3>箇<EFBFBD>撅?README.md)
|
||||
- [<EFBFBD>𡁶鍂<EFBFBD>賢<EFBFBD>撅<EFBFBD>(../02-<2D>𡁶鍂<F0A181B6>賢<EFBFBD>撅?README.md)
|
||||
- [銝𡁜𦛚璅∪<E79285>撅<EFBFBD>(../03-銝𡁜𦛚璅∪<E79285>/README.md)
|
||||
|
||||
---
|
||||
|
||||
**<EFBFBD><EFBFBD><EFBFBD>擧凒<EFBFBD>堆<EFBFBD>** 2025-11-06
|
||||
**蝏湔擪鈭綽<E988AD>** <20><><EFBFBD>舀沲<E88880><E6B2B2><EFBFBD>
|
||||
**版本:** v2.0
|
||||
**<EFBFBD><EFBFBD>𧋦嚗?* v2.0
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user