说明:在很多情况下,需要将复杂且有些规律的代码整理成逻辑片段,这个时候就需要画图,很多时候图比代码更加直观

Graphviz是一个比较好的绘图工具,可以通过简单的代码绘制出复杂的逻辑图,且其代码就像平时说话的语言一样直观

案例中是我在开发中整理的一个复杂的sql中的表依赖关系:

代码:

digraph sbjob{
graph [fontname=Arial, nodesep=0.125, ranksep=0.25];
node [fontcolor=black, fontname=Arial, height=0, shape=box, style=filled, width=0];
edge [fontname=Arial, len=3.5];

INT_STG_OCS_TB_OCS_ACCOUNTEXT_SUBSCRIBER_SD [label="INT_STG_OCS_\nTB_OCS_ACCOUNTEXT_\nSUBSCRIBER_SD"]

STG_OCS_TB_OCS_ACCOUNTEXT_SUBSCRIBER [label="STG_OCS_TB_\nOCS_ACCOUNTEXT\n_SUBSCRIBER"]

LOAD_DATE_PARAMETERS_TBL [label="LOAD_DATE_\nPARAMETERS_TBL"]

SUBSCRIBER_AUDIT_TB [label="SUBSCRIBER_\nAUDIT_TB"]

STG_INF_CONTACT_PERSON [label="STG_INF_CONTACT\n_PERSON"]

INT_STG_INF_CONTACT_PERSON [label="INT_STG_INF_\nCONTACT_PERSON"]

STG_INF_CUSTOMER_ALL [label="STG_INF_\nCUSTOMER_ALL"]

INT_STG_INF_CUSTOMER_ALL [label="INT_STG_INF_\nCUSTOMER_ALL"]

STG_OCS_ACCOUNTS_SUBCRIBER [label="STG_OCS_ACCOUNTS\n_SUBCRIBER"]

INT_STG_OCS_ACCOUNTS_SUBCRIBER [label="INT_STG_OCS_\nACCOUNTS_SUBCRIBER"]

STG_CRM_PERSON_SUBSCRIBER [label="STG_CRM_PERSON_\nSUBSCRIBER"]

INT_STG_CRM_PERSON_SUBSCRIBER [label="INT_STG_CRM_PERSON_\nSUBSCRIBER"]

STG_T_S_OCS_TSNATIVENUMHEAD [label="STG_T_S_OCS_\nTSNATIVENUMHEAD"]

INT_STG_T_S_OCS_TSNATIVENUMHEAD [label="INT_STG_T_S_OCS_\nTSNATIVENUMHEAD"]

SUBSCRIBER_DIMENSION_STG [label="SUBSCRIBER_\nDIMENSION_STG"]

INT_STG_CRM_SUBSCRIBER_SD [label="INT_STG_CRM_\nSUBSCRIBER_SD"]

INT_STG_CBE_SUBSCRIBER_SD [label="INT_STG_CBE_\nSUBSCRIBER_SD"]

IMEI_MOBILEBRAND [label="IMEI_MOBILEBRAND"]

SUBSCRIBER_TEMP_TB [label="SUBSCRIBER_\nTEMP_TB"]

SUBSCRIBER_DIMENSION [label="SUBSCRIBER_\nDIMENSION"]

SUBSCRIBER_REGION_TB [label="SUBSCRIBER_\nREGION_TB"]

SUBSCRIBER_TEMP_TB [label="SUBSCRIBER_TEMP_TB"]

AUDIT_TB [label="AUDIT_TB"]

//////////////////////////////////////////////////////

INT_STG_OCS_TB_OCS_ACCOUNTEXT_SUBSCRIBER_SD ->
{STG_OCS_TB_OCS_ACCOUNTEXT_SUBSCRIBER,
LOAD_DATE_PARAMETERS_TBL}[color="#0d1976", fontcolor="#0d1976", label="1"]
//---

SUBSCRIBER_AUDIT_TB ->
AUDIT_TB[color="#BBFFFF", fontcolor="#BBFFFF", label="2"]
//---
STG_INF_CONTACT_PERSON ->
{AUDIT_TB,
LOAD_DATE_PARAMETERS_TBL,
INT_STG_INF_CONTACT_PERSON}[color="#FFFF00", fontcolor="#FFFF00", label="3"]
//---
STG_INF_CUSTOMER_ALL ->
{AUDIT_TB,
LOAD_DATE_PARAMETERS_TBL,
INT_STG_INF_CUSTOMER_ALL}[color="#EE0000", fontcolor="#EE0000", label="4"]
//---
STG_OCS_ACCOUNTS_SUBCRIBER ->
{SUBSCRIBER_AUDIT_TB,
LOAD_DATE_PARAMETERS_TBL,
INT_STG_OCS_ACCOUNTS_SUBCRIBER}[color="#9ACD32", fontcolor="#9ACD32", label="5"]

STG_CRM_PERSON_SUBSCRIBER ->
{SUBSCRIBER_AUDIT_TB,
LOAD_DATE_PARAMETERS_TBL,
INT_STG_CRM_PERSON_SUBSCRIBER}[color="#98F5FF", fontcolor="#98F5FF", label="6"]
//---
STG_T_S_OCS_TSNATIVENUMHEAD ->
{AUDIT_TB,
LOAD_DATE_PARAMETERS_TBL,
INT_STG_T_S_OCS_TSNATIVENUMHEAD}[color="#7D26CD", fontcolor="#7D26CD", label="7"]
//---
SUBSCRIBER_DIMENSION_STG ->
{INT_STG_CRM_SUBSCRIBER_SD,
INT_STG_CRM_PERSON_SUBSCRIBER,
INT_STG_CBE_SUBSCRIBER_SD,
INT_STG_OCS_TB_OCS_ACCOUNTEXT_SUBSCRIBER_SD,
INT_STG_OCS_ACCOUNTS_SUBCRIBER,
IMEI_MOBILEBRAND,
SUBSCRIBER_AUDIT_TB,
INT_STG_INF_CONTACT_PERSON,
INT_STG_INF_CUSTOMER_ALL}[color="#838B83", fontcolor="#838B83", label="8"]
//---
SUBSCRIBER_TEMP_TB ->
{AUDIT_TB,
SUBSCRIBER_DIMENSION,
SUBSCRIBER_DIMENSION_STG}[color="#B8860B", fontcolor="#B8860B", label="9"]

SUBSCRIBER_REGION_TB ->
{INT_STG_T_S_OCS_TSNATIVENUMHEAD,
SUBSCRIBER_DIMENSION_STG,
SUBSCRIBER_TEMP_TB,
SUBSCRIBER_DIMENSION_STG,
SUBSCRIBER_TEMP_TB} [color="#B3EE3A", fontcolor="#B3EE3A", label="10"]

// update
SUBSCRIBER_AUDIT_TB ->
{SUBSCRIBER_TEMP_TB,
SUBSCRIBER_DIMENSION_STG,
SUBSCRIBER_AUDIT_TB}[color="#B22222", fontcolor="#B22222", label="11"]

// update
SUBSCRIBER_DIMENSION ->
SUBSCRIBER_TEMP_TB[color="#030303", fontcolor="#030303", label="12"]

SUBSCRIBER_DIMENSION ->
{SUBSCRIBER_DIMENSION_STG,
SUBSCRIBER_TEMP_TB,
SUBSCRIBER_REGION_TB}[color="#32CD32", fontcolor="#32CD32", label="13"]

// update
SUBSCRIBER_DIMENSION ->
{SUBSCRIBER_DIMENSION_STG,
SUBSCRIBER_TEMP_TB}[color="#8B0000", fontcolor="#8B0000", label="14"]

}

