利用Graphviz绘制逻辑关系依赖图
说明:在很多情况下,需要将复杂且有些规律的代码整理成逻辑片段,这个时候就需要画图,很多时候图比代码更加直观
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绘制逻辑关系依赖图的更多相关文章
- 利用python+graphviz绘制数据结构关系图和指定目录下头文件包含关系图
作为一名linux系统下的C语言开发,日常工作中经常遇到两个问题: 一是分析代码过程中,各种数据结构互相关联,只通过代码很难理清系统中所有结构体的整体架构,影响代码消化的效率; 二是多层头文件嵌套包含 ...
- Graphviz绘制百家争鸣图
最近读易中天<先秦诸子百家>,一边读一边在纸上画出逻辑关系,图越来越复杂,趁中午休息索性就把图用Graphviz重新绘制了一下;由于Graphviz主动承担了绘图排版的职责,我只需要关注内 ...
- 利用PowerDesigner绘制PDM生成SQL Server数据库
PowerDesigner是个很强大的建模工具,可以利用它绘制各种图形,本文利用该工具绘制PDM,进而生成SQL Server数据库. 比如绘制一个简单的学生选课.教师授课管理系统的PDM: pk表示 ...
- 用CodeViz绘制函数调用关系图(call graph)
CodeViz是<Understanding The Linux Virtual Memory Manager>(at Amazon,下载地址在页尾)的作者 Mel Gorman 写的一款 ...
- 利用JFreeChart绘制股票K线图完整解决方案
http://blog.sina.com.cn/s/blog_4ad042e50100q7d9.html 利用JFreeChart绘制股票K线图完整解决方案 (2011-04-30 13:27:17) ...
- 【Python 16】分形树绘制4.0(利用递归函数绘制分形树fractal tree)
1.案例描述 树干为80,分叉角度为20,树枝长度小于5则停止.树枝长小于30,可以当作树叶了,树叶部分为绿色,其余为树干部分设为棕色. 2.案例分析 由于分形树具有对称性,自相似性,所以我们可以用 ...
- Python学习教程(learning Python)--3.3.3 Python逻辑关系表达式
在if分支判断语句里的条件判断语句不一定就是一个表达式,可以是多个(布尔)表达式的组合关系运算,这里如何使用更多的关系表达式构建出一个比较复杂的条件判断呢?这里需要再了解一下逻辑运算的基础知识.逻辑关 ...
- C#利用GDI+绘制旋转文字等效果
C#中利用GDI+绘制旋转文本的文字,网上有很多资料,基本都使用矩阵旋转的方式实现.但基本都只提及按点旋转,若要实现在矩形范围内旋转文本,资料较少.经过琢磨,可以将矩形内旋转转化为按点旋转,不过需要经 ...
- 《Genesis-3D开源游戏引擎--横版格斗游戏制作教程06:技能播放的逻辑关系》
6.技能播放的逻辑关系 技能播放概述: 当完成对技能输入与检测之后,程序就该对输入在缓存器中的按键操作与程序读取的技能表信息进行匹配,根据匹配结果播放相应的连招技能. 技能播放原理: 按键缓存器中内容 ...
随机推荐
- Python——入门 | 常用python实现
一.冒泡排序 list = [56,12,1,8,354,10,100,34,56,7,23,456,234,-58] def MP_paixu(): for i in range(len(list) ...
- kubernetes 将pod运行在某些特定的节点上,给节点打标签
给节点打上标签: kubectl label node <node_name> GPU=true #打上标签 GPU=true 在创建pod的yaml文件时: 添加 nodeSel ...
- 解决 MariaDB无密码就可以登录的问题
问题: 困扰了很久的问题,, 使用apt-get来安装mysql,安装好之后发现安装的是 MariaDB,如下,无需密码既可以登录了.即使使用mysqladmin设置好密码,用密码登录可以,不用密码登 ...
- 第六十三天 js基础
一.JS三个组成部分 ES:ECMAScript语法 DOM:document对象模型=>通过js代码与页面文档(出现在body中的所有可视化标签)进行交互 BOM:borwser对象模型=&g ...
- iPhone各种机型尺寸、屏幕分辨率
px与pt区别 字体大小的设置单位,常用的有2种:px.pt.这两个有什么区别呢? 先搞清基本概念: px就是表示pixel,像素,是屏幕上显示数据的最基本的点: pt就是point,是印刷行业常用单 ...
- opencv-python下简单KNN分类识别
KNN是数据挖掘中一种简单算法常用来分类,此次用来聚类实现对4种花的简单识别. 环境:python2.7+opencv3.0+windows10 原理:在使用KNN函数提取出4种花特征点以后,对需要辨 ...
- python6-深浅拷贝 元组类型 字典类型 集合类型
一,深浅拷贝 (一) 值拷贝:应用场景最多 案例:1.ls = [1, 'abc', [10]] ls1 = ls # :ls1直接将ls中存放的地址拿过来# : ls内部的值发 ...
- Stacking:Catboost、Xgboost、LightGBM、Adaboost、RF etc
python风控评分卡建模和风控常识(博客主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005214003&am ...
- Python统计词频的几种方式
语料 text = """My fellow citizens: I stand here today humbled by the task before us, gr ...
- C++回顾day03---<异常>
一:传统错误处理机制(C中通过函数返回来处理) int CalcRes(int n, int m, char ch, int& res) { ; switch (ch) { case '+': ...