利用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.技能播放的逻辑关系 技能播放概述: 当完成对技能输入与检测之后,程序就该对输入在缓存器中的按键操作与程序读取的技能表信息进行匹配,根据匹配结果播放相应的连招技能. 技能播放原理: 按键缓存器中内容 ...
随机推荐
- 使用Spring表达式语言进行装备--SpEL
本文主要想记录最近的两个使用spring框架实现通过配置文件装备Bean,以及使用SpEL装备Bean. 1.使用配置文件装备Bean: 当我们写某些Bean的时候是希望这个Bean当中的属性是可以通 ...
- Java执行jar总结
1.命令集 1)nohup 用途:不挂断地运行命令. 语法:nohup Command [ Arg … ] [ & ] 无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 ...
- 解决mysql表不能查询修改删除等操作并出现卡死
问题现象1:进程wait卡住 测试环境mysql出现了一个怪表:select查询表卡死,alter修改表卡死,甚至我不想要这个表了,delete.truncate.drop表都卡死卡主了...... ...
- 自动化运维工具Ansible介绍
一个由 Python 编写的强大的配置管理解决方案.尽管市面上已经有很多可供选择的配置管理解决方案,但他们各有优劣,而 ansible 的特点就在于它的简洁. 让 ansible 在主流的配置管理系统 ...
- 如何重写Java中的equals方法
Java中,只有8种基本类型不是对象,例如:4种整形类型(byte, short, int,long),2种浮点类型(flout, double),boolean, char不是对象,其他的所有类型, ...
- kubernetes之ingress及ingress controller
什么是ingress Ingress是授权入站连接到达集群服务的规则集合. 从外部流量调度到nodeprot上的service 从service调度到ingress-controller ingres ...
- MySQL5.7.23解压版安装教程
每次找安装教程太麻烦,因此给自己备份一下步骤,方便以后查看.解压版下载地址https://dev.mysql.com/downloads/mysql/,详细图解如下: 1.根据自己需求,选择适合自己的 ...
- Connection to Oracle failed. [66000][12505] Listener refused the connection with the following error: ORA-12505, TNS:listener does not currently know of SID given in connect descriptor .
我安装了Oracle数据库,默认的数据库用户名是system,密码口令是安装过程中你自己设置的.可以先使用命令框,输入 sqlplus system; 然后再输入密码即可. 然后我的数据库连接工具使用 ...
- 简单管理员权限与几个常用的PHP 常用函数,in_array(),explode(),implode(),join(),str_replace()
先把今天要用的几个函数罗列出来: //explode()转换成数组,implode()转化成字符串 explode("分隔符",需要被分割的字符串或变量) $priv=" ...
- Linux-Centos 虚拟机安装
Centos安装方法 第一步:一般只有第一项和第三项有用 其余的没啥卵用 第二步:提示检查镜像完整性,这里我们不要检查 选 skip 继续(之前尝试选择OK,最后安装失败了,也不想找原因了) 第三步 ...