465 lines
20 KiB
SQL
465 lines
20 KiB
SQL
-- 智能报告生成平台 - 数据库初始化脚本
|
||
-- 数据库名建议:post_eval_report
|
||
-- 适用于 MySQL
|
||
|
||
-- 创建数据库(可选)
|
||
-- CREATE DATABASE IF NOT EXISTS post_eval_report DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
-- USE post_eval_report;
|
||
|
||
-- 项目(统一:知识库 + 撰写)
|
||
-- uuid 由应用层生成,避免 MySQL 8/9 对生成列函数限制导致初始化失败
|
||
CREATE TABLE IF NOT EXISTS projects (
|
||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||
uuid VARCHAR(32) NOT NULL UNIQUE,
|
||
name VARCHAR(255) NOT NULL,
|
||
description TEXT,
|
||
created_at DATETIME NOT NULL,
|
||
updated_at DATETIME NOT NULL,
|
||
doc_count INT DEFAULT 0,
|
||
eval_reports_count INT DEFAULT 0,
|
||
total_size VARCHAR(32) DEFAULT '0 B',
|
||
tags TEXT,
|
||
status VARCHAR(16) DEFAULT 'active',
|
||
color VARCHAR(16) DEFAULT '#3b82f6',
|
||
sync_suppressed_table_names LONGTEXT NULL
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
CREATE INDEX idx_projects_created_at ON projects(created_at);
|
||
CREATE INDEX idx_projects_updated_at ON projects(updated_at);
|
||
CREATE INDEX idx_projects_status ON projects(status);
|
||
|
||
-- 知识库目录表:project_id 关联 projects.uuid;parent_id 形成目录树
|
||
CREATE TABLE IF NOT EXISTS kb_directories (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
project_id VARCHAR(32) NOT NULL,
|
||
parent_id VARCHAR(64) NULL,
|
||
name VARCHAR(255) NOT NULL,
|
||
full_path VARCHAR(1024) NOT NULL,
|
||
created_at DATETIME NOT NULL,
|
||
updated_at DATETIME NOT NULL,
|
||
FOREIGN KEY (project_id) REFERENCES projects(uuid) ON DELETE CASCADE,
|
||
FOREIGN KEY (parent_id) REFERENCES kb_directories(id) ON DELETE CASCADE
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
CREATE INDEX idx_kb_dirs_project ON kb_directories(project_id);
|
||
CREATE INDEX idx_kb_dirs_parent ON kb_directories(parent_id);
|
||
|
||
-- 知识库文档(status: 0=失败 2=排队中 3=处理中 4=可用)
|
||
CREATE TABLE IF NOT EXISTS kb_documents (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
project_id VARCHAR(32) NOT NULL,
|
||
directory_id VARCHAR(64) NULL,
|
||
name VARCHAR(255) NOT NULL,
|
||
size VARCHAR(32) NOT NULL,
|
||
file_path VARCHAR(512),
|
||
storage_rel_path VARCHAR(512) NULL COMMENT '项目内完整相对路径(含文件名)',
|
||
word_count INT DEFAULT 0,
|
||
uploaded_at DATETIME NOT NULL,
|
||
status INT DEFAULT 2,
|
||
error_message TEXT NULL,
|
||
factor JSON NULL COMMENT '文档要素 JSON 数组',
|
||
category VARCHAR(32) NULL DEFAULT NULL COMMENT '文件分类',
|
||
FOREIGN KEY (project_id) REFERENCES projects(uuid) ON DELETE CASCADE,
|
||
FOREIGN KEY (directory_id) REFERENCES kb_directories(id) ON DELETE SET NULL
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
CREATE INDEX idx_kb_docs_project ON kb_documents(project_id);
|
||
CREATE INDEX idx_kb_docs_directory ON kb_documents(directory_id);
|
||
|
||
-- 若已有 kb_documents 表,执行以下语句添加 word_count 字段:
|
||
-- ALTER TABLE kb_documents ADD COLUMN word_count INT DEFAULT 0 AFTER file_path;
|
||
|
||
-- 撰写文档(project_id 关联 projects.uuid,与 kb_documents 一致)
|
||
CREATE TABLE IF NOT EXISTS write_documents (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
project_id VARCHAR(32) NOT NULL,
|
||
title VARCHAR(255) NOT NULL,
|
||
content LONGTEXT,
|
||
word_count INT DEFAULT 0,
|
||
created_at DATETIME NOT NULL,
|
||
updated_at DATETIME NOT NULL,
|
||
status VARCHAR(16) DEFAULT 'draft',
|
||
sort_order INT DEFAULT 0,
|
||
FOREIGN KEY (project_id) REFERENCES projects(uuid) ON DELETE CASCADE
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
CREATE INDEX idx_write_docs_project ON write_documents(project_id);
|
||
|
||
-- 文档版本
|
||
CREATE TABLE IF NOT EXISTS doc_versions (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
document_id VARCHAR(64) NOT NULL,
|
||
version VARCHAR(32) NOT NULL,
|
||
content LONGTEXT NOT NULL,
|
||
citation_payload LONGTEXT NULL,
|
||
saved_at DATETIME NOT NULL,
|
||
author VARCHAR(64) NOT NULL,
|
||
note TEXT,
|
||
FOREIGN KEY (document_id) REFERENCES write_documents(id) ON DELETE CASCADE
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
CREATE INDEX idx_versions_doc ON doc_versions(document_id);
|
||
|
||
-- 要素表定义(全局/时间)
|
||
CREATE TABLE IF NOT EXISTS element_tables (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
project_id VARCHAR(32) NOT NULL,
|
||
table_type VARCHAR(32) NOT NULL,
|
||
table_name VARCHAR(255) NOT NULL,
|
||
year INT NULL,
|
||
is_time_dimension TINYINT(1) DEFAULT 0,
|
||
sort_order INT DEFAULT 0,
|
||
sync_suppressed_row_keys LONGTEXT NULL,
|
||
custom_row_order LONGTEXT NULL,
|
||
created_at DATETIME NOT NULL,
|
||
updated_at DATETIME NOT NULL,
|
||
FOREIGN KEY (project_id) REFERENCES projects(uuid) ON DELETE CASCADE
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
CREATE INDEX idx_element_tables_project ON element_tables(project_id);
|
||
CREATE INDEX idx_element_tables_type_year ON element_tables(table_type, year);
|
||
CREATE INDEX idx_element_tables_name ON element_tables(table_name);
|
||
|
||
-- 要素单元格
|
||
CREATE TABLE IF NOT EXISTS element_cells (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
table_id VARCHAR(64) NOT NULL,
|
||
project_id VARCHAR(32) NOT NULL,
|
||
row_key VARCHAR(255) NOT NULL,
|
||
col_key VARCHAR(255) NULL,
|
||
year INT NULL,
|
||
value LONGTEXT NULL,
|
||
source_document_id VARCHAR(64) NULL,
|
||
source_line_no INT NULL,
|
||
source_line_end INT NULL,
|
||
source_quote TEXT NULL,
|
||
confidence FLOAT NULL,
|
||
extraction_batch_id VARCHAR(64) NULL,
|
||
extraction_model VARCHAR(128) NULL,
|
||
source_type VARCHAR(16) NULL COMMENT 'extract=文档抽取, manual=手工输入',
|
||
conflict_status VARCHAR(16) DEFAULT 'none',
|
||
created_at DATETIME NOT NULL,
|
||
updated_at DATETIME NOT NULL,
|
||
FOREIGN KEY (table_id) REFERENCES element_tables(id) ON DELETE CASCADE,
|
||
FOREIGN KEY (project_id) REFERENCES projects(uuid) ON DELETE CASCADE,
|
||
FOREIGN KEY (source_document_id) REFERENCES kb_documents(id) ON DELETE SET NULL
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
CREATE INDEX idx_element_cells_project ON element_cells(project_id);
|
||
CREATE INDEX idx_element_cells_row_col ON element_cells(row_key, col_key);
|
||
CREATE INDEX idx_element_cells_year ON element_cells(year);
|
||
|
||
-- 抽取结果留存(table/element)
|
||
CREATE TABLE IF NOT EXISTS extraction_results (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
project_id VARCHAR(32) NOT NULL,
|
||
document_id VARCHAR(64) NOT NULL,
|
||
batch_id VARCHAR(64) NOT NULL,
|
||
result_type VARCHAR(16) NOT NULL,
|
||
table_type VARCHAR(32) NULL,
|
||
table_name VARCHAR(255) NULL,
|
||
year INT NULL,
|
||
item_key VARCHAR(255) NOT NULL,
|
||
item_value LONGTEXT NULL,
|
||
source_line_no INT NULL,
|
||
source_line_end INT NULL,
|
||
confidence FLOAT NULL,
|
||
raw_payload JSON NULL,
|
||
extracted_at DATETIME NULL,
|
||
created_at DATETIME NOT NULL,
|
||
FOREIGN KEY (project_id) REFERENCES projects(uuid) ON DELETE CASCADE,
|
||
FOREIGN KEY (document_id) REFERENCES kb_documents(id) ON DELETE CASCADE
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
CREATE INDEX idx_extraction_project_doc ON extraction_results(project_id, document_id);
|
||
CREATE INDEX idx_extraction_batch ON extraction_results(batch_id);
|
||
CREATE INDEX idx_extraction_table_name ON extraction_results(table_name);
|
||
CREATE INDEX idx_extraction_key ON extraction_results(item_key);
|
||
|
||
-- 要素抽取结果明细(面向“细则章节/小节提示词 -> 项目材料”)
|
||
CREATE TABLE IF NOT EXISTS element_extraction_results (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
project_id VARCHAR(32) NOT NULL,
|
||
table_type VARCHAR(32) NOT NULL,
|
||
year INT NULL,
|
||
table_name VARCHAR(255) NOT NULL,
|
||
extracted_at DATETIME NOT NULL,
|
||
item_key VARCHAR(255) NOT NULL,
|
||
item_value LONGTEXT NULL,
|
||
source_document_id VARCHAR(64) NULL,
|
||
source_line_no INT NULL,
|
||
source_line_end INT NULL,
|
||
created_at DATETIME NOT NULL,
|
||
FOREIGN KEY (project_id) REFERENCES projects(uuid) ON DELETE CASCADE,
|
||
FOREIGN KEY (source_document_id) REFERENCES kb_documents(id) ON DELETE SET NULL
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
CREATE INDEX idx_el_ext_project ON element_extraction_results(project_id);
|
||
CREATE INDEX idx_el_ext_table ON element_extraction_results(table_type, year, table_name);
|
||
CREATE INDEX idx_el_ext_key ON element_extraction_results(item_key);
|
||
CREATE INDEX idx_el_ext_source_doc ON element_extraction_results(source_document_id);
|
||
|
||
-- 冲突记录
|
||
CREATE TABLE IF NOT EXISTS element_conflicts (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
project_id VARCHAR(32) NOT NULL,
|
||
table_id VARCHAR(64) NULL,
|
||
cell_id VARCHAR(64) NULL,
|
||
item_key VARCHAR(255) NOT NULL,
|
||
old_value LONGTEXT NULL,
|
||
new_value LONGTEXT NULL,
|
||
selected_value LONGTEXT NULL,
|
||
source_document_id VARCHAR(64) NULL,
|
||
source_line_no INT NULL,
|
||
status VARCHAR(16) DEFAULT 'pending',
|
||
created_at DATETIME NOT NULL,
|
||
updated_at DATETIME NOT NULL,
|
||
FOREIGN KEY (project_id) REFERENCES projects(uuid) ON DELETE CASCADE,
|
||
FOREIGN KEY (table_id) REFERENCES element_tables(id) ON DELETE SET NULL,
|
||
FOREIGN KEY (cell_id) REFERENCES element_cells(id) ON DELETE SET NULL,
|
||
FOREIGN KEY (source_document_id) REFERENCES kb_documents(id) ON DELETE SET NULL
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
CREATE INDEX idx_element_conflicts_project ON element_conflicts(project_id);
|
||
CREATE INDEX idx_element_conflicts_status ON element_conflicts(status);
|
||
|
||
-- 文档 markdown 落库
|
||
CREATE TABLE IF NOT EXISTS document_markdowns (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
project_id VARCHAR(32) NOT NULL,
|
||
document_id VARCHAR(64) NOT NULL,
|
||
extracted_filename VARCHAR(255) NULL,
|
||
markdown_content LONGTEXT NOT NULL,
|
||
content_hash VARCHAR(64) NULL,
|
||
created_at DATETIME NOT NULL,
|
||
updated_at DATETIME NOT NULL,
|
||
FOREIGN KEY (project_id) REFERENCES projects(uuid) ON DELETE CASCADE,
|
||
FOREIGN KEY (document_id) REFERENCES kb_documents(id) ON DELETE CASCADE
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
CREATE INDEX idx_markdowns_project_doc ON document_markdowns(project_id, document_id);
|
||
|
||
-- 文档段落切分
|
||
CREATE TABLE IF NOT EXISTS document_chunks (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
project_id VARCHAR(32) NOT NULL,
|
||
document_id VARCHAR(64) NOT NULL,
|
||
markdown_id VARCHAR(64) NULL,
|
||
heading VARCHAR(512) NULL,
|
||
chunk_text LONGTEXT NOT NULL,
|
||
chunk_index INT DEFAULT 0,
|
||
source_line_start INT NULL,
|
||
source_line_end INT NULL,
|
||
vector_id VARCHAR(128) NULL,
|
||
created_at DATETIME NOT NULL,
|
||
FOREIGN KEY (project_id) REFERENCES projects(uuid) ON DELETE CASCADE,
|
||
FOREIGN KEY (document_id) REFERENCES kb_documents(id) ON DELETE CASCADE,
|
||
FOREIGN KEY (markdown_id) REFERENCES document_markdowns(id) ON DELETE CASCADE
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
CREATE INDEX idx_chunks_project_doc ON document_chunks(project_id, document_id);
|
||
CREATE INDEX idx_chunks_heading ON document_chunks(heading(255));
|
||
|
||
-- 独立后台任务:pdf2md 文件处理与 element-agent 要素抽取
|
||
CREATE TABLE IF NOT EXISTS tasks (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
project VARCHAR(64) NOT NULL,
|
||
task_type INT NOT NULL,
|
||
file_id VARCHAR(64) NULL,
|
||
file_path VARCHAR(1024) NULL,
|
||
status INT NOT NULL DEFAULT 1,
|
||
payload_json JSON NULL,
|
||
result_path VARCHAR(1024) NULL,
|
||
error_message LONGTEXT NULL,
|
||
add_time DATETIME NOT NULL,
|
||
finish_time DATETIME NULL
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
CREATE INDEX idx_tasks_status_type_time ON tasks(status, task_type, add_time);
|
||
CREATE INDEX idx_tasks_project ON tasks(project);
|
||
CREATE INDEX idx_tasks_file_id ON tasks(file_id);
|
||
|
||
-- 模板管理
|
||
CREATE TABLE IF NOT EXISTS report_templates (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
name VARCHAR(255) NOT NULL,
|
||
description TEXT NULL,
|
||
is_default TINYINT(1) DEFAULT 0,
|
||
is_active TINYINT(1) DEFAULT 1,
|
||
created_at DATETIME NOT NULL,
|
||
updated_at DATETIME NOT NULL
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
CREATE INDEX idx_templates_default ON report_templates(is_default);
|
||
|
||
CREATE TABLE IF NOT EXISTS report_template_sections (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
template_id VARCHAR(64) NOT NULL,
|
||
section_key VARCHAR(64) NOT NULL,
|
||
section_title VARCHAR(255) NOT NULL,
|
||
section_prompt LONGTEXT NULL,
|
||
section_output_contract LONGTEXT NULL,
|
||
section_order INT DEFAULT 0,
|
||
examples LONGTEXT NULL,
|
||
created_at DATETIME NOT NULL,
|
||
updated_at DATETIME NOT NULL,
|
||
FOREIGN KEY (template_id) REFERENCES report_templates(id) ON DELETE CASCADE
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
CREATE INDEX idx_template_sections_template ON report_template_sections(template_id);
|
||
|
||
-- 报告生成任务(7章分章异步)
|
||
CREATE TABLE IF NOT EXISTS report_generation_jobs (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
project_id VARCHAR(32) NOT NULL,
|
||
template_id VARCHAR(64) NULL,
|
||
status VARCHAR(16) DEFAULT 'pending',
|
||
progress INT DEFAULT 0,
|
||
current_section_key VARCHAR(64) NULL,
|
||
error_message TEXT NULL,
|
||
requested_by VARCHAR(64) NULL,
|
||
options JSON NULL,
|
||
snapshot JSON NULL,
|
||
created_at DATETIME NOT NULL,
|
||
updated_at DATETIME NOT NULL,
|
||
completed_at DATETIME NULL,
|
||
FOREIGN KEY (project_id) REFERENCES projects(uuid) ON DELETE CASCADE,
|
||
FOREIGN KEY (template_id) REFERENCES report_templates(id) ON DELETE SET NULL
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
CREATE INDEX idx_report_jobs_project ON report_generation_jobs(project_id);
|
||
CREATE INDEX idx_report_jobs_status ON report_generation_jobs(status);
|
||
|
||
CREATE TABLE IF NOT EXISTS report_generation_chapters (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
job_id VARCHAR(64) NOT NULL,
|
||
section_key VARCHAR(64) NOT NULL,
|
||
section_title VARCHAR(255) NOT NULL,
|
||
section_order INT DEFAULT 0,
|
||
status VARCHAR(16) DEFAULT 'pending',
|
||
content LONGTEXT NULL,
|
||
prompt_text LONGTEXT NULL,
|
||
evidence_payload JSON NULL,
|
||
validation_payload JSON NULL,
|
||
error_message TEXT NULL,
|
||
created_at DATETIME NOT NULL,
|
||
updated_at DATETIME NOT NULL,
|
||
completed_at DATETIME NULL,
|
||
FOREIGN KEY (job_id) REFERENCES report_generation_jobs(id) ON DELETE CASCADE
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
CREATE INDEX idx_report_chapters_job ON report_generation_chapters(job_id);
|
||
CREATE INDEX idx_report_chapters_status ON report_generation_chapters(status);
|
||
|
||
-- 最小 RBAC
|
||
CREATE TABLE IF NOT EXISTS departments (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
name VARCHAR(255) NOT NULL,
|
||
description TEXT NULL,
|
||
parent_id VARCHAR(64) NULL,
|
||
created_at DATETIME NOT NULL,
|
||
updated_at DATETIME NOT NULL,
|
||
FOREIGN KEY (parent_id) REFERENCES departments(id) ON DELETE SET NULL
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
||
CREATE TABLE IF NOT EXISTS users (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
username VARCHAR(64) NOT NULL UNIQUE,
|
||
password_hash VARCHAR(255) NULL,
|
||
department_id VARCHAR(64) NULL,
|
||
created_at DATETIME NOT NULL,
|
||
updated_at DATETIME NOT NULL,
|
||
FOREIGN KEY (department_id) REFERENCES departments(id) ON DELETE SET NULL
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
CREATE INDEX idx_users_department ON users(department_id);
|
||
|
||
CREATE TABLE IF NOT EXISTS roles (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
name VARCHAR(64) NOT NULL UNIQUE,
|
||
description TEXT NULL,
|
||
created_at DATETIME NOT NULL,
|
||
updated_at DATETIME NOT NULL
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
||
CREATE TABLE IF NOT EXISTS permissions (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
perm_key VARCHAR(128) NOT NULL UNIQUE,
|
||
perm_type VARCHAR(32) NOT NULL,
|
||
description TEXT NULL,
|
||
created_at DATETIME NOT NULL
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
CREATE INDEX idx_permissions_type ON permissions(perm_type);
|
||
|
||
CREATE TABLE IF NOT EXISTS role_permissions (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
role_id VARCHAR(64) NOT NULL,
|
||
permission_id VARCHAR(64) NOT NULL,
|
||
created_at DATETIME NOT NULL,
|
||
FOREIGN KEY (role_id) REFERENCES roles(id) ON DELETE CASCADE,
|
||
FOREIGN KEY (permission_id) REFERENCES permissions(id) ON DELETE CASCADE
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
||
CREATE TABLE IF NOT EXISTS user_roles (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
user_id VARCHAR(64) NOT NULL,
|
||
role_id VARCHAR(64) NOT NULL,
|
||
created_at DATETIME NOT NULL,
|
||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
||
FOREIGN KEY (role_id) REFERENCES roles(id) ON DELETE CASCADE
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
|
||
CREATE TABLE IF NOT EXISTS project_members (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
project_id VARCHAR(32) NOT NULL,
|
||
user_id VARCHAR(64) NOT NULL,
|
||
role VARCHAR(32) DEFAULT 'editor',
|
||
created_at DATETIME NOT NULL,
|
||
FOREIGN KEY (project_id) REFERENCES projects(uuid) ON DELETE CASCADE,
|
||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
CREATE INDEX idx_project_members_project ON project_members(project_id);
|
||
|
||
CREATE TABLE IF NOT EXISTS project_departments (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
project_id VARCHAR(32) NOT NULL,
|
||
department_id VARCHAR(64) NOT NULL,
|
||
created_at DATETIME NOT NULL,
|
||
FOREIGN KEY (project_id) REFERENCES projects(uuid) ON DELETE CASCADE,
|
||
FOREIGN KEY (department_id) REFERENCES departments(id) ON DELETE CASCADE,
|
||
UNIQUE KEY uq_project_department (project_id, department_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
CREATE INDEX idx_project_departments_project ON project_departments(project_id);
|
||
|
||
-- 回填记录:每次要素回填均留痕,支持证据追溯
|
||
CREATE TABLE IF NOT EXISTS fill_records (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
project_id VARCHAR(32) NOT NULL,
|
||
cell_id VARCHAR(64) NULL,
|
||
table_id VARCHAR(64) NULL,
|
||
row_key VARCHAR(255) NOT NULL,
|
||
col_key VARCHAR(255) NULL,
|
||
year INT NULL,
|
||
filled_value LONGTEXT NULL,
|
||
previous_value LONGTEXT NULL,
|
||
source_document_id VARCHAR(64) NULL,
|
||
source_document_name VARCHAR(255) NULL COMMENT '冗余存储文档名,文档删除后仍可追溯',
|
||
source_line_no INT NULL,
|
||
source_line_end INT NULL,
|
||
source_quote TEXT NULL COMMENT '原文摘录片段,作为回填依据',
|
||
confidence FLOAT NULL,
|
||
extraction_batch_id VARCHAR(64) NULL,
|
||
extraction_model VARCHAR(128) NULL COMMENT '使用的 LLM 模型标识',
|
||
fill_type VARCHAR(16) NOT NULL DEFAULT 'auto' COMMENT 'auto=抽取回填, manual=人工编辑, resolve=冲突解决',
|
||
created_at DATETIME NOT NULL,
|
||
FOREIGN KEY (project_id) REFERENCES projects(uuid) ON DELETE CASCADE,
|
||
FOREIGN KEY (cell_id) REFERENCES element_cells(id) ON DELETE SET NULL,
|
||
FOREIGN KEY (table_id) REFERENCES element_tables(id) ON DELETE SET NULL,
|
||
FOREIGN KEY (source_document_id) REFERENCES kb_documents(id) ON DELETE SET NULL
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
CREATE INDEX idx_fill_records_project ON fill_records(project_id);
|
||
CREATE INDEX idx_fill_records_cell ON fill_records(cell_id);
|
||
CREATE INDEX idx_fill_records_batch ON fill_records(extraction_batch_id);
|
||
CREATE INDEX idx_fill_records_source_doc ON fill_records(source_document_id);
|
||
CREATE INDEX idx_fill_records_created ON fill_records(created_at);
|
||
|
||
-- ============================================================
|
||
-- report_section_references:章节参考范文
|
||
-- ============================================================
|
||
CREATE TABLE IF NOT EXISTS report_section_references (
|
||
id VARCHAR(64) PRIMARY KEY,
|
||
template_id VARCHAR(64) NULL COMMENT '关联模板ID(report_templates.id),按模板过滤参考范文',
|
||
source_file VARCHAR(255) NOT NULL COMMENT '来源文件名',
|
||
section_key VARCHAR(64) NOT NULL COMMENT '章节标识,如 1.1、2.1.1',
|
||
section_title VARCHAR(255) NOT NULL COMMENT '章节标题',
|
||
section_order INT DEFAULT 0 COMMENT '章节序号',
|
||
content TEXT NOT NULL COMMENT '该章节的参考范文 Markdown',
|
||
created_at DATETIME NOT NULL,
|
||
updated_at DATETIME NOT NULL
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||
CREATE INDEX idx_ref_source_file ON report_section_references(source_file);
|
||
CREATE INDEX idx_ref_section_key ON report_section_references(section_key);
|
||
CREATE INDEX idx_ref_template_id ON report_section_references(template_id);
|