supplement_tables.sql 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. -- 灵越智报 v2.0 补充表结构
  2. -- PostgreSQL 15+
  3. -- 根据产品设计方案补充的表结构
  4. -- 注意: ID 使用 VARCHAR(36) 以兼容 MyBatis-Plus 的 ASSIGN_UUID 策略
  5. -- 注意: graph_nodes 和 graph_relations 表已在 graph_tables.sql 中定义,此处不再重复
  6. -- ============================================
  7. -- 1. 规则表(rules)
  8. -- ============================================
  9. CREATE TABLE IF NOT EXISTS rules (
  10. id VARCHAR(36) PRIMARY KEY,
  11. user_id VARCHAR(36) NOT NULL REFERENCES users(id) ON DELETE CASCADE,
  12. name VARCHAR(255) NOT NULL,
  13. description TEXT,
  14. entry_node_id VARCHAR(36) REFERENCES graph_nodes(id) ON DELETE SET NULL,
  15. exit_node_id VARCHAR(36) REFERENCES graph_nodes(id) ON DELETE SET NULL,
  16. rule_chain JSONB NOT NULL DEFAULT '[]', -- 规则链(节点ID序列)
  17. status VARCHAR(20) DEFAULT 'active', -- active/inactive
  18. metadata JSONB DEFAULT '{}',
  19. create_by VARCHAR(36),
  20. create_by_name VARCHAR(100),
  21. create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  22. update_by VARCHAR(36),
  23. update_by_name VARCHAR(100),
  24. update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
  25. );
  26. CREATE INDEX IF NOT EXISTS idx_rules_user_id ON rules(user_id);
  27. CREATE INDEX IF NOT EXISTS idx_rules_entry_node ON rules(entry_node_id);
  28. CREATE INDEX IF NOT EXISTS idx_rules_exit_node ON rules(exit_node_id);
  29. CREATE INDEX IF NOT EXISTS idx_rules_status ON rules(status);
  30. -- ============================================
  31. -- 4. 数据源表(data_sources)
  32. -- ============================================
  33. CREATE TABLE IF NOT EXISTS data_sources (
  34. id VARCHAR(36) PRIMARY KEY,
  35. user_id VARCHAR(36) NOT NULL REFERENCES users(id) ON DELETE CASCADE,
  36. document_id VARCHAR(36) REFERENCES documents(id) ON DELETE SET NULL,
  37. name VARCHAR(255) NOT NULL,
  38. type VARCHAR(50) NOT NULL, -- table/text/image
  39. source_type VARCHAR(50) NOT NULL, -- file/manual/rule_result
  40. node_ids TEXT[] DEFAULT '{}', -- 关联的节点ID数组(VARCHAR数组)
  41. config JSONB DEFAULT '{}', -- 数据源配置
  42. metadata JSONB DEFAULT '{}',
  43. create_by VARCHAR(36),
  44. create_by_name VARCHAR(100),
  45. create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  46. update_by VARCHAR(36),
  47. update_by_name VARCHAR(100),
  48. update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
  49. );
  50. CREATE INDEX IF NOT EXISTS idx_data_sources_user_id ON data_sources(user_id);
  51. CREATE INDEX IF NOT EXISTS idx_data_sources_document_id ON data_sources(document_id);
  52. CREATE INDEX IF NOT EXISTS idx_data_sources_type ON data_sources(type);
  53. -- ============================================
  54. -- 5. 模板表(templates)
  55. -- ============================================
  56. CREATE TABLE IF NOT EXISTS templates (
  57. id VARCHAR(36) PRIMARY KEY,
  58. user_id VARCHAR(36) NOT NULL REFERENCES users(id) ON DELETE CASCADE,
  59. name VARCHAR(255) NOT NULL,
  60. content TEXT NOT NULL, -- 模板内容(带占位符)
  61. placeholder_mapping JSONB DEFAULT '{}', -- 占位符到数据源的映射
  62. source_template_id VARCHAR(36) REFERENCES templates(id) ON DELETE SET NULL, -- 复制来源
  63. status VARCHAR(20) DEFAULT 'active', -- active/inactive
  64. metadata JSONB DEFAULT '{}',
  65. create_by VARCHAR(36),
  66. create_by_name VARCHAR(100),
  67. create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  68. update_by VARCHAR(36),
  69. update_by_name VARCHAR(100),
  70. update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
  71. );
  72. CREATE INDEX IF NOT EXISTS idx_templates_user_id ON templates(user_id);
  73. CREATE INDEX IF NOT EXISTS idx_templates_source_template ON templates(source_template_id);
  74. CREATE INDEX IF NOT EXISTS idx_templates_status ON templates(status);
  75. -- ============================================
  76. -- 6. 文本存储路径表(text_storage)
  77. -- ============================================
  78. CREATE TABLE IF NOT EXISTS text_storage (
  79. id VARCHAR(36) PRIMARY KEY,
  80. document_id VARCHAR(36) NOT NULL REFERENCES documents(id) ON DELETE CASCADE,
  81. file_path VARCHAR(500) NOT NULL, -- TXT文件路径
  82. file_size BIGINT,
  83. checksum VARCHAR(64), -- 文件校验和
  84. create_by VARCHAR(36),
  85. create_by_name VARCHAR(100),
  86. create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  87. update_by VARCHAR(36),
  88. update_by_name VARCHAR(100),
  89. update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
  90. );
  91. CREATE INDEX IF NOT EXISTS idx_text_storage_document_id ON text_storage(document_id);
  92. CREATE UNIQUE INDEX IF NOT EXISTS idx_text_storage_document_unique ON text_storage(document_id);
  93. -- ============================================
  94. -- 7. 向量存储表(vector_embeddings)
  95. -- ============================================
  96. -- 注意:需要先安装pgvector扩展
  97. -- CREATE EXTENSION IF NOT EXISTS vector;
  98. CREATE TABLE IF NOT EXISTS vector_embeddings (
  99. id VARCHAR(36) PRIMARY KEY,
  100. document_id VARCHAR(36) NOT NULL REFERENCES documents(id) ON DELETE CASCADE,
  101. chunk_text TEXT NOT NULL,
  102. chunk_index INTEGER NOT NULL, -- 分块索引
  103. embedding vector(768), -- 向量(需要pgvector扩展,如果未安装可先注释)
  104. file_name VARCHAR(255),
  105. file_hash VARCHAR(64), -- MD5哈希
  106. metadata JSONB DEFAULT '{}',
  107. create_by VARCHAR(36),
  108. create_by_name VARCHAR(100),
  109. create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  110. update_by VARCHAR(36),
  111. update_by_name VARCHAR(100),
  112. update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
  113. );
  114. CREATE INDEX IF NOT EXISTS idx_vector_embeddings_document_id ON vector_embeddings(document_id);
  115. CREATE INDEX IF NOT EXISTS idx_vector_embeddings_file_hash ON vector_embeddings(file_hash);
  116. -- 向量相似度搜索索引(需要pgvector扩展)
  117. -- CREATE INDEX IF NOT EXISTS idx_vector_embeddings_embedding ON vector_embeddings USING ivfflat (embedding vector_cosine_ops);
  118. -- ============================================
  119. -- 创建更新时间触发器
  120. -- ============================================
  121. -- 注意: graph_nodes 和 graph_relations 的触发器已在 graph_tables.sql 中定义
  122. DROP TRIGGER IF EXISTS update_rules_update_time ON rules;
  123. CREATE TRIGGER update_rules_update_time BEFORE UPDATE ON rules
  124. FOR EACH ROW EXECUTE FUNCTION update_update_time_column();
  125. DROP TRIGGER IF EXISTS update_data_sources_update_time ON data_sources;
  126. CREATE TRIGGER update_data_sources_update_time BEFORE UPDATE ON data_sources
  127. FOR EACH ROW EXECUTE FUNCTION update_update_time_column();
  128. DROP TRIGGER IF EXISTS update_templates_update_time ON templates;
  129. CREATE TRIGGER update_templates_update_time BEFORE UPDATE ON templates
  130. FOR EACH ROW EXECUTE FUNCTION update_update_time_column();
  131. DROP TRIGGER IF EXISTS update_text_storage_update_time ON text_storage;
  132. CREATE TRIGGER update_text_storage_update_time BEFORE UPDATE ON text_storage
  133. FOR EACH ROW EXECUTE FUNCTION update_update_time_column();
  134. DROP TRIGGER IF EXISTS update_vector_embeddings_update_time ON vector_embeddings;
  135. CREATE TRIGGER update_vector_embeddings_update_time BEFORE UPDATE ON vector_embeddings
  136. FOR EACH ROW EXECUTE FUNCTION update_update_time_column();
  137. -- ============================================
  138. -- 安装pgvector扩展(可选,用于向量检索)
  139. -- ============================================
  140. -- 如果需要使用pgvector,请执行:
  141. -- CREATE EXTENSION IF NOT EXISTS vector;
  142. --
  143. -- 安装方法:
  144. -- 1. 下载pgvector: https://github.com/pgvector/pgvector
  145. -- 2. 编译安装
  146. -- 3. 在数据库中执行: CREATE EXTENSION vector;