# AI智能文献模块 - 数据库设计

> **文档版本：** v1.0  
> **创建日期：** 2025-10-29  
> **维护者：** AI智能文献开发团队  
> **最后更新：** 2025-10-29

---

## 📋 文档说明

本文档描述AI智能文献模块的数据库设计，包括数据表结构、关系设计、索引设计等。

---

## 🗄️ 核心数据表

### 1. 文献筛选项目表 (literature_screening_projects)

```sql
CREATE TABLE literature_screening_projects (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  user_id UUID NOT NULL REFERENCES users(id),
  project_name VARCHAR(255) NOT NULL,
  protocol_id UUID, -- 研究方案ID（未来关联）
  
  -- PICO标准
  pico_criteria JSONB, -- PICO结构化数据
  
  -- 筛选标准
  inclusion_criteria TEXT,
  exclusion_criteria TEXT,
  
  -- 状态
  status VARCHAR(50) DEFAULT 'draft', -- draft, screening, completed
  
  -- 筛选配置
  screening_config JSONB, -- 筛选配置（双模型选择等）
  
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```

### 2. 文献条目表 (literature_items)

```sql
CREATE TABLE literature_items (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  project_id UUID NOT NULL REFERENCES literature_screening_projects(id) ON DELETE CASCADE,
  
  -- 文献基本信息
  pmid VARCHAR(50),
  title TEXT,
  authors TEXT,
  journal VARCHAR(255),
  publication_year INTEGER,
  doi VARCHAR(255),
  abstract TEXT,
  
  -- 文件信息
  full_text_file_path VARCHAR(500),
  full_text_status VARCHAR(50), -- not_required, pending, downloaded, uploaded, failed
  
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  
  UNIQUE(project_id, pmid)
);
```

### 3. 标题摘要初筛结果表 (title_abstract_screening_results)

```sql
CREATE TABLE title_abstract_screening_results (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  project_id UUID NOT NULL REFERENCES literature_screening_projects(id) ON DELETE CASCADE,
  literature_item_id UUID NOT NULL REFERENCES literature_items(id) ON DELETE CASCADE,
  
  -- DS模型判断
  ds_p_judgment VARCHAR(10), -- ✓, ✗, ?
  ds_i_judgment VARCHAR(10),
  ds_c_judgment VARCHAR(10),
  ds_s_judgment VARCHAR(10),
  ds_conclusion VARCHAR(20), -- include, exclude
  
  -- DS模型证据
  ds_p_evidence TEXT,
  ds_i_evidence TEXT,
  ds_c_evidence TEXT,
  ds_s_evidence TEXT,
  
  -- Q3模型判断
  q3_p_judgment VARCHAR(10),
  q3_i_judgment VARCHAR(10),
  q3_c_judgment VARCHAR(10),
  q3_s_judgment VARCHAR(10),
  q3_conclusion VARCHAR(20),
  
  -- Q3模型证据
  q3_p_evidence TEXT,
  q3_i_evidence TEXT,
  q3_c_evidence TEXT,
  q3_s_evidence TEXT,
  
  -- 冲突状态
  conflict_status VARCHAR(20) DEFAULT 'none', -- none, conflict, resolved
  
  -- 最终决策
  final_decision VARCHAR(20), -- include, exclude, pending
  final_decision_by UUID REFERENCES users(id),
  final_decision_at TIMESTAMP,
  exclusion_reason TEXT,
  
  -- AI处理状态
  ai_processing_status VARCHAR(50) DEFAULT 'pending', -- pending, processing, completed, failed
  ai_processed_at TIMESTAMP,
  
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  
  UNIQUE(project_id, literature_item_id)
);
```

### 4. 筛选任务表 (screening_tasks)

```sql
CREATE TABLE screening_tasks (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  project_id UUID NOT NULL REFERENCES literature_screening_projects(id) ON DELETE CASCADE,
  
  task_type VARCHAR(50) NOT NULL, -- title_abstract, full_text
  status VARCHAR(50) DEFAULT 'pending', -- pending, running, completed, failed
  
  total_items INTEGER,
  processed_items INTEGER DEFAULT 0,
  success_items INTEGER DEFAULT 0,
  failed_items INTEGER DEFAULT 0,
  
  started_at TIMESTAMP,
  completed_at TIMESTAMP,
  error_message TEXT,
  
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```

---

## 📊 数据关系图

```
literature_screening_projects (1) ──< (N) literature_items
literature_screening_projects (1) ──< (N) title_abstract_screening_results
literature_items (1) ──< (1) title_abstract_screening_results
literature_screening_projects (1) ──< (N) screening_tasks
```

---

## 🔍 索引设计

```sql
-- 文献条目表索引
CREATE INDEX idx_literature_items_project_id ON literature_items(project_id);
CREATE INDEX idx_literature_items_pmid ON literature_items(pmid);

-- 筛选结果表索引
CREATE INDEX idx_screening_results_project_id ON title_abstract_screening_results(project_id);
CREATE INDEX idx_screening_results_item_id ON title_abstract_screening_results(literature_item_id);
CREATE INDEX idx_screening_results_conflict ON title_abstract_screening_results(conflict_status);
CREATE INDEX idx_screening_results_decision ON title_abstract_screening_results(final_decision);

-- 任务表索引
CREATE INDEX idx_screening_tasks_project_id ON screening_tasks(project_id);
CREATE INDEX idx_screening_tasks_status ON screening_tasks(status);
```

---

## ⏳ 待完善内容

后续将补充：
- 全文复筛相关表结构
- 数据提取相关表结构
- 数据迁移方案
- 数据字典

---

**文档版本：** v1.0  
**最后更新：** 2025-10-29








