V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Kamitora
V2EX  ›  程序员

可以通过何种技术来分析涉及上千个表级别的的 SQL Query / Procedure 的逻辑关系?

  •  1
     
  •   Kamitora · 2019-11-04 17:27:37 +08:00 · 1264 次点击
    这是一个创建于 1606 天前的主题,其中的信息可能已经有所发展或是发生改变。

    难点

    • 解构太过复杂,耦合度太高——表连接表,查询结果套查询结果,存储过程调用存储过程

    预期的结果

    • 能够获得各个对象间(表,查询结果,存储过程,etc.)的关系
    • 得到的信息能够用来生成类似于 UML 图 的 View

    排除的方向

    • SQL EXPLAIN 语句
    • 一些用于 SQL 调优的应用
    • Python 等脚本,开发已表示放弃治疗

    目前上级觉得可能的方向:NLP,然而本人对这方面没有相关知识,不清楚是否能够实现。

    请各位 V 站大佬赐教

    8 条回复    2019-11-05 11:30:37 +08:00
    sun1991
        1
    sun1991  
       2019-11-04 18:23:05 +08:00 via Android   ❤️ 1
    天哪~能写出包含上千个表的 SQL, 神人呐
    reus
        2
    reus  
       2019-11-04 18:23:49 +08:00   ❤️ 1
    不知道你们用什么数据库,PostgreSQL 支持 explain 输出 json,十分详尽,结合 information schema 之类元数据,完全可以做到。

    explain 不够,那就直接写个插件切入 planner,什么都有了。
    SmiteChow
        3
    SmiteChow  
       2019-11-04 18:26:25 +08:00   ❤️ 1
    sql 本就是结构化的,使用 antlr4 找一个 sql 语法解析器,根据语法树解析识别即可。
    saulshao
        4
    saulshao  
       2019-11-04 18:51:17 +08:00   ❤️ 1
    理论上像 DBEAVER 之类的数据库管理工具可以允许你生成 E-R 图。前提是有建好的外键。
    但是存储过程据我所知没什么好办法。
    ddzzhen
        5
    ddzzhen  
       2019-11-04 18:54:19 +08:00 via Android   ❤️ 1
    参考魔兽世界的数据库,就是这样设计的,简直是一门艺术
    Kamitora
        6
    Kamitora  
    OP
       2019-11-04 20:30:21 +08:00 via iPhone
    补充下,数据库用的是 Oracle,感谢各位的回复!
    liuzhedash
        7
    liuzhedash  
       2019-11-05 09:40:26 +08:00
    @ddzzhen #5
    有详细资料嘛?很有兴趣了解一下
    ddzzhen
        8
    ddzzhen  
       2019-11-05 11:30:37 +08:00 via Android
    @liuzhedash
    https://github.com/cmangos/issues/wiki/Installation-Instructions
    可以部署 3.3.5 感受一下数据库节结构,或者直接看数据库 wiki 头脑风暴
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3109 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 12:43 · PVG 20:43 · LAX 05:43 · JFK 08:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.