Files
AIclinicalresearch/docs/04-开发规范/01-数据库设计规范.md
HaHafeng 1b53ab9d52 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%)
2026-01-14 19:15:01 +08:00

510 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# <20>唳旿摨栞挽霈∟<E99C88><E2889F>?
> **<2A><>𧋦嚗?* v2.0
> **<2A><><EFBFBD>擧凒<E693A7><EFBFBD>** 2025-11-06
> **<2A>唳旿摨橒<E691A8>** PostgreSQL 15+
> **ORM嚗?* Prisma
> **<2A><><EFBFBD><E98D82>凒嚗?* 撟喳蝱撅?+ <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>?
**霈曇恣<E69B87><EFBFBD>嚗?*
- <20>?<3F>萄儐蝚砌<E89D9A><E7A08C><EFBFBD><EFBFBD>嚗?NF嚗?
- <20>?雿輻鍂SERIAL雿靝蛹銝駁睸嚗<E79DB8><EFBFBD>啗䌊憓痹<E68693><E797B9><EFBFBD><E689AF>游末嚗?
- <20>?<3F><><EFBFBD>㕑”<E39591><E2809D>鉄created_at<61>吴pdated_at<61>園𡢿<E59C92>?
- <20>?<3F><EFBFBD>銵其蝙<E585B6>刻蔓<E588BB>𣳇膄嚗<E88684><E59A97><EFBFBD>羮eleted_at摮埈挾嚗?
- <20>?憭㚚睸蝥行<E89DA5>雿輻鍂ON DELETE CASCADE
- <20>?<3F>𤩺<EFBFBD>摮埈挾<E59F88><EFBFBD>摮睃<E691AE><EFBFBD><E59A97><EFBFBD><EFBFBD><EFBFBD>灸crypt嚗?
---
## <20><>儭?Schema<6D>𠉛氖蝑𣇉裦 潃?<3F><><EFBFBD><EFBFBD>
### 銝箔<E98A9D><EFBFBD><E98A8B><EFBFBD>chema<6D>𠉛氖
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗?*
1. <20>?**璅<E79285><E288AA><EFBFBD><E7A589>?*嚗𡁏<E59A97>銝芯<E98A9D><E88AAF>⊥芋<E28AA5><EFBFBD><E59F88><EFBFBD><E7A589><EFBFBD>chema
2. <20>?**<2A><EFBFBD><E88880><EFBFBD><E7A589>函蔡**嚗𡁜虾隞亙<E99A9E><E4BA99>砍紡<E7A08D><EFBFBD>銝芣芋<E88AA3><EFBFBD><E39B96>唳旿
3. <20>?**<2A><EFBFBD><E88880><EFBFBD><E7A589><EFBFBD><EFBFBD>?*嚗𡁜虾隞亙<E99A9E><E4BA99>砌漱隞䀹<E99A9E>銝芣芋<E88AA3>?
4. <20>?**<2A><><EFBFBD><EFBFBD>𠉛氖**嚗𡁜虾隞乩蛹銝滚<E98A9D>Schema霈曄蔭銝滚<E98A9D><E6BB9A><EFBFBD><EFBFBD>
5. <20>?**<2A><EFBFBD><E8B8B9><EFBFBD><E8B3A2><EFBFBD>**嚗帋<E59A97><E5B88B>峕芋<E5B395>堒虾隞交<E99A9E><E4BAA4><EFBFBD><E8A9A8><EFBFBD><EFBFBD>?
### Schema<6D><EFBFBD><EFBFBD><E996AB>
```
platform_schema # 撟喳蝱<E596B3><EFBFBD><EFBFBD><E69285><EFBFBD><EFBFBD><E585B8>曹澈嚗?
aia_schema # AI<41><EFBFBD><E7AE84><EFBFBD>
asl_schema # AI<41><EFBFBD><E7AE84><EFBFBD>
pkb_schema # 銝芯犖<E88AAF><EFBFBD>摨?
dc_schema # <20>唳旿皜<E697BF><E79A9C><EFBFBD><EFBFBD>
ssa_schema # <20><EFBFBD>蝏蠘恣<E8A098><E681A3><EFBFBD>
st_schema # 蝏蠘恣<E8A098><E681A3><EFBFBD>撌亙<E6928C>
rvw_schema # 蝔蹂辣摰⊥䰻蝟餌<E89D9F>
```
### Schema<6D>𥕦遣
```sql
-- <20>𥕦遣Schema
CREATE SCHEMA IF NOT EXISTS platform_schema;
CREATE SCHEMA IF NOT EXISTS asl_schema;
CREATE SCHEMA IF NOT EXISTS aia_schema;
-- ...<2E><EFBFBD>Schema
```
### 頝沒chema靘肽<E99D98><EFBFBD><E996AB> 潃?敹<><EFBFBD><EFBFBD>
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>韏吔<EFBFBD>**
```sql
-- <20>?<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,
...
);
-- <20>?<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,
...
);
```
**蝳<><EFBFBD><E8BFAB><EFBFBD>韏吔<E99F8F>**
```sql
-- <20>?蝳<>迫嚗帋<E59A97><E5B88B>⊥芋<E28AA5>𦯀<EFBFBD><F0A6AF80><EFBFBD><E6B8AF><EFBFBD><E8A9A8>?
CREATE TABLE ssa_schema.analysis_projects (
id SERIAL PRIMARY KEY,
-- <20>躰秤嚗<E7A7A4><E59A97><EFBFBD><EFBFBD><E8B3A2><EFBFBD>隞碶<E99A9E><E7A2B6>⊥芋<E28AA5>?
literature_project_id INTEGER REFERENCES asl_schema.literature_projects(id)
);
-- <20>?蝳<>迫嚗䮝latform_schema<6D><EFBFBD>靘肽<E99D98>銝𡁜𦛚璅<E79285>
CREATE TABLE platform_schema.users (
id SERIAL PRIMARY KEY,
-- <20>躰秤嚗<E7A7A4>latform_schema銝滩<E98A9D>靘肽<E99D98>銝𡁜𦛚璅<E79285>
current_project_id INTEGER REFERENCES asl_schema.literature_projects(id)
);
```
**甇<><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
- <20><EFBFBD><E585B8><EFBFBD><E585B8><EFBFBD>user_id<69>亥砭銝支葵璅<E79285><E288AA><EFBFBD><EFBFBD>?
- <20><EFBFBD><E585B8><EFBFBD><EFBFBD><E89D8F><EFBFBD>唳旿
<EFBFBD><EFBFBD>2嚗𡁜<EFBFBD><EFBFBD><EFBFBD><EFBFBD>D摮㛖泵銝?
- <20>刻”銝剖<E98A9D><E58996><EFBFBD>隞𡝗芋<F0A19D97><EFBFBD>銝𡁜𦛚ID嚗ĀARCHAR嚗?
- 銝滚遣蝡见<E89DA1><E8A781><EFBFBD>蝟?
- <20><EFBFBD><E585B8><EFBFBD>撉諹<E69289>ID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
```
---
## <20><> <20><EFBFBD><EFBFBD><E996AB>
### 銵典𦶢<E585B8>?
**閫<><E996AB>嚗?*
- 撠誩<E692A0>摮埈<E691AE>
- 銝见<E98A9D>蝥踹<E89DA5><E8B8B9>?
- 憭齿㺭敶<E695B6>
- Schema<6D><EFBFBD><EFBFBD>䰻霂𧒄雿輻鍂嚗?
**蝷箔<E89DB7>嚗?*
```sql
-- <20>?甇<>
CREATE TABLE asl_schema.literature_projects (...);
CREATE TABLE platform_schema.users (...);
CREATE TABLE pkb_schema.knowledge_bases (...);
-- <20>?<3F>躰秤
CREATE TABLE ASLSchema.LiteratureProject (...); -- 撽澆陸
CREATE TABLE asl_schema.project (...); -- <20>閙㺭
CREATE TABLE literature-projects (...); -- 雿輻鍂餈𧼮<E9A488>蝚?
```
### 摮埈挾<E59F88><EFBFBD>
**閫<><E996AB>嚗?*
- 撠誩<E692A0>摮埈<E691AE>
- 銝见<E98A9D>蝥踹<E89DA5><E8B8B9>?
- 霂凋<E99C82><EFBFBD>
**蝷箔<E89DB7>嚗?*
```sql
-- <20>?甇<>
user_id
created_at
project_name
is_active
-- <20>?<3F>躰秤
userId -- 撽澆陸
createdat -- 瘝⊥<E7989D>銝见<E98A9D>蝥?
prjName -- 蝻拙<E89DBB>銝齿<E98A9D><E9BDBF>?
```
### 蝝<E89D9D><EFBCB7><EFBFBD>
**閫<><E996AB>嚗?* `idx_銵典<E98AB5>_摮埈挾<E59F88>
**蝷箔<E89DB7>嚗?*
```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 ... -- <20>滨妍銝齿<E98A9D><E9BDBF>?
```
### 憭㚚睸<E39A9A><EFBFBD>
**閫<><E996AB>嚗?* `fk_銵典<EFBFBD>_<EFBFBD><EFBFBD>銵典<EFBFBD>`
**蝷箔<E89DB7>嚗?*
```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);
-- <20>?<3F>躰秤
CONSTRAINT user_fk ... -- <20>滨妍銝齿<E98A9D><E9BDBF>?
CONSTRAINT foreign_key_users ... -- 憭芷鵭
```
---
## <20><> <20>𡁶鍂摮埈挾 潃?敹<><EFBFBD><E29786>
### <20><><EFBFBD>㕑”敹<E2809D><EFBFBD><E29786>
```sql
CREATE TABLE xxx_schema.table_name (
-- 銝駁睸嚗<E79DB8><E59A97>憿鳴<E686BF>
id SERIAL PRIMARY KEY,
-- 銝𡁜𦛚摮埈挾
...
-- <20>園𡢿<E59C92><EFBFBD><EFBFBD>◆嚗?
created_at TIMESTAMP DEFAULT NOW() NOT NULL,
updated_at TIMESTAMP DEFAULT NOW() NOT NULL
);
```
### <20><EFBFBD>銵典<E98AB5><E585B8><EFBFBD>鉄嚗<E98984><EFBFBD>𣳇膄嚗?
```sql
CREATE TABLE xxx_schema.important_table (
id SERIAL PRIMARY KEY,
-- 銝𡁜𦛚摮埈挾
...
-- 頧臬<E9A0A7><E887AC><EFBFBD>畾蛛<E795BE><E89B9B><EFBFBD><EFBFBD><E39A81><EFBFBD>銵典遣霈格溶<E6A0BC>𩤃<EFBFBD>
deleted_at TIMESTAMP,
-- <20>園𡢿<E59C92><EFBFBD><EFBFBD>◆嚗?
created_at TIMESTAMP DEFAULT NOW() NOT NULL,
updated_at TIMESTAMP DEFAULT NOW() NOT NULL
);
-- <20>亥砭<E4BAA5><EFBFBD>皛文歇<E69687>𣳇膄<F0A3B387>唳旿
SELECT * FROM xxx_schema.important_table WHERE deleted_at IS NULL;
```
### <20><EFBFBD><E586BD><EFBFBD>銵典<E98AB5>憿餃<E686BF><E9A483>?
```sql
CREATE TABLE xxx_schema.user_related_table (
id SERIAL PRIMARY KEY,
-- <20><EFBFBD>憭㚚睸嚗<E79DB8><E59A97>憿鳴<E686BF>
user_id INTEGER REFERENCES platform_schema.users(id) ON DELETE CASCADE NOT NULL,
-- 銝𡁜𦛚摮埈挾
...
-- <20>園𡢿<E59C92><EFBFBD><EFBFBD>◆嚗?
created_at TIMESTAMP DEFAULT NOW() NOT NULL,
updated_at TIMESTAMP DEFAULT NOW() NOT NULL
);
```
---
## <20><><E89D9D>霈曇恣閫<E681A3><E996AB>
### 敹<>◆瘛餃<E7989B><E89D9D><EFBCB7><EFBFBD><EFBFBD>畾?
**1. 銝駁睸**
```sql
-- <20>芸𢆡<E88AB8>𥕦遣嚗峕<E59A97><E5B395><EFBFBD><EFBFBD>见𢆡瘛餃<E7989B>
id SERIAL PRIMARY KEY
```
**2. 憭㚚睸摮埈挾**
```sql
-- 敹<>◆瘛餃<E7989B>嚗峕<E59A97>擃𧁓OIN<49><EFBFBD>
CREATE INDEX idx_projects_user_id ON asl_schema.literature_projects(user_id);
```
**3. 撣貊鍂<E8B28A>亥砭摮埈挾**
```sql
-- status嚗<73>𠶖<EFBFBD><F0A0B696><EFBFBD>畾蛛<E795BE>撣貊鍂鈭竝HERE嚗?
CREATE INDEX idx_projects_status ON asl_schema.literature_projects(status);
-- created_at嚗<74>𧒄<EFBFBD><EFBFBD>畾蛛<E795BE>撣貊鍂鈭擧<E988AD>摨𧶏<E691A8>
CREATE INDEX idx_projects_created_at ON asl_schema.literature_projects(created_at DESC);
```
**4. <20><EFBFBD>蝥行<E89DA5>摮埈挾**
```sql
-- email蝑匧𣈲銝<F0A388B2>摮埈挾
CREATE UNIQUE INDEX idx_users_email ON platform_schema.users(email);
```
### 憭滚<E686AD><E89D9D>
**閫<><E996AB>嚗?*
- 擃㗛<E69383><EFBFBD><E89D8F><EFBFBD>亥砭雿輻鍂憭滚<E686AD><E89D9D>
- <20><>撣豢䰻霂<E99C82>摮埈挾<E59F88>曉銁<E69B89>漤𢒰
- 憭滚<E686AD><E89D9D><EFBCB7><EFBFBD>憭?銝芸<E98A9D>畾?
**蝷箔<E89DB7>嚗?*
```sql
-- <20>?甇<>嚗鮁ser_id + status 蝏<><E89D8F><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 = ? 嚗<><EFBFBD><EFBFBD><EFBFBD>嚗?
-- <20>?<3F>躰秤嚗𡁜<E59A97>畾菔<E795BE>憭?
CREATE INDEX idx_projects_complex
ON asl_schema.literature_projects(user_id, status, created_at, updated_at);
```
---
## <20><> 憭㚚睸蝥行<E89DA5><EFBFBD><E996AB>
### ON DELETE蝑𣇉裦
**閫<><E996AB>嚗?*
```sql
-- <20><EFBFBD><E586BD>𣳇膄<F0A3B387><EFBFBD>蝥扯<E89DA5><E689AF>𣳇膄<F0A3B387><EFBFBD><E594BE>唳旿
FOREIGN KEY (user_id)
REFERENCES platform_schema.users(id)
ON DELETE CASCADE;
-- <20>嗉扇敶訫<E695B6><E8A8AB>斗𧒄嚗𣬚漣<F0A3AC9A>𥪜<EFBFBD><F0A5AA9C><EFBFBD>霈啣<E99C88>
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; -- <20><EFBFBD>霈啣<E99C88><E595A3><EFBFBD><E79487><EFBCB7>?
```
### 憭㚚睸蝝<E89D9D>
**閫<><E996AB>嚗?* <20><><EFBFBD><EFBFBD><E58CA7><EFBFBD>憿餅溶<E9A485>删揣撘?
```sql
-- <20>𥕦遣憭㚚睸
ALTER TABLE asl_schema.literature_items
ADD CONSTRAINT fk_items_projects
FOREIGN KEY (project_id) REFERENCES asl_schema.literature_projects(id)
ON DELETE CASCADE;
-- 敹<>◆瘛餃<E7989B><E89D9D>
CREATE INDEX idx_items_project_id ON asl_schema.literature_items(project_id);
```
---
## <20>?<3F><EFBFBD>隡睃<E99AA1><EFBFBD><E996AB>
### 憭扯”<E689AF><E2809D>躹嚗<E8BAB9><EFBFBD><EFBFBD>
**<2A><><EFBFBD>箸艶嚗?* 撟游<E6929F><E6B8B8>?> 100銝<30>扇敶?
```sql
-- <20><EFBFBD><E39787><EFBFBD>躹嚗<E8BAB9><E59A97>llm_usage銵剁<E98AB5>
CREATE TABLE platform_schema.llm_usage (
id SERIAL,
user_id INTEGER NOT NULL,
created_at TIMESTAMP NOT NULL,
...
) PARTITION BY RANGE (created_at);
-- <20>𥕦遣<F0A595A6><E981A3>
CREATE TABLE platform_schema.llm_usage_2025_11
PARTITION OF platform_schema.llm_usage
FOR VALUES FROM ('2025-11-01') TO ('2025-12-01');
```
### <20>唳旿敶埝﹝蝑𣇉裦
```sql
-- <20><><EFBFBD>唳旿敶埝﹝嚗<EFB99D><E59A97>1撟游<E6929F><E6B8B8><EFBFBD>𠯫敹梹<E695B9>
CREATE TABLE platform_schema.admin_logs_archive (
LIKE platform_schema.admin_logs INCLUDING ALL
);
-- 摰𡁏<E691B0>敶埝﹝
INSERT INTO platform_schema.admin_logs_archive
SELECT * FROM platform_schema.admin_logs
WHERE created_at < NOW() - INTERVAL '1 year';
DELETE FROM platform_schema.admin_logs
WHERE created_at < NOW() - INTERVAL '1 year';
```
---
## <20><> 摰匧<E691B0><EFBFBD><E996AB>
### <20>𤩺<EFBFBD>摮埈挾<E59F88><EFBFBD>
```sql
-- 撖<><E69296>摮埈挾
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) -- <20>𧢲㦤<F0A7A2B2><EFBFBD>撖?
id_card_encrypted VARCHAR(255) -- 頨思遢霂<E981A2><EFBFBD><EFBFBD>
```
### <20>唳旿<E594B3><EFBFBD>
```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'),
phone = '138****0000'
WHERE environment = 'development';
```
---
## <20><> <20>唳旿蝐餃<E89D90><E9A483>㗇𥋘
### 撣貊鍂摮埈挾蝐餃<E89D90>
| <20><EFBFBD>?| <20><EFBFBD>蝐餃<E89D90> | 霂湔<E99C82> |
|------|---------|------|
| 銝駁睸 | SERIAL | <20>湔㺭<E6B994><EFBFBD> |
| 憭㚚睸 | INTEGER | 銝𦒘蜓<F0A69298>桃掩<E6A183><EFBFBD><E8A1A4>?|
| <20><EFBFBD><E5899C>?| VARCHAR(N) | N<500嚗<30><E59A97>憪枏<E686AA><E69E8F><EFBFBD><EFBFBD>憸?|
| <20><EFBFBD><E8B8B5>?| TEXT | <20>𣳇鵭摨阡<E691A8><E998A1><EFBFBD><EFBFBD><E68692>餈啜<E9A488><E5959C><EFBFBD>摰?|
| 撣<><E692A3><EFBFBD>?| BOOLEAN | true/false |
| <20><EFBFBD><E4BAA4>園𡢿 | TIMESTAMP | 蝎曄<E69B84>唳神蝘?|
| <20><EFBFBD> | DECIMAL(10,2) | <20><EFBFBD>蝎曉漲<E69B89><EFBFBD> |
| JSON | JSONB | <20><EFBFBD><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) -- <20>𧢲㦤<F0A7A2B2>?
-- <20><EFBFBD><E59786><EFBFBD>銝?
status VARCHAR(20) -- active, inactive, deleted
role VARCHAR(20) -- user, admin
-- <20><EFBFBD><E8B8B5>?
description TEXT -- <20>讛膩
content TEXT -- <20><>
```
---
## <20>?璉<><E79289><EFBFBD><E4BAA4>?
**霈曇恣<E69B87>啗”<E59597><EFBFBD>憿餅<E686BF><E9A485><EFBFBD>**
- [ ] 銵典<E98AB5>蝚血<E89D9A><E8A180><EFBFBD><EFBFBD><E996AB><EFBFBD><E59A97><EFBFBD>?銝见<E98A9D>蝥?憭齿㺭嚗?
- [ ] 雿輻鍂甇<E98D82><EFBFBD><EFBC86>chema嚗īlatform/aia/asl/pkb蝑㚁<E89D91>
- [ ] <20><>鉄id銝駁睸嚗𠄎ERIAL PRIMARY KEY嚗?
- [ ] <20><>鉄created_at<61>吴pdated_at<61>園𡢿<E59C92>?
- [ ] <20><EFBFBD><E586BD><EFBFBD>銵典<E98AB5><E585B8>哎ser_id憭㚚睸
- [ ] <20><><EFBFBD><EFBFBD><E58CA7><EFBFBD><E6A185>伨N DELETE蝑𣇉裦
- [ ] <20><><EFBFBD><EFBFBD><E58CA7><EFBFBD>瘛餃<E7989B><EFBFBD>揣撘?
- [ ] 撣貊鍂<E8B28A>亥砭摮埈挾瘛餃<E7989B><EFBFBD>揣撘?
- [ ] 憭㚚睸蝥行<E89DA5>蝚血<E89D9A>頝沒chema靘肽<E99D98><EFBFBD><E996AB>
- [ ] <20>𤩺<EFBFBD>摮埈挾撌脣<E6928C><EFBFBD><E69296><EFBFBD>?
---
## <20><> <20><EFBFBD><E8A9A8><EFBFBD>
**<EFBFBD><EFBFBD>嚗?*
- [<EFBFBD>唳旿摨枏<EFBFBD><EFBFBD><EFBFBD>](./03-<2D>唳旿摨枏<E691A8><EFBFBD><EFBFBD>㦛.md) 潃?<3F><EFBFBD><E4BAA6><EFBFBD><EFBFBD>农chema<6D>諹”
**璅⊥踎嚗?*
- [<5B>唳旿摨栞挽霈⊥芋<E28AA5>瓢(../_templates/<2F>唳旿摨栞挽霈?璅⊥踎.md)
**<EFBFBD><EFBFBD><EFBFBD>𡑒挽霈∴<EFBFBD>**
- [撟喳蝱<E596B3><EFBFBD><EFBFBD>(../01-撟喳蝱<E596B3><EFBFBD>撅?README.md)
- [<5B>𡁶鍂<F0A181B6><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>
**<EFBFBD><EFBFBD>𧋦嚗?* v2.0