保存为.dot文件

在cmd下执行命令(前提是你安装了Graphviz并配置了环境变量,这个请自行百度):

neato C:\Users\meij\Desktop\graph3.gv -Tpng -o sb_job_tab.png

解释:neato是生成某一种图形样式,Graphviz提供了很多样式

也可以生成.img文件

大家安装客户端后可以按照上面的代码和步骤就可以实现生成图片,结果因为图片太大不在这里展示。

参考网址:http://www.graphviz.org/

http://m.blog.csdn.net/article/details?id=49472949

利用Graphviz绘制逻辑关系依赖图的更多相关文章

  1. 利用python+graphviz绘制数据结构关系图和指定目录下头文件包含关系图

    作为一名linux系统下的C语言开发,日常工作中经常遇到两个问题: 一是分析代码过程中,各种数据结构互相关联,只通过代码很难理清系统中所有结构体的整体架构,影响代码消化的效率; 二是多层头文件嵌套包含 ...

  2. Graphviz绘制百家争鸣图

    最近读易中天<先秦诸子百家>,一边读一边在纸上画出逻辑关系,图越来越复杂,趁中午休息索性就把图用Graphviz重新绘制了一下;由于Graphviz主动承担了绘图排版的职责,我只需要关注内 ...

  3. 利用PowerDesigner绘制PDM生成SQL Server数据库

    PowerDesigner是个很强大的建模工具,可以利用它绘制各种图形,本文利用该工具绘制PDM,进而生成SQL Server数据库. 比如绘制一个简单的学生选课.教师授课管理系统的PDM: pk表示 ...

  4. 用CodeViz绘制函数调用关系图(call graph)

    CodeViz是<Understanding The Linux Virtual Memory Manager>(at Amazon,下载地址在页尾)的作者 Mel Gorman 写的一款 ...

  5. 利用JFreeChart绘制股票K线图完整解决方案

    http://blog.sina.com.cn/s/blog_4ad042e50100q7d9.html 利用JFreeChart绘制股票K线图完整解决方案 (2011-04-30 13:27:17) ...

  6. 【Python 16】分形树绘制4.0(利用递归函数绘制分形树fractal tree)

     1.案例描述 树干为80,分叉角度为20,树枝长度小于5则停止.树枝长小于30,可以当作树叶了,树叶部分为绿色,其余为树干部分设为棕色. 2.案例分析 由于分形树具有对称性,自相似性,所以我们可以用 ...

  7. Python学习教程(learning Python)--3.3.3 Python逻辑关系表达式

    在if分支判断语句里的条件判断语句不一定就是一个表达式,可以是多个(布尔)表达式的组合关系运算,这里如何使用更多的关系表达式构建出一个比较复杂的条件判断呢?这里需要再了解一下逻辑运算的基础知识.逻辑关 ...

  8. C#利用GDI+绘制旋转文字等效果

    C#中利用GDI+绘制旋转文本的文字,网上有很多资料,基本都使用矩阵旋转的方式实现.但基本都只提及按点旋转,若要实现在矩形范围内旋转文本,资料较少.经过琢磨,可以将矩形内旋转转化为按点旋转,不过需要经 ...

  9. 《Genesis-3D开源游戏引擎--横版格斗游戏制作教程06:技能播放的逻辑关系》

    6.技能播放的逻辑关系 技能播放概述: 当完成对技能输入与检测之后,程序就该对输入在缓存器中的按键操作与程序读取的技能表信息进行匹配,根据匹配结果播放相应的连招技能. 技能播放原理: 按键缓存器中内容 ...

