| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493 |
- -- =====================================================
- -- 灵越智报 2.0 数据库初始化脚本
- -- PostgreSQL 15+ / pgvector
- -- 设计参考: a_docs/数据库设计文档.md
- -- =====================================================
- CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
- CREATE EXTENSION IF NOT EXISTS vector;
- -- ==================== 用户表 ====================
- CREATE TABLE IF NOT EXISTS users (
- id VARCHAR(36) PRIMARY KEY,
- username VARCHAR(50) NOT NULL UNIQUE,
- email VARCHAR(100) UNIQUE,
- password_hash VARCHAR(255) NOT NULL,
- display_name VARCHAR(100),
- avatar_url VARCHAR(500),
- role VARCHAR(20) DEFAULT 'user',
- preferences JSONB DEFAULT '{}',
- is_active BOOLEAN DEFAULT TRUE,
- last_login_at TIMESTAMP,
- create_by VARCHAR(36),
- create_by_name VARCHAR(100),
- create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- update_by VARCHAR(36),
- update_by_name VARCHAR(100),
- update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
- );
- CREATE INDEX IF NOT EXISTS idx_users_username ON users(username);
- CREATE INDEX IF NOT EXISTS idx_users_email ON users(email);
- -- ==================== 文档表 ====================
- CREATE TABLE IF NOT EXISTS documents (
- id VARCHAR(36) PRIMARY KEY,
- user_id VARCHAR(36) NOT NULL REFERENCES users(id) ON DELETE CASCADE,
- name VARCHAR(255) NOT NULL,
- file_name VARCHAR(500) NOT NULL,
- file_path VARCHAR(500) NOT NULL,
- file_size BIGINT,
- file_type VARCHAR(20) NOT NULL,
- status VARCHAR(20) DEFAULT 'uploaded',
- parsed_text TEXT,
- page_count INT,
- word_count INT,
- entity_count INT DEFAULT 0,
- relation_count INT DEFAULT 0,
- rule_count INT DEFAULT 0,
- metadata JSONB DEFAULT '{}',
- del_flag BOOLEAN DEFAULT FALSE,
- create_by VARCHAR(36),
- create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- update_by VARCHAR(36),
- update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
- );
- CREATE INDEX IF NOT EXISTS idx_documents_user ON documents(user_id);
- CREATE INDEX IF NOT EXISTS idx_documents_type ON documents(file_type);
- CREATE INDEX IF NOT EXISTS idx_documents_status ON documents(status);
- -- ==================== 文档章节结构表 ====================
- CREATE TABLE IF NOT EXISTS document_sections (
- id VARCHAR(36) PRIMARY KEY,
- document_id VARCHAR(36) NOT NULL REFERENCES documents(id) ON DELETE CASCADE,
- parent_id VARCHAR(36) REFERENCES document_sections(id) ON DELETE CASCADE,
- section_index INT NOT NULL,
- level INT NOT NULL DEFAULT 1,
- title VARCHAR(500),
- content TEXT,
- start_page INT,
- end_page INT,
- start_char INT,
- end_char INT,
- section_type VARCHAR(32) DEFAULT 'heading',
- table_data JSONB,
- image_path VARCHAR(500),
- image_caption VARCHAR(500),
- metadata JSONB DEFAULT '{}',
- sort_order INT DEFAULT 0,
- create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
- );
- CREATE INDEX IF NOT EXISTS idx_doc_sections_document ON document_sections(document_id);
- CREATE INDEX IF NOT EXISTS idx_doc_sections_parent ON document_sections(parent_id);
- CREATE INDEX IF NOT EXISTS idx_doc_sections_level ON document_sections(level);
- CREATE INDEX IF NOT EXISTS idx_doc_sections_type ON document_sections(section_type);
- -- ==================== 文档分块表 ====================
- CREATE TABLE IF NOT EXISTS document_chunks (
- id VARCHAR(36) PRIMARY KEY,
- document_id VARCHAR(36) NOT NULL REFERENCES documents(id) ON DELETE CASCADE,
- section_id VARCHAR(36) REFERENCES document_sections(id) ON DELETE SET NULL,
- chunk_index INT NOT NULL,
- content TEXT NOT NULL,
- start_char INT,
- end_char INT,
- page_number INT,
- token_count INT,
- metadata JSONB DEFAULT '{}',
- create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
- );
- CREATE INDEX IF NOT EXISTS idx_doc_chunks_document ON document_chunks(document_id);
- CREATE INDEX IF NOT EXISTS idx_doc_chunks_section ON document_chunks(section_id);
- -- ==================== 解析任务表(parse-service 依赖) ====================
- CREATE TABLE IF NOT EXISTS parse_tasks (
- id VARCHAR(36) PRIMARY KEY,
- document_id VARCHAR(36) NOT NULL REFERENCES documents(id) ON DELETE CASCADE,
- status VARCHAR(20) DEFAULT 'pending',
- progress INT DEFAULT 0,
- current_step VARCHAR(32),
- error_message TEXT,
- options JSONB DEFAULT '{}',
- started_at TIMESTAMP,
- completed_at TIMESTAMP,
- parse_status VARCHAR(20) DEFAULT 'pending',
- parse_progress INT DEFAULT 0,
- rag_status VARCHAR(20) DEFAULT 'pending',
- rag_progress INT DEFAULT 0,
- structured_status VARCHAR(20) DEFAULT 'pending',
- structured_progress INT DEFAULT 0,
- structured_element_count INT,
- structured_image_count INT,
- structured_table_count INT,
- ner_status VARCHAR(20) DEFAULT 'pending',
- ner_progress INT DEFAULT 0,
- ner_task_id VARCHAR(100),
- ner_entity_count INT,
- ner_relation_count INT,
- ner_message TEXT,
- graph_status VARCHAR(20) DEFAULT 'pending',
- graph_progress INT DEFAULT 0,
- create_by VARCHAR(36),
- create_by_name VARCHAR(100),
- create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- update_by VARCHAR(36),
- update_by_name VARCHAR(100),
- update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
- );
- CREATE INDEX IF NOT EXISTS idx_parse_tasks_document ON parse_tasks(document_id);
- -- ==================== 文档结构化元素表(结构化解析 / 前端展示依赖) ====================
- CREATE TABLE IF NOT EXISTS document_elements (
- id VARCHAR(36) PRIMARY KEY,
- document_id VARCHAR(36) NOT NULL REFERENCES documents(id) ON DELETE CASCADE,
- element_index INT,
- element_type VARCHAR(50),
- content TEXT,
- style JSONB DEFAULT '{}',
- runs JSONB DEFAULT '[]',
- image_url VARCHAR(500),
- image_path VARCHAR(500),
- image_alt VARCHAR(500),
- image_width INT,
- image_height INT,
- image_format VARCHAR(20),
- table_index INT,
- table_data JSONB,
- table_row_count INT,
- table_col_count INT,
- table_text TEXT,
- create_by VARCHAR(36),
- create_by_name VARCHAR(100),
- create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- update_by VARCHAR(36),
- update_by_name VARCHAR(100),
- update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
- );
- CREATE INDEX IF NOT EXISTS idx_document_elements_document ON document_elements(document_id);
- -- ==================== 向量嵌入表 ====================
- CREATE TABLE IF NOT EXISTS embeddings (
- id VARCHAR(36) PRIMARY KEY,
- chunk_id VARCHAR(36) NOT NULL REFERENCES document_chunks(id) ON DELETE CASCADE,
- embedding vector(1536),
- model_name VARCHAR(100) DEFAULT 'text-embedding-ada-002',
- model_version VARCHAR(50),
- create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
- );
- CREATE INDEX IF NOT EXISTS idx_embeddings_chunk ON embeddings(chunk_id);
- CREATE INDEX IF NOT EXISTS idx_embeddings_vector ON embeddings USING ivfflat (embedding vector_cosine_ops) WITH (lists = 100);
- -- ==================== 实体类型表 ====================
- CREATE TABLE IF NOT EXISTS entity_types (
- id VARCHAR(36) PRIMARY KEY,
- type_code VARCHAR(50) NOT NULL UNIQUE,
- type_name VARCHAR(100) NOT NULL,
- category VARCHAR(32),
- color VARCHAR(20),
- icon VARCHAR(50),
- patterns JSONB DEFAULT '[]',
- examples JSONB DEFAULT '[]',
- description TEXT,
- is_active BOOLEAN DEFAULT TRUE,
- sort_order INT DEFAULT 0,
- create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
- );
- CREATE INDEX IF NOT EXISTS idx_entity_types_code ON entity_types(type_code);
- -- ==================== 实体表 ====================
- CREATE TABLE IF NOT EXISTS entities (
- id VARCHAR(36) PRIMARY KEY,
- document_id VARCHAR(36) NOT NULL REFERENCES documents(id) ON DELETE CASCADE,
- entity_type VARCHAR(50) NOT NULL,
- entity_text VARCHAR(500) NOT NULL,
- normalized_text VARCHAR(500),
- occurrence_count INT DEFAULT 1,
- confidence FLOAT DEFAULT 1.0,
- business_label VARCHAR(100),
- embedding vector(1536),
- is_confirmed BOOLEAN DEFAULT FALSE,
- is_merged BOOLEAN DEFAULT FALSE,
- merged_to_id VARCHAR(36),
- metadata JSONB DEFAULT '{}',
- create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- UNIQUE(document_id, entity_type, normalized_text)
- );
- CREATE INDEX IF NOT EXISTS idx_entities_document ON entities(document_id);
- CREATE INDEX IF NOT EXISTS idx_entities_type ON entities(entity_type);
- CREATE INDEX IF NOT EXISTS idx_entities_text ON entities(entity_text);
- CREATE INDEX IF NOT EXISTS idx_entities_normalized ON entities(normalized_text);
- CREATE INDEX IF NOT EXISTS idx_entities_label ON entities(business_label);
- -- ==================== 关系类型表 ====================
- CREATE TABLE IF NOT EXISTS relation_types (
- id VARCHAR(36) PRIMARY KEY,
- type_code VARCHAR(50) NOT NULL UNIQUE,
- type_name VARCHAR(100) NOT NULL,
- source_entity_types JSONB DEFAULT '[]',
- target_entity_types JSONB DEFAULT '[]',
- is_symmetric BOOLEAN DEFAULT FALSE,
- description TEXT,
- is_active BOOLEAN DEFAULT TRUE,
- sort_order INT DEFAULT 0,
- create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
- );
- CREATE INDEX IF NOT EXISTS idx_relation_types_code ON relation_types(type_code);
- -- ==================== 实体关系表 ====================
- CREATE TABLE IF NOT EXISTS entity_relations (
- id VARCHAR(36) PRIMARY KEY,
- document_id VARCHAR(36) NOT NULL REFERENCES documents(id) ON DELETE CASCADE,
- source_entity_id VARCHAR(36) NOT NULL REFERENCES entities(id) ON DELETE CASCADE,
- target_entity_id VARCHAR(36) NOT NULL REFERENCES entities(id) ON DELETE CASCADE,
- relation_type VARCHAR(50) NOT NULL,
- relation_text VARCHAR(500),
- confidence FLOAT DEFAULT 1.0,
- extraction_method VARCHAR(32) DEFAULT 'auto',
- evidence_text TEXT,
- is_confirmed BOOLEAN DEFAULT FALSE,
- metadata JSONB DEFAULT '{}',
- create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
- );
- CREATE INDEX IF NOT EXISTS idx_relations_document ON entity_relations(document_id);
- CREATE INDEX IF NOT EXISTS idx_relations_source ON entity_relations(source_entity_id);
- CREATE INDEX IF NOT EXISTS idx_relations_target ON entity_relations(target_entity_id);
- CREATE INDEX IF NOT EXISTS idx_relations_type ON entity_relations(relation_type);
- -- ==================== 规则表 ====================
- CREATE TABLE IF NOT EXISTS rules (
- id VARCHAR(36) PRIMARY KEY,
- document_id VARCHAR(36) REFERENCES documents(id) ON DELETE SET NULL,
- user_id VARCHAR(36) NOT NULL REFERENCES users(id) ON DELETE CASCADE,
- name VARCHAR(200) NOT NULL,
- description TEXT,
- category VARCHAR(50),
- rule_type VARCHAR(32) NOT NULL,
- source VARCHAR(32) DEFAULT 'auto',
- priority INT DEFAULT 0,
- status VARCHAR(20) DEFAULT 'draft',
- embedding vector(1536),
- is_global BOOLEAN DEFAULT FALSE,
- del_flag BOOLEAN DEFAULT FALSE,
- create_by VARCHAR(36),
- create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- update_by VARCHAR(36),
- update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
- );
- CREATE INDEX IF NOT EXISTS idx_rules_document ON rules(document_id);
- CREATE INDEX IF NOT EXISTS idx_rules_user ON rules(user_id);
- CREATE INDEX IF NOT EXISTS idx_rules_type ON rules(rule_type);
- CREATE INDEX IF NOT EXISTS idx_rules_status ON rules(status);
- CREATE INDEX IF NOT EXISTS idx_rules_category ON rules(category);
- -- ==================== 规则条件表 ====================
- CREATE TABLE IF NOT EXISTS rule_conditions (
- id VARCHAR(36) PRIMARY KEY,
- rule_id VARCHAR(36) NOT NULL REFERENCES rules(id) ON DELETE CASCADE,
- condition_index INT NOT NULL,
- condition_type VARCHAR(32) NOT NULL,
- config JSONB NOT NULL,
- logic_operator VARCHAR(10) DEFAULT 'AND',
- sort_order INT DEFAULT 0,
- create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
- );
- CREATE INDEX IF NOT EXISTS idx_rule_conditions_rule ON rule_conditions(rule_id);
- -- ==================== 规则动作表 ====================
- CREATE TABLE IF NOT EXISTS rule_actions (
- id VARCHAR(36) PRIMARY KEY,
- rule_id VARCHAR(36) NOT NULL REFERENCES rules(id) ON DELETE CASCADE,
- action_index INT NOT NULL,
- action_type VARCHAR(32) NOT NULL,
- config JSONB NOT NULL,
- target_field VARCHAR(100),
- sort_order INT DEFAULT 0,
- create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
- );
- CREATE INDEX IF NOT EXISTS idx_rule_actions_rule ON rule_actions(rule_id);
- -- ==================== 生成任务表 ====================
- CREATE TABLE IF NOT EXISTS generations (
- id VARCHAR(36) PRIMARY KEY,
- user_id VARCHAR(36) NOT NULL REFERENCES users(id) ON DELETE CASCADE,
- document_id VARCHAR(36) REFERENCES documents(id) ON DELETE SET NULL,
- template_id VARCHAR(36),
- name VARCHAR(200),
- applied_rules JSONB DEFAULT '[]',
- source_file_map JSONB DEFAULT '{}',
- extracted_data JSONB DEFAULT '{}',
- confirmed_data JSONB DEFAULT '{}',
- output_file_path VARCHAR(500),
- output_file_name VARCHAR(255),
- output_document_id VARCHAR(36),
- progress INTEGER,
- status VARCHAR(20) DEFAULT 'pending',
- error_message TEXT,
- started_at TIMESTAMP,
- reviewed_at TIMESTAMP,
- completed_at TIMESTAMP,
- del_flag BOOLEAN DEFAULT FALSE,
- create_by VARCHAR(36),
- create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- update_by VARCHAR(36),
- update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
- );
- CREATE INDEX IF NOT EXISTS idx_generations_user ON generations(user_id);
- CREATE INDEX IF NOT EXISTS idx_generations_document ON generations(document_id);
- CREATE INDEX IF NOT EXISTS idx_generations_status ON generations(status);
- -- ==================== 生成输出表 ====================
- CREATE TABLE IF NOT EXISTS generation_outputs (
- id VARCHAR(36) PRIMARY KEY,
- generation_id VARCHAR(36) NOT NULL REFERENCES generations(id) ON DELETE CASCADE,
- version INT NOT NULL DEFAULT 1,
- file_path VARCHAR(500) NOT NULL,
- file_name VARCHAR(255) NOT NULL,
- file_size BIGINT,
- file_type VARCHAR(20) DEFAULT 'docx',
- share_token VARCHAR(100),
- share_expires_at TIMESTAMP,
- download_count INT DEFAULT 0,
- is_final BOOLEAN DEFAULT FALSE,
- create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
- );
- CREATE INDEX IF NOT EXISTS idx_gen_outputs_generation ON generation_outputs(generation_id);
- CREATE INDEX IF NOT EXISTS idx_gen_outputs_share ON generation_outputs(share_token);
- -- ==================== 模板/变量/来源文件(兼容现有模板流程) ====================
- CREATE TABLE IF NOT EXISTS templates (
- id VARCHAR(36) PRIMARY KEY,
- user_id VARCHAR(36) NOT NULL,
- name VARCHAR(200),
- description TEXT,
- base_document_id VARCHAR(36),
- status VARCHAR(20) DEFAULT 'draft',
- config JSONB DEFAULT '{}',
- is_public BOOLEAN DEFAULT FALSE,
- use_count INT DEFAULT 0,
- rating DOUBLE PRECISION,
- create_by VARCHAR(36),
- create_by_name VARCHAR(100),
- create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- update_by VARCHAR(36),
- update_by_name VARCHAR(100),
- update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
- );
- CREATE INDEX IF NOT EXISTS idx_templates_user ON templates(user_id);
- CREATE TABLE IF NOT EXISTS variables (
- id VARCHAR(36) PRIMARY KEY,
- template_id VARCHAR(36) NOT NULL REFERENCES templates(id) ON DELETE CASCADE,
- name VARCHAR(100) NOT NULL,
- display_name VARCHAR(200),
- variable_group VARCHAR(100),
- category VARCHAR(50),
- location JSONB,
- example_value TEXT,
- value_type VARCHAR(20),
- source_file_alias VARCHAR(100),
- source_type VARCHAR(30),
- source_config JSONB DEFAULT '{}',
- extract_type VARCHAR(30),
- extract_config JSONB DEFAULT '{}',
- display_order INT DEFAULT 0,
- create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
- );
- CREATE INDEX IF NOT EXISTS idx_variables_template ON variables(template_id);
- CREATE TABLE IF NOT EXISTS source_files (
- id VARCHAR(36) PRIMARY KEY,
- template_id VARCHAR(36) NOT NULL REFERENCES templates(id) ON DELETE CASCADE,
- alias VARCHAR(100) NOT NULL,
- description TEXT,
- file_types JSONB DEFAULT '[]',
- required BOOLEAN DEFAULT TRUE,
- example_document_id VARCHAR(36),
- display_order INT DEFAULT 0,
- create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
- );
- CREATE INDEX IF NOT EXISTS idx_source_files_template ON source_files(template_id);
- -- ==================== 标准实体表 ====================
- CREATE TABLE IF NOT EXISTS standard_entities (
- id VARCHAR(36) PRIMARY KEY,
- entity_type VARCHAR(50) NOT NULL,
- name VARCHAR(500) NOT NULL,
- aliases JSONB DEFAULT '[]',
- attributes JSONB DEFAULT '{}',
- embedding vector(1536),
- occurrence_count INT DEFAULT 1,
- document_count INT DEFAULT 1,
- is_verified BOOLEAN DEFAULT FALSE,
- del_flag BOOLEAN DEFAULT FALSE,
- create_by VARCHAR(36),
- create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- update_by VARCHAR(36),
- update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
- );
- CREATE INDEX IF NOT EXISTS idx_std_entities_type ON standard_entities(entity_type);
- CREATE INDEX IF NOT EXISTS idx_std_entities_name ON standard_entities(name);
- CREATE INDEX IF NOT EXISTS idx_std_entities_vector ON standard_entities USING ivfflat (embedding vector_cosine_ops) WITH (lists = 100);
- -- ==================== 标准关系表 ====================
- CREATE TABLE IF NOT EXISTS standard_relations (
- id VARCHAR(36) PRIMARY KEY,
- source_entity_id VARCHAR(36) NOT NULL REFERENCES standard_entities(id) ON DELETE CASCADE,
- target_entity_id VARCHAR(36) NOT NULL REFERENCES standard_entities(id) ON DELETE CASCADE,
- relation_type VARCHAR(50) NOT NULL,
- attributes JSONB DEFAULT '{}',
- occurrence_count INT DEFAULT 1,
- is_verified BOOLEAN DEFAULT FALSE,
- del_flag BOOLEAN DEFAULT FALSE,
- create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
- update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
- );
- CREATE INDEX IF NOT EXISTS idx_std_relations_source ON standard_relations(source_entity_id);
- CREATE INDEX IF NOT EXISTS idx_std_relations_target ON standard_relations(target_entity_id);
- CREATE INDEX IF NOT EXISTS idx_std_relations_type ON standard_relations(relation_type);
- -- ==================== 实体合并记录表 ====================
- CREATE TABLE IF NOT EXISTS entity_merge_records (
- id VARCHAR(36) PRIMARY KEY,
- source_entity_id VARCHAR(36) NOT NULL REFERENCES entities(id) ON DELETE CASCADE,
- target_entity_id VARCHAR(36) NOT NULL REFERENCES standard_entities(id) ON DELETE CASCADE,
- similarity_score FLOAT,
- merge_type VARCHAR(32) DEFAULT 'auto',
- create_by VARCHAR(36),
- create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
- );
- CREATE INDEX IF NOT EXISTS idx_merge_records_source ON entity_merge_records(source_entity_id);
- CREATE INDEX IF NOT EXISTS idx_merge_records_target ON entity_merge_records(target_entity_id);
- -- ==================== 预置数据 ====================
- INSERT INTO entity_types (id, type_code, type_name, category, color, icon, description, sort_order) VALUES
- ('et-001', 'PERSON', '人名', 'basic', '#1890ff', 'user', '人物姓名,如:张经理、李总', 1),
- ('et-002', 'ORG', '机构', 'basic', '#faad14', 'bank', '组织机构,如:成都检测公司、环保局', 2),
- ('et-003', 'LOC', '地点', 'basic', '#52c41a', 'environment', '地理位置,如:成都市高新区', 3),
- ('et-004', 'DATE', '日期', 'basic', '#722ed1', 'calendar', '日期时间,如:2024年5月15日', 4),
- ('et-005', 'NUMBER', '数值', 'basic', '#13c2c2', 'number', '数值数量,如:50分贝、100万元', 5),
- ('et-006', 'DEVICE', '设备', 'domain', '#eb2f96', 'tool', '设备仪器,如:噪音检测设备、光谱仪', 10),
- ('et-007', 'PROJECT', '项目', 'domain', '#f5222d', 'project', '项目名称,如:环境监测项目', 11),
- ('et-008', 'TERM', '术语', 'domain', '#a0d911', 'book', '专业术语,如:COD、BOD、PM2.5', 12),
- ('et-009', 'STANDARD', '标准', 'domain', '#2f54eb', 'file-text', '标准规范,如:GB 3096-2008', 13),
- ('et-010', 'MATERIAL', '材料', 'domain', '#fa8c16', 'experiment', '材料物质,如:甲醛、苯', 14),
- ('et-011', 'METHOD', '方法', 'domain', '#1890ff', 'api', '检测方法,如:气相色谱法', 15)
- ON CONFLICT (id) DO NOTHING;
- INSERT INTO relation_types (id, type_code, type_name, source_entity_types, target_entity_types, is_symmetric, description) VALUES
- ('rt-001', 'LOCATED_IN', '位于', '["ORG", "PERSON", "PROJECT"]', '["LOC"]', false, '实体位于某地'),
- ('rt-002', 'WORKS_FOR', '任职于', '["PERSON"]', '["ORG"]', false, '人员任职于机构'),
- ('rt-003', 'BELONGS_TO', '属于', '["ORG", "PROJECT"]', '["ORG"]', false, '隶属关系'),
- ('rt-004', 'RESPONSIBLE_FOR', '负责', '["PERSON", "ORG"]', '["PROJECT", "LOC"]', false, '负责某事/某地'),
- ('rt-005', 'USES', '使用', '["ORG", "PERSON", "PROJECT"]', '["DEVICE", "METHOD"]', false, '使用设备/方法'),
- ('rt-006', 'DETECTS', '检测', '["ORG", "PERSON", "DEVICE"]', '["MATERIAL", "TERM"]', false, '检测某物质/指标'),
- ('rt-007', 'CONTAINS', '包含', '["PROJECT", "ORG"]', '["PROJECT", "TERM", "MATERIAL"]', false, '包含关系'),
- ('rt-008', 'COMPLIES_WITH', '符合', '["PROJECT", "ORG", "METHOD"]', '["STANDARD"]', false, '符合某标准'),
- ('rt-009', 'PRODUCES', '产生', '["ORG", "PROJECT", "DEVICE"]', '["NUMBER", "MATERIAL"]', false, '产生数据/物质'),
- ('rt-010', 'COOPERATES', '合作', '["ORG"]', '["ORG"]', true, '机构合作关系'),
- ('rt-011', 'OCCURS_AT', '发生于', '["PROJECT"]', '["DATE"]', false, '发生在某时间')
- ON CONFLICT (id) DO NOTHING;
|