-- ============================================================ -- 视图:viw_kg_form_neighbors —— ERP 知识图谱·表单一跳子图 (GraphRAG 扩展步) -- 每个表单一行,物化它的 1-hop 邻域:下游单据 / 上游单据 / 引用的实体表。 -- 这是 GraphRAG 检索的「图扩展」步骤:向量召回一张表单卡片后,直接 JOIN 本视图 -- 取出它的 L2(单据流转) + L3(实体引用) 邻居,拼成子图上下文喂给 LLM。 -- -- L2 下游 sDownIds/sDownForms = 本单据可生成的目标单据(viw_kg_edge_flow, src侧, 非自环) -- L2 上游 sUpForms = 可生成本单据的上游单据(edge_flow, tgt侧) -- L3 引用 sRefTables = 本表数据源引用到的实体/主数据表(viw_kg_edge_ref, 去重) -- -- 节点粒度 = 表单 sFormId (1748)。L2 按菜单粒度,L3 按数据源表粒度。 -- 表内 GROUP_CONCAT 邻居列表都很短(下游≤5, 引用≤18),默认 max_len 足够。 -- ============================================================ CREATE OR REPLACE VIEW viw_kg_form_neighbors AS SELECT fm.sFormId, fm.sModuleId, fm.sFormTitle, fm.sDomain, fm.sDataSource, fm.iUpstream, fm.iDownstream, up.names AS sUpForms, -- 上游单据名 dn.names AS sDownForms, -- 下游单据名 dn.ids AS sDownIds, -- 下游单据 moduleId(便于程序继续扩展) rf.tables AS sRefTables -- 引用的实体/主数据表 FROM viw_kg_form fm LEFT JOIN ( SELECT sSrcModuleId AS mid, GROUP_CONCAT(DISTINCT sTgtName ORDER BY sTgtName SEPARATOR ',') AS names, GROUP_CONCAT(DISTINCT sTgtModuleId SEPARATOR ',') AS ids FROM viw_kg_edge_flow WHERE bSelfLoop = 0 GROUP BY sSrcModuleId ) dn ON dn.mid = fm.sModuleId LEFT JOIN ( SELECT sTgtModuleId AS mid, GROUP_CONCAT(DISTINCT sSrcName ORDER BY sSrcName SEPARATOR ',') AS names FROM viw_kg_edge_flow WHERE bSelfLoop = 0 GROUP BY sTgtModuleId ) up ON up.mid = fm.sModuleId LEFT JOIN ( SELECT sSrcTable, GROUP_CONCAT(DISTINCT sTgtTable ORDER BY sTgtTable SEPARATOR ',') AS tables FROM viw_kg_edge_ref GROUP BY sSrcTable ) rf ON rf.sSrcTable = LOWER(fm.sDataSource);