| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- -- 灵越智报 v2.0 图数据库表结构
- -- PostgreSQL 15+
- -- 用于 NER 实体识别结果存储
- -- ============================================
- -- 1. 图节点表(graph_nodes)
- -- ============================================
- -- 存储从文档中提取的命名实体
- CREATE TABLE IF NOT EXISTS graph_nodes (
- id VARCHAR(36) PRIMARY KEY,
- document_id VARCHAR(36) NOT NULL,
- user_id VARCHAR(36), -- 可为空,自动提取时可能没有用户上下文
- name VARCHAR(255) NOT NULL,
- type VARCHAR(50) NOT NULL, -- text/table/image/number/date/ORG/PERSON/LOC/TIME/DEVICE/PROJECT/METHOD等
- value TEXT,
- position JSONB, -- {charStart, charEnd, line}
- parent_id VARCHAR(36),
- level INTEGER DEFAULT 0,
- metadata JSONB DEFAULT '{}',
- create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
- update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
- );
- -- 添加外键约束(如果关联表存在)
- DO $$
- BEGIN
- IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'documents') THEN
- ALTER TABLE graph_nodes DROP CONSTRAINT IF EXISTS fk_graph_nodes_document;
- ALTER TABLE graph_nodes ADD CONSTRAINT fk_graph_nodes_document
- FOREIGN KEY (document_id) REFERENCES documents(id) ON DELETE CASCADE;
- END IF;
-
- IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'users') THEN
- ALTER TABLE graph_nodes DROP CONSTRAINT IF EXISTS fk_graph_nodes_user;
- ALTER TABLE graph_nodes ADD CONSTRAINT fk_graph_nodes_user
- FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL;
- END IF;
- END $$;
- CREATE INDEX IF NOT EXISTS idx_graph_nodes_document_id ON graph_nodes(document_id);
- CREATE INDEX IF NOT EXISTS idx_graph_nodes_user_id ON graph_nodes(user_id);
- CREATE INDEX IF NOT EXISTS idx_graph_nodes_type ON graph_nodes(type);
- CREATE INDEX IF NOT EXISTS idx_graph_nodes_parent_id ON graph_nodes(parent_id);
- CREATE INDEX IF NOT EXISTS idx_graph_nodes_position ON graph_nodes USING GIN(position);
- -- ============================================
- -- 2. 图关系表(graph_relations)
- -- ============================================
- -- 存储实体之间的关系
- CREATE TABLE IF NOT EXISTS graph_relations (
- id VARCHAR(36) PRIMARY KEY,
- from_node_id VARCHAR(36) NOT NULL,
- to_node_id VARCHAR(36) NOT NULL,
- relation_type VARCHAR(50) NOT NULL, -- BELONGS_TO/USES/LOCATED_IN/EXECUTES/MONITORS等
- action_type VARCHAR(50),
- action_config JSONB,
- order_index INTEGER DEFAULT 0,
- condition_expr TEXT,
- metadata JSONB DEFAULT '{}',
- create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
- update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
- CONSTRAINT fk_graph_relations_from_node FOREIGN KEY (from_node_id) REFERENCES graph_nodes(id) ON DELETE CASCADE,
- CONSTRAINT fk_graph_relations_to_node FOREIGN KEY (to_node_id) REFERENCES graph_nodes(id) ON DELETE CASCADE
- );
- CREATE INDEX IF NOT EXISTS idx_graph_relations_from_node ON graph_relations(from_node_id);
- CREATE INDEX IF NOT EXISTS idx_graph_relations_to_node ON graph_relations(to_node_id);
- CREATE INDEX IF NOT EXISTS idx_graph_relations_type ON graph_relations(relation_type);
- -- ============================================
- -- 创建更新时间触发器函数(如果不存在)
- -- ============================================
- CREATE OR REPLACE FUNCTION update_updated_at_column()
- RETURNS TRIGGER AS $$
- BEGIN
- NEW.update_time = CURRENT_TIMESTAMP;
- RETURN NEW;
- END;
- $$ LANGUAGE plpgsql;
- -- 创建触发器
- DROP TRIGGER IF EXISTS update_graph_nodes_updated_at ON graph_nodes;
- CREATE TRIGGER update_graph_nodes_updated_at
- BEFORE UPDATE ON graph_nodes
- FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
- DROP TRIGGER IF EXISTS update_graph_relations_updated_at ON graph_relations;
- CREATE TRIGGER update_graph_relations_updated_at
- BEFORE UPDATE ON graph_relations
- FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
- -- ============================================
- -- 说明
- -- ============================================
- -- 执行此脚本:
- -- psql -U lingyue -d lingyue_zhibao -f graph_tables.sql
- --
- -- 或在服务器上:
- -- psql -U postgres -d lingyue_zhibao -f graph_tables.sql
|