-- 灵越智报 v2.0 补充表结构 -- PostgreSQL 15+ -- 根据产品设计方案补充的表结构 -- 注意: ID 使用 VARCHAR(36) 以兼容 MyBatis-Plus 的 ASSIGN_UUID 策略 -- 注意: graph_nodes 和 graph_relations 表已在 graph_tables.sql 中定义,此处不再重复 -- ============================================ -- 1. 规则表(rules) -- ============================================ CREATE TABLE IF NOT EXISTS rules ( id VARCHAR(36) PRIMARY KEY, user_id VARCHAR(36) NOT NULL REFERENCES users(id) ON DELETE CASCADE, name VARCHAR(255) NOT NULL, description TEXT, entry_node_id VARCHAR(36) REFERENCES graph_nodes(id) ON DELETE SET NULL, exit_node_id VARCHAR(36) REFERENCES graph_nodes(id) ON DELETE SET NULL, rule_chain JSONB NOT NULL DEFAULT '[]', -- 规则链(节点ID序列) status VARCHAR(20) DEFAULT 'active', -- active/inactive metadata JSONB DEFAULT '{}', create_by VARCHAR(36), create_by_name VARCHAR(100), create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, update_by VARCHAR(36), update_by_name VARCHAR(100), update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ); CREATE INDEX IF NOT EXISTS idx_rules_user_id ON rules(user_id); CREATE INDEX IF NOT EXISTS idx_rules_entry_node ON rules(entry_node_id); CREATE INDEX IF NOT EXISTS idx_rules_exit_node ON rules(exit_node_id); CREATE INDEX IF NOT EXISTS idx_rules_status ON rules(status); -- ============================================ -- 4. 数据源表(data_sources) -- ============================================ CREATE TABLE IF NOT EXISTS data_sources ( 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, name VARCHAR(255) NOT NULL, type VARCHAR(50) NOT NULL, -- table/text/image source_type VARCHAR(50) NOT NULL, -- file/manual/rule_result node_ids TEXT[] DEFAULT '{}', -- 关联的节点ID数组(VARCHAR数组) config JSONB DEFAULT '{}', -- 数据源配置 metadata JSONB DEFAULT '{}', create_by VARCHAR(36), create_by_name VARCHAR(100), create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, update_by VARCHAR(36), update_by_name VARCHAR(100), update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ); CREATE INDEX IF NOT EXISTS idx_data_sources_user_id ON data_sources(user_id); CREATE INDEX IF NOT EXISTS idx_data_sources_document_id ON data_sources(document_id); CREATE INDEX IF NOT EXISTS idx_data_sources_type ON data_sources(type); -- ============================================ -- 5. 模板表(templates) -- ============================================ CREATE TABLE IF NOT EXISTS templates ( id VARCHAR(36) PRIMARY KEY, user_id VARCHAR(36) NOT NULL REFERENCES users(id) ON DELETE CASCADE, name VARCHAR(255) NOT NULL, content TEXT NOT NULL, -- 模板内容(带占位符) placeholder_mapping JSONB DEFAULT '{}', -- 占位符到数据源的映射 source_template_id VARCHAR(36) REFERENCES templates(id) ON DELETE SET NULL, -- 复制来源 status VARCHAR(20) DEFAULT 'active', -- active/inactive metadata JSONB DEFAULT '{}', create_by VARCHAR(36), create_by_name VARCHAR(100), create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, update_by VARCHAR(36), update_by_name VARCHAR(100), update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ); CREATE INDEX IF NOT EXISTS idx_templates_user_id ON templates(user_id); CREATE INDEX IF NOT EXISTS idx_templates_source_template ON templates(source_template_id); CREATE INDEX IF NOT EXISTS idx_templates_status ON templates(status); -- ============================================ -- 6. 文本存储路径表(text_storage) -- ============================================ CREATE TABLE IF NOT EXISTS text_storage ( id VARCHAR(36) PRIMARY KEY, document_id VARCHAR(36) NOT NULL REFERENCES documents(id) ON DELETE CASCADE, file_path VARCHAR(500) NOT NULL, -- TXT文件路径 file_size BIGINT, checksum VARCHAR(64), -- 文件校验和 create_by VARCHAR(36), create_by_name VARCHAR(100), create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, update_by VARCHAR(36), update_by_name VARCHAR(100), update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ); CREATE INDEX IF NOT EXISTS idx_text_storage_document_id ON text_storage(document_id); CREATE UNIQUE INDEX IF NOT EXISTS idx_text_storage_document_unique ON text_storage(document_id); -- ============================================ -- 注意: vector_embeddings 表已在 rag_tables_compatible.sql 中定义 -- 请勿在此重复定义,以避免表结构冲突 -- ============================================ -- ============================================ -- 创建更新时间触发器 -- ============================================ -- 注意: graph_nodes 和 graph_relations 的触发器已在 graph_tables.sql 中定义 -- 注意: vector_embeddings 的触发器已在 rag_tables_compatible.sql 中定义 DROP TRIGGER IF EXISTS update_rules_update_time ON rules; CREATE TRIGGER update_rules_update_time BEFORE UPDATE ON rules FOR EACH ROW EXECUTE FUNCTION update_update_time_column(); DROP TRIGGER IF EXISTS update_data_sources_update_time ON data_sources; CREATE TRIGGER update_data_sources_update_time BEFORE UPDATE ON data_sources FOR EACH ROW EXECUTE FUNCTION update_update_time_column(); DROP TRIGGER IF EXISTS update_templates_update_time ON templates; CREATE TRIGGER update_templates_update_time BEFORE UPDATE ON templates FOR EACH ROW EXECUTE FUNCTION update_update_time_column(); DROP TRIGGER IF EXISTS update_text_storage_update_time ON text_storage; CREATE TRIGGER update_text_storage_update_time BEFORE UPDATE ON text_storage FOR EACH ROW EXECUTE FUNCTION update_update_time_column();