随机推荐

  1. Qt QWidget

    原文: https://www.cnblogs.com/muyuhu/archive/2012/10/26/2741184.html QWidget 类代表一般的窗口,其他窗口类都是从 QWidget ...

  2. mysql如何直接查出从1开始递增的数

    比如我的一个sql语句 SELECT nick_name FROM t_user ; 得到的结果是:张三李四王五 而现在我想要的结果是:1 张三2 李四3 王五 应该如何写sql呀? 答案就是用 @r ...

  3. 帝国cms 不能正常显示最新文章

    后台能正常刷新,但前台就是不能正常显示, 把网站从c盘换到d盘,好了,原来是权限的问题

  4. luogu1117 优秀的拆分 (后缀数组)

    考虑分别计算每个位置作为AA的末尾或者BB的开头的个数 最后乘一乘就是答案 据说是套路的计算AA的方法: 首先枚举A的长度L,然后每L个字符当做一个关键点,这样的话,一个AA包含且只包含相邻两个关键点 ...

  5. Elastalert安装及使用

    如果在windows 64平台报错:执行 pip install python-magic-bin==0.4.14修复https://stackoverflow.com/questions/18374 ...

  6. MySQL防止库存超卖方法总结

    订单超卖问题是涉及到库存项目的重中之重,这里我总结一下常用的方法 1.简单处理[update & select 合并](乐观锁) beginTranse(开启事务)$num = 1; try{ ...

  7. C# 操作SQL Server 公共库

    基本够用,存一下,以后找起来方便 public abstract class DB { //数据库连接字符串(config来配置) protected static string connection ...

  8. hotplug/mdev机制

    目录 hotplug/mdev机制 框架 kobject_uevent_env mdev_main make_device mdev.conf 配置文件学习 更改属性 @:创建设备节点之后执行命令 $ ...

  9. crontab 误删恢复

    某台服务器某账号的 crontab 任务被清空,原因不明.同时,该服务器上的 crontab 任务备份未开启.故思考如何恢复 crontab 任务. 经查,CentOS 系统的 crontab 任务的 ...

  10. EF CodeFirst系列(4)--- 数据注释属性

    EFCodeFirst模式使用的是约定大于配置的编程模式,这种模式利用默认约定根据我们的领域模型建立概念模型.然后我们也可以通过配置领域类来覆盖默认约定. 覆盖默认约定主要用两种手段: 1.数据注释属 ...