Files
AIclinicalresearch/docs/03-业务模块/ASL-AI智能文献/05-开发记录/2025-11-23_数据库迁移状态说明.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

436 lines
13 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>唳旿摨栞<E691A8>蝘餌𠶖<E9A48C><F0A0B696><EFBFBD>?
> **<2A><><EFBFBD><EFB99D>𧋦嚗?* v1.0
> **<2A>𥕦遣<F0A595A6><EFBFBD>嚗?* 2025-11-23
> **蝏湔擪<E6B994><E693AA><EFBFBD>** ASL撘<4C><E69298>穃𣪧<E7A983>?
> **<2A><><EFBFBD><EFBFBD>嚗?* 霈啣<E99C88>ASL璅<E79285><E288AA>唳旿摨栞<E691A8>蝘餌𠶖<E9A48C><F0A0B696><EFBFBD>銝箸𧊋<E7AEB8><EFBFBD><E4BA99>睲犖<E79DB2><EFBFBD>靘𥟇<E99D98><F0A59F87><EFBFBD>銝𠹺<E98A9D><F0A0B9BA>?
---
## <20><> 敶枏<E695B6><E69E8F>唳旿摨梶𠶖<E6A2B6><F0A0B696><EFBFBD><EFBFBD>
### <20>?ASL璅<E79285>嚗Òsl_schema嚗? 摰<><E691B0><EFBFBD>
| 銵典<E98AB5> | <20><EFBFBD>?| <20><EFBFBD>?| 霈啣<E99C88><E595A3>?|
|-----|------|------|--------|
| `literatures` | <20>?撌脫凒<E884AB>?| <20><><EFBFBD><EFBFBD>靽⊥<E99DBD><EFBFBD><EFBFBD><EFBFBD>摮埈挾嚗?| - |
| `screening_projects` | <20>?甇<>虜 | 蝑偦<E89D91>厰★<E58EB0>?| - |
| `screening_tasks` | <20>?甇<>虜 | <20><><EFBFBD><EFBFBD><EFBFBD><E48185><EFBFBD>隞餃𦛚 | - |
| `screening_results` | <20>?甇<>虜 | <20><><EFBFBD><EFBFBD><EFBFBD><E48185><EFBFBD>蝏𤘪<E89D8F> | - |
| `fulltext_screening_tasks` | <20>?<3F>啣遣 | <20><EFBFBD>憭滨<E686AD>隞餃𦛚 | 0 |
| `fulltext_screening_results` | <20>?<3F>啣遣 | <20><EFBFBD>憭滨<E686AD>蝏𤘪<E89D8F> | 0 |
**<EFBFBD><EFBFBD>蝏栞捏**嚗?
- <20>?ASL璅<E79285><E288AA><EFBFBD><EFBFBD>㗇㺭<E39787><EFBFBD><E6A180><EFBFBD>鈭?`asl_schema`
- <20>?瘝⊥<E7989D><E28AA5>唳旿瘜<E697BF><E7989C><EFBFBD>?`public` schema
- <20>?Schema<6D>𠉛氖蝑𣇉裦<F0A38789><EFBFBD><EFBFBD>
- <20>?隞<><E99A9E>霈輸䔮頝臬<E9A09D><EFBFBD>嚗Ǒprisma.aslLiterature`, `prisma.aslScreeningProject` 蝑㚁<E89D91>
---
## <20>𣞁 Public Schema<6D><61><EFBFBD><EFBFBD><E39B96><EFBFBD><EFBFBD><E59A97>ASL<53><EFBFBD>嚗?
### <20><EFBFBD><E6A185>讛膩
<EFBFBD>券★<EFBFBD>格𡟺<EFBFBD><EFBFBD><EFBFBD>睲葉嚗屸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>銵刻◤<EFBFBD>躰秤<EFBFBD><EFBFBD>撱箏銁 `public` schema 銝哨<E98A9D>餈嘥<E9A488><EFBFBD>chema<6D>𠉛氖蝑𣇉裦嚗?
| <20>躰秤銵典<E98AB5> | 摨𥪜銁Schema | 敶枏<E695B6><E69E8F><EFBFBD>?|
|---------|-----------|---------|
| `public.users` | `platform_schema` | <20>𩤃<EFBFBD> <20><EFBFBD>摮睃銁 |
| `public.projects` | `aia_schema` | <20>𩤃<EFBFBD> <20><EFBFBD>摮睃銁 |
| `public.conversations` | `aia_schema` | <20>𩤃<EFBFBD> <20><EFBFBD>摮睃銁 |
| `public.messages` | `aia_schema` | <20>𩤃<EFBFBD> <20><EFBFBD>摮睃銁 |
| `public.knowledge_bases` | `pkb_schema` | <20>𩤃<EFBFBD> <20><EFBFBD>摮睃銁 |
| `public.documents` | `pkb_schema` | <20>𩤃<EFBFBD> <20><EFBFBD>摮睃銁 |
| `public.batch_tasks` | `pkb_schema` | <20>𩤃<EFBFBD> <20><EFBFBD>摮睃銁 |
| `public.batch_results` | `pkb_schema` | <20>𩤃<EFBFBD> <20><EFBFBD>摮睃銁 |
**<EFBFBD>唳旿撖寞<EFBFBD>嚗?025-11-23敹怎<E695B9>嚗?*嚗?
```
platform_schema.users: 3<>∟扇敶?
public.users: 2<>∟扇敶?
aia_schema.projects: 2<>∟扇敶?
public.projects: 2<>∟扇敶?
pkb_schema.knowledge_bases: 2<>∟扇敶?
public.knowledge_bases: 2<>∟扇敶?
```
**敶勗<E695B6><E58B97><EFBFBD>凒**嚗?
- <20>叚 **銝滚蔣<E6BB9A><E894A3>SL璅<E79285>**嚗㇁SL摰<4C><E691B0><EFBFBD>𠉛氖<F0A0899B>災sl_schema嚗?
- <20>𩤃<EFBFBD> 敶勗<E695B6>AIA璅<E79285>嚗㇁I<E38781><EFBFBD>嚗?
- <20>𩤃<EFBFBD> 敶勗<E695B6>PKB璅<E79285><EFBFBD>䰻霂<E4B0BB><E99C82>嚗?
- <20>𩤃<EFBFBD> 敶勗<E695B6>Platform璅<E79285><EFBFBD><EFBFBD>瑞頂蝏<E9A082><E89D8F>
**韐<>遙敶鍦<E695B6>**嚗?
- <20>㩞 ASL<53><EFBFBD>嚗𡁏<E59A97><EFBFBD>遙嚗峕㺭<E5B395>桃恣<E6A183><E681A3><EFBFBD><EFBFBD>冽迤蝖?
- <20><20><EFBFBD><E79285><E288AA><EFBFBD>嚗𡁻<E59A97><F0A181BB><EFBFBD><EFBFBD><E79A9C>public schema<6D>唳旿
---
## <20><>儭?2025-11-23餈<33><EFBFBD><EFBFBD>霈啣<E99C88>
### 餈<><EFBFBD><EFBFBD>
銝箏<EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝑𥕦<EFBFBD><EFBFBD><EFBFBD>Day 4撘<34><E69298>𡢅<EFBFBD>瘛餃<E7989B><E9A483>唳旿摨𤘪𣈲<F0A498AA><F0A388B2><EFBFBD>
1. 靽格㺿 `literatures` 銵剁<E98AB5>瘛餃<E7989B><E9A483><EFBFBD><E586BD><EFBFBD>摮埈挾嚗?
2. <20>𥕦遣 `fulltext_screening_tasks` 銵?
3. <20>𥕦遣 `fulltext_screening_results` 銵?
### 餈<>宏蝑𣇉裦<F0A38789>㗇𥋘
**<EFBFBD>?<3F><EFBFBD>A嚗䥪risma Migrate嚗<65><EFBFBD><EFBFBD>嚗?*
```bash
npx prisma migrate dev --name add_fulltext_screening
```
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD>**嚗?
- Prisma隡𡁜<E99AA1>霂訫<E99C82><E8A8AB>?`public` schema銝剔<E98A9D><E58994><EFBFBD>銵?
- <20><EFBFBD>敶勗<E695B6><E58B97><EFBFBD><E79285><E288AA><EFBFBD><EFBFBD>?
- 餈嘥<E9A488>"蝞<E288AA>芸楛"<22><><EFBFBD><EFBFBD>?
**<EFBFBD>?<3F><EFBFBD>B嚗𡁏<E59A97><F0A1818F>沒QL<51>𡁏𧋦嚗<F0A78BA6><EFBFBD><E6AD87>鍂嚗?*
```bash
# <20>𥕦遣<F0A595A6>见𢆡餈<F0A286A1><EFBFBD>𡁏𧋦
backend/prisma/migrations/manual_fulltext_screening.sql
# <20><EFBFBD><EFBFBD>宏嚗<E5AE8F><E59A97><EFBFBD><EFBFBD>asl_schema嚗?
Get-Content manual_fulltext_screening.sql | docker exec -i ai-clinical-postgres psql ...
```
**隡睃飵**嚗?
- <20>?<3F><EFBFBD>雿?`asl_schema`嚗䔶<EFBFBD><EFBFBD><EFBFBD>隞騯chema
- <20>?銝滚<E98A9D><E6BB9A>支遙雿?`public` <20>唳旿
- <20>?摰匧<E691B0><E58CA7><EFBFBD><EFBFBD><EFBFBD><E689BC>虾摰∟恣
- <20>?蝚血<E89D9A>"蝞<E288AA>芸楛"<22><EFBFBD>
### 餈<><EFBFBD><E5AE8F>捆霂行<E99C82>
#### 1. 靽格㺿 `literatures` 銵?
<EFBFBD><EFBFBD>摮埈挾嚗?3銝迎<E98A9D>嚗?
**<EFBFBD><EFBFBD><EFBFBD>笔𦶢<EFBFBD><EFBFBD>**:
- `stage TEXT DEFAULT 'imported'` - <20>嗆挾<E59786><E68CBE>扇嚗ǎmported <20>?title_screened <20>?fulltext_pending <20>?fulltext_screened嚗?
**PDF蝞∠<E89D9E>**:
- `has_pdf BOOLEAN DEFAULT false` - <20>臬炏<E887AC>侨DF
- `pdf_storage_type TEXT` - 摮睃<E691AE>蝐餃<E89D90>嚗èss/dify/local嚗?
- `pdf_storage_ref TEXT` - 摮睃<E691AE>撘閧鍂嚗ɑey<65>𦎾D嚗?
- `pdf_status TEXT DEFAULT 'pending'` - <20><EFBFBD><E59786><EFBFBD>pending/extracting/completed/failed嚗?
- `pdf_uploaded_at TIMESTAMP(3)` - 銝𠹺<E98A9D><F0A0B9BA>園𡢿
**<EFBFBD><EFBFBD>蝞∠<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗?*:
- `full_text_storage_type TEXT` - 摮睃<E691AE>蝐餃<E89D90>嚗èss/dify嚗?
- `full_text_storage_ref TEXT` - 摮睃<E691AE>撘閧鍂
- `full_text_url TEXT` - 霈輸䔮URL
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?*:
- `full_text_format TEXT` - <20><EFBFBD>嚗éarkdown/plaintext嚗?
- `full_text_source TEXT` - <20>𣂼<EFBFBD><F0A382BC><EFBFBD>嚗ěougat/pymupdf嚗?
- `full_text_token_count INTEGER` - Token<65><EFBFBD>
- `full_text_extracted_at TIMESTAMP(3)` - <20>𣂼<EFBFBD><F0A382BC>園𡢿
**<EFBFBD><EFBFBD><EFBFBD>**:
- `idx_literatures_stage`
- `idx_literatures_has_pdf`
- `idx_literatures_pdf_status`
#### 2. <20>𥕦遣 `fulltext_screening_tasks` 銵?
隞餃𦛚蝞∠<EFBFBD>銵剁<EFBFBD>摮埈挾<EFBFBD><EFBFBD>𡠺嚗?
- <20><EFBFBD>靽⊥<E99DBD>嚗䫤id`, `project_id`
-<E79285><E288AA>滨蔭嚗䫤model_a`, `model_b`, `prompt_version`
- 餈𥕦漲頝蠘葵嚗䫤total_count`, `processed_count`, `success_count`, `failed_count`, `degraded_count`
- <20>鞉𧋦蝏蠘恣嚗䫤total_tokens`, `total_cost`
- <20><EFBFBD><E59786><EFBFBD><E681A3><EFBFBD>`status`, `started_at`, `completed_at`, `estimated_end_at`
- <20>躰秤霈啣<E99C88>嚗䫤error_message`, `error_stack`
**蝝<E89D9D>**:
- `idx_fulltext_tasks_project_id`
- `idx_fulltext_tasks_status`
- `idx_fulltext_tasks_created_at`
**憭㚚睸蝥行<E89DA5>**:
- `project_id` <20>?`screening_projects(id)` ON DELETE CASCADE
#### 3. <20>𥕦遣 `fulltext_screening_results` 銵?
蝏𤘪<EFBFBD>摮睃<EFBFBD>銵剁<EFBFBD>12摮埈挾璅⊥踎嚗㚁<EFBFBD>摮埈挾<EFBFBD><EFBFBD>𡠺嚗?
- <20><EFBFBD>靽⊥<E99DBD>嚗䫤task_id`, `project_id`, `literature_id`
- Model A蝏𤘪<E89D8F>嚗䫤model_a_name`, `model_a_fields` (JSONB), `model_a_tokens`, `model_a_cost` 蝑?
- Model B蝏𤘪<E89D8F>嚗䫤model_b_name`, `model_b_fields` (JSONB), `model_b_tokens`, `model_b_cost` 蝑?
- 撉諹<E69289>蝏𤘪<E89D8F>嚗䫤medical_logic_issues` (JSONB), `evidence_chain_issues` (JSONB)
- <20><EFBFBD><EFBFBD>瘚页<E7989A>`is_conflict`, `conflict_severity`, `conflict_fields`, `review_priority`
- 鈭箏極憭齿瓲嚗䫤final_decision`, `final_decision_by`, `exclusion_reason`, `review_notes`
-<><E686AD><EFBFBD><EFBFBD><E59786><EFBFBD>`processing_status`, `is_degraded`, `degraded_model`
- <20>航蕭皞舀<E79A9E><EFBFBD>`raw_output_a` (JSONB), `raw_output_b` (JSONB), `prompt_version`
**蝝<E89D9D>**:
- `idx_fulltext_results_task_id`
- `idx_fulltext_results_project_id`
- `idx_fulltext_results_literature_id`
- `idx_fulltext_results_is_conflict`
- `idx_fulltext_results_final_decision`
- `idx_fulltext_results_review_priority`
**<EFBFBD><EFBFBD>蝥行<EFBFBD>**:
- `unique_project_literature_fulltext (project_id, literature_id)`
**憭㚚睸蝥行<E89DA5>**:
- `task_id` <20>?`fulltext_screening_tasks(id)` ON DELETE CASCADE
- `project_id` <20>?`screening_projects(id)` ON DELETE CASCADE
- `literature_id` <20>?`literatures(id)` ON DELETE CASCADE
### 餈<>宏蝏𤘪<E89D8F>撉諹<E69289>
```sql
-- 撉諹<E69289>銵典<E98AB5>撱?
\dt asl_schema.*
-- 蝏𤘪<E89D8F>嚗?銝芾”
-- <20>?literatures (撌脫凒<E884AB>?
-- <20>?screening_projects
-- <20>?screening_tasks
-- <20>?screening_results
-- <20>?fulltext_screening_tasks (<28>啣遣)
-- <20>?fulltext_screening_results (<28>啣遣)
-- 撉諹<E69289><E8ABB9><EFBFBD>畾?
\d asl_schema.literatures
-- 蝏𤘪<E89D8F>嚗?
-- <20>?stage
-- <20>?has_pdf
-- <20>?full_text_storage_type
-- <20>?full_text_storage_ref
-- <20>?full_text_url
-- <20>?full_text_format
-- ... 蝑?3銝芣鰵摮埈挾
```
**Prisma Client<6E><74><EFBFBD>**:
```bash
cd backend
npx prisma generate
# 蝏𤘪<E89D8F>嚗尠<E59A97> <20><><EFBFBD><EFBFBD>𣂼<EFBFBD>
# 隞<><E99A9E><EFBFBD>航挪<E888AA><EFBFBD>
# - prisma.aslLiterature
# - prisma.aslFulltextScreeningTask
# - prisma.aslFulltextScreeningResult
```
---
## <20><> Schema<6D>𠉛氖蝑𣇉裦<F0A38789><EFBFBD><E689AF><EFBFBD><EFBFBD>
### 霈曇恣<E69B87><EFBFBD><EFBFBD><EFBFBD>芰頂蝏<E9A082><EFBFBD><E6B2B2><EFBFBD><EFBFBD><E78DA2>
```
<EFBFBD><EFBFBD><EFBFBD>埈㺭<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𠉛氖嚗?
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> admin_schema (蝟餌<E89D9F>蝞∠<E89D9E>)
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> platform_schema (<28><EFBFBD>蝟餌<E89D9F>)
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> aia_schema (AI<41><EFBFBD>)
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> asl_schema (AI<41><EFBFBD><E7AE84><EFBFBD>讃) <20>?<3F><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> pkb_schema (<28><EFBFBD>摨?
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> rvw_schema (摰⊿<E691B0><E28ABF><EFBFBD>)
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> st_schema (蝏蠘恣<E8A098><E681A3><EFBFBD>)
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> dc_schema (<28>唳旿<E594B3><E697BF><EFBFBD>)
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ssa_schema (<28>瑟𧋦<E7919F><EFBFBD><E8AAA9>?
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> common_schema (<28><EFBFBD><E7A08D>唳旿)
```
### ASL璅<E79285><E288AA><EFBFBD><E689AF><EFBFBD><EFBFBD> <20>?
| 璉<><E79289>仿★ | <20><EFBFBD>?| 霂湔<E99C82> |
|-------|------|------|
| Schema<6D><EFBFBD> | <20>?甇<> | `asl_schema` |
| <20><><EFBFBD>㕑”<E39591>賢銁甇<E98A81>Schema | <20>?甇<> | 6銝芾”<E88ABE><EFBFBD><E588B8>?`asl_schema` |
| 瘝⊥<E7989D>銵典銁public | <20>?甇<> | <20><EFBFBD>瞍?|
| Prisma Model<65><EFBFBD><EFBFBD> | <20>?甇<> | `@@schema("asl_schema")` |
| 隞<><E99A9E>霈輸䔮頝臬<E9A09D><EFBFBD> | <20>?甇<> | `prisma.aslXxx` |
| 憭㚚睸蝥行<E89DA5><E8A18C><EFBFBD><EFBFBD><EFBFBD>?| <20>?甇<> | <20><><EFBFBD>丽K<E4B8BD><4B><EFBFBD><EFBFBD>众chema銵?|
**隞<><E99A9E>蝷箔<E89DB7>**嚗<>迤蝖株挪<E6A0AA>格䲮撘𧶏<E69298>嚗?
```typescript
// <20>?甇<>嚗𡁻<E59A97><EFBFBD>Prisma Client霈輸䔮asl_schema
const project = await prisma.aslScreeningProject.findUnique({
where: { id: projectId },
});
const literatures = await prisma.aslLiterature.findMany({
where: { projectId },
});
const task = await prisma.aslFulltextScreeningTask.create({
data: { ... },
});
// <20>?<3F>躰秤嚗𡁶凒<F0A181B6>兄QL霈輸䔮public嚗<63><E59A97>隡𡁜<E99AA1><F0A1819C><EFBFBD><EFBFBD><EFBFBD>牐蛹銵其<E98AB5><E585B6>私ublic嚗?
await prisma.$queryRaw`SELECT * FROM public.literatures`;
```
---
## <20><20>芣䔉餈<E49489>宏蝑𣇉裦
### 撖嫣<E69296>ASL璅<E79285>
**<EFBFBD><EFBFBD>蝑𣇉裦**嚗𡁶誧蝏凋蝙<E5878B><EFBFBD><E586BD>沒QL<51>𡁏𧋦
**<EFBFBD><EFBFBD>**嚗?
1. <20>?Public schema<6D><61><EFBFBD><EFBFBD><EFBFBD><E884A4>䠷䔮憸条<E686B8><E69DA1><EFBFBD><EFBFBD>瘜閗圾<E99697>?
2. <20>?<3F>见𢆡<E8A781>𡁏𧋦<F0A1818F><EFBFBD><E6B8B8><EFBFBD><E585B7><EFBFBD>?
3. <20>?<3F><EFBFBD><E8B8B9><EFBFBD>敶勗<E695B6><E58B97><EFBFBD><E79285>
4. <20>?靘蹂<E99D98><EFBFBD><E99A9E>摰⊥䰻<E28AA5><E4B0BB>恣霈?
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD>**嚗?
```bash
# 1. 靽格㺿 Prisma Schema
# backend/prisma/schema.prisma
# 2. 蝻硋<E89DBB><E7A18B>见𢆡SQL<51>𡁏𧋦
# backend/prisma/migrations/manual_xxx.sql
# 3. <20><EFBFBD><E689AF>𡁏𧋦嚗<F0A78BA6><EFBFBD><EFBFBD>asl_schema嚗?
Get-Content manual_xxx.sql | docker exec -i ai-clinical-postgres psql ...
# 4. 撉諹<E69289>蝏𤘪<E89D8F>
docker exec ai-clinical-postgres psql ... -c "\dt asl_schema.*"
# 5. <20><><EFBFBD>Prisma Client
npx prisma generate
# 6. <20>𣂷漱Git
git add .
git commit -m "feat(asl): add xxx tables for xxx feature"
```
**SQL<51>𡁏𧋦璅⊥踎**嚗?
```sql
-- <20><EFBFBD>雿𦡞sl_schema嚗䔶<E59A97>敶勗<E695B6><E58B97><EFBFBD>schema
ALTER TABLE asl_schema.xxx ADD COLUMN IF NOT EXISTS ...;
CREATE TABLE IF NOT EXISTS asl_schema.xxx (...);
CREATE INDEX IF NOT EXISTS idx_xxx ON asl_schema.xxx(...);
```
### 撖嫣<E69296><E5ABA3><EFBFBD><E79285>
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?*嚗𡁜<E59A97><E79285><EFBFBD><E69298>穃𣪧<E7A983>?
**撱箄悅<E7AE84><EFBFBD>**嚗<><EFBFBD><E79C8F><EFBFBD>堒𣪧<E5A092>蠘䌊銵<E48C8A><E98AB5>摰𡄯<E691B0>嚗?
1.<><E79289>?`public` schema銝剜糓<E5899C><EFBFBD><E8A18C>祆芋<E7A586><EFBFBD>銵?
2. 撖寞<E69296><E5AF9E>唳旿撌桀<E6928C>嚗Ǒpublic` vs 甇<>schema嚗?
3. <20><EFBFBD><E5969F>臬炏<E887AC><E7828F><EFBFBD><EFBFBD><EFBFBD>蝘餅<E89D98><EFBFBD><E79A9C>
4. <20><EFBFBD><EFBFBD><E79A9C><EFBFBD><EFBFBD><EFBFBD><E59A97><EFBFBD>抵䌊韐<E48C8A><E99F90>
**ASL<53><EFBFBD>蝡见㦤**嚗?
- <20>㩞 銝滢蜓<E6BBA2><EFBFBD><E586BD><EFBFBD><EFBFBD>隞𡝗芋<F0A19D97><EFBFBD>public銵?
- <20>㩞 銝滚笆<E6BB9A><EFBFBD><E79285><E288AA>唳旿摰匧<E691B0>韐蠘提
- <20>㩞 銝𤘪釣鈭箢sl_schema<6D><61><EFBFBD><EFBFBD>蝔喳<E89D94><E596B3>?
---
## <20><> <20>唳旿摰峕㟲<E5B395><EFBFBD>霂?
### ASL璅<E79285><E288AA>唳旿<E594B3>喟頂<E5969F>?
```
asl_schema.screening_projects (憿寧𤌍)
<20>?1:N
asl_schema.literatures (<28><>讃)
<20>?1:1 <20>?1:1
asl_schema.screening_results asl_schema.fulltext_screening_results
(<28><><EFBFBD><EFBFBD><EFBFBD><E48185><EFBFBD>蝏𤘪<E89D8F>) (<28><EFBFBD>憭滨<E686AD>蝏𤘪<E89D8F>)
<20>?N:1 <20>?N:1
asl_schema.screening_tasks asl_schema.fulltext_screening_tasks
(<28><><EFBFBD><EFBFBD><EFBFBD><E48185><EFBFBD>隞餃𦛚) (<28><EFBFBD>憭滨<E686AD>隞餃𦛚)
```
### 憭㚚睸蝥行<E89DA5>撉諹<E69289>
```sql
-- 撉諹<E69289><E8ABB9><EFBFBD><EFBFBD><EFBFBD><E58CA7><EFBFBD><E6A185><EFBFBD><EFBFBD>asl_schema<6D><61><EFBFBD>
SELECT
tc.constraint_name,
tc.table_name,
kcu.column_name,
ccu.table_name AS foreign_table_name,
ccu.column_name AS foreign_column_name
FROM information_schema.table_constraints AS tc
JOIN information_schema.key_column_usage AS kcu
ON tc.constraint_name = kcu.constraint_name
JOIN information_schema.constraint_column_usage AS ccu
ON ccu.constraint_name = tc.constraint_name
WHERE tc.constraint_type = 'FOREIGN KEY'
AND tc.table_schema = 'asl_schema'
ORDER BY tc.table_name;
-- 憸<><E686B8>蝏𤘪<E89D8F>嚗?
-- <20>?<3F><><EFBFBD>丽K<E4B8BD>?foreign_table_name <20>賢銁 asl_schema 銝?
-- <20>?瘝⊥<E7989D>頝究chema撘閧鍂
```
---
## <20><20>喲睸蝏栞捏
### <20>?ASL璅<E79285>嚗𡁜<E59A97><F0A1819C><EFBFBD>摨?
1. **Schema<6D>𠉛氖**嚗?00%甇<>嚗峕<E59A97><E5B395>㕑”<E39591>賢銁 `asl_schema`
2. **<EFBFBD>唳旿蝞∠<EFBFBD>**嚗𡁏<E59A97><F0A1818F>唳旿瘜<E697BF><E7989C><EFBFBD>?`public`
3. **隞<><E99A9E><EFBFBD><E996AB>**嚗𡁏<E59A97><F0A1818F>㕑挪<E39591>株楝敺<E6A59D>迤蝖?
4. **餈<>宏蝑𣇉裦**嚗𡁏<E59A97><F0A1818F>沒QL<51>𡁏𧋦嚗<F0A78BA6><E59A97><EFBFBD>典虾<E585B8>?
### <20>𩤃<EFBFBD> 蝟餌<E89D9F>蝥折䔮憸矋<E686B8>Public Schema瘙⊥<E79899>
1. **<EFBFBD><EFBFBD><EFBFBD>扯捶**嚗𡁜<E59A97><F0A1819C><EFBFBD><E884A4><EFBFBD>銝垾SL<53><EFBFBD>
2. **敶勗<E695B6><E58B97><EFBFBD>凒**嚗鋫IA<49><41>KB<4B><42>latform璅<E79285>
3. **閫<><E996AB><EFBFBD>遙**嚗𡁜<E59A97><E79285><E288AA><EFBFBD><EFBD81><EFBFBD><EFBFBD><E686AD>
4. **ASL蝑𣇉裦**嚗帋<E59A97><E5B88B>私ublic嚗𣬚恣憟質䌊撌?
### <20><><><E69298>睲犖<E79DB2><EFBFBD><E480B9>?
**憒<><E68692>雿䭾糓ASL璅<E79285><EFBFBD><E69298>𤏸<EFBFBD>?*嚗?
- <20>?蝏抒賒靽脲<E99DBD>敶枏<E695B6><E69E8F><EFBFBD>chema<6D>𠉛氖摰噼殿
- <20>?雿輻鍂<E8BCBB>见𢆡SQL<51>𡁏𧋦餈𥡝<E9A488><F0A5A19D>唳旿摨栞<E691A8>蝘?
- <20>?<3F><><EFBFBD>㕑”<E39591><EFBFBD>撱箏銁 `asl_schema`
- <20>?銝滩<E98A9D>撠肽<E692A0><EFBFBD><E79A9C> `public` schema
**憒<><E68692>雿䭾糓<E4ADBE><EFBFBD><E79285><EFBFBD><E69298>𤏸<EFBFBD>?*嚗?
- <20>椬 璉<><E79289>亥䌊撌望芋<E69C9B><EFBFBD>Schema<6D>𠉛氖<F0A0899B><EFBFBD>
- <20><20><EFBFBD><E596B3>臬炏<E887AC><E7828F><EFBFBD><E996AC><EFBFBD>?`public` 銝剔<E98A9D><E58994><EFBFBD>銵?
- <20><20><><EFBFBD><EFBFBD>SL<53><4C><EFBFBD>蝘餌<E89D98><E9A48C><EFBFBD><E4BC90>见𢆡SQL嚗?
- <20>椬 銝滩<E98A9D>靘肽<E99D98>ASL<53><EFBFBD><EFBFBD><E79A9C>public
---
## <20><> <20><EFBFBD><E8A9A8><EFBFBD>
- [蝟餌<E89D9F><E9A48C><EFBFBD>霈曇恣 - <20>唳旿摨𤘪沲<F0A498AA><E6B2B2><EFBFBD>筕(../../../../00-蝟餌<E89D9F><E9A48C><EFBFBD>霈曇恣/03-<2D>唳旿摨𤘪沲<F0A498AA><E6B2B2><EFBFBD>?md)
- [ASL璅<E79285> - <20>唳旿摨栞挽霈(../../02-<2D><><EFBFBD>航挽霈?01-<2D>唳旿摨栞挽霈?md)
- [鈭穃<E988AD><E7A983><EFBFBD><E7AC94>𤏸<EFBFBD><F0A48FB8><EFBFBD>(../../../../04-撘<><E69298>𤏸<EFBFBD><F0A48FB8>?08-鈭穃<E988AD><E7A983><EFBFBD><E7AC94>𤏸<EFBFBD><F0A48FB8>?md)
- [Day 2-3撘<33><E69298>𤏸扇敶騟(./2025-11-22_Day2-Day3_LLM<4C>滚𦛚銝𡡞<E98A9D><EFBFBD>頂蝏笔<E89D8F><E7AC94>?md)
---
**<EFBFBD><EFBFBD>﹝蝏湔擪**嚗?
- <20>唳旿摨梶<E691A8><E6A2B6><EFBFBD><EFBFBD><EFBFBD>湔𧒄<E6B994>湔鰵
- <20>𤑳緵<F0A491B3>圈䔮憸䀹𧒄霈啣<E99C88>
- 摰𡁏<E691B0>摰⊥䰻Schema<6D>𠉛氖<F0A0899B><EFBFBD>
**<EFBFBD><EFBFBD><EFBFBD>擧凒<EFBFBD>?*嚗?025-11-23
**<EFBFBD>湔鰵鈭?*嚗鋫SL撘<4C><E69298>穃𣪧<E7A983>?
**銝𧢲活摰⊥䰻**嚗帋<E59A97>甈⊥㺭<E28AA5><EFBFBD><EFBFBD><EFBFBD>?