You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MS SQL Server无约束数据库的半自动化关系文档生成方案咨询

半自动化梳理无约束MS-SQL遗留库表间关系的思路

1. 基于官方TSQL解析库批量分析SQL对象

不用从零写控制台程序,直接用Microsoft.SqlServer.TransactSql.ScriptDom(微软官方TSQL语法解析库)批量处理存储过程、视图、函数的定义:

  • 遍历sys.procedures获取所有存储过程的定义文本,用解析库拆解SQL语句,定位INNER JOIN/LEFT JOIN子句、跨表等值匹配的WHERE条件,提取关联字段对(比如Order.CustomerID = Customer.ID)。
  • 统计每个字段对的出现频率,高频出现的组合基本就是实际业务中依赖的关联关系,同时标记出现场景(比如仅在查询中用,还是存在更新/插入时的关联校验)。
  • 把解析结果导出为结构化表格(如CSV),后续人工核对补全特殊场景。

2. 基于数据特征的关联推断

针对部分未在SQL代码中体现的关联(比如前端硬编码的关联逻辑),可以通过数据分布判断:

  • 统计字段的重复率与值域匹配度:比如表Order的CustomerID字段,若其值的集合是表Customer的ID字段值域的子集,且重复率远高于Customer.ID,则Order大概率是关联中的多方。
  • 用SQL脚本批量验证跨表字段的匹配关系:
    SELECT 
      COUNT(DISTINCT o.CustomerID) AS DistinctOrder_CustID,
      COUNT(DISTINCT c.ID) AS DistinctCustomer_ID,
      COUNT(CASE WHEN c.ID IS NULL THEN 1 END) AS OrphanOrderCount
    FROM [Order] o
    LEFT JOIN Customer c ON o.CustomerID = c.ID
    
    若OrphanOrderCount占比极低,且DistinctOrder_CustID远小于DistinctCustomer_ID,即可确认两者的关联关系。

3. 利用系统视图缩小分析范围

先筛选出关联多张表的数据库对象,再聚焦分析,减少无效工作量:

  • 查询sys.sql_expression_dependencies获取依赖多表的存储过程、视图:
    SELECT 
      OBJECT_NAME(referencing_id) AS ObjectName,
      STRING_AGG(OBJECT_NAME(referenced_id), ', ') AS ReferencedTables
    FROM sys.sql_expression_dependencies
    WHERE referenced_id IN (SELECT object_id FROM sys.tables)
    GROUP BY referencing_id
    HAVING COUNT(DISTINCT referenced_id) >= 2
    
  • 对这些对象,用sp_helptext批量导出定义,结合SQL Search工具快速定位关联逻辑,比全量遍历更高效。

4. 导入建模工具做增量验证

将初步梳理的关系导入数据库建模工具(如PowerDesigner、ER/Studio),利用工具功能补全修正:

  • 导入表结构后,手动添加识别出的关联,用工具的“数据验证”功能检查关联字段的数据类型匹配度、是否存在大量孤儿记录。
  • 生成ER图直观查看关联逻辑,再反向核对SQL代码中的业务场景,逐步修正不合理的关联推断。

内容的提问来源于stack exchange,提问作者Brian Link

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:05:42