目录
一、前言
二、PowerDesigner概述
2.1 PowerDesigner核心能力
2.1.1 集成多种建模能力
2.1.2 自动生产代码能力
2.1.3 强大的逆向工程能力
2.1.4 可扩展的企业库解决方案
2.2 PowerDesigner常用的几种模型
2.2.1 概念模型
2.2.2 逻辑数据模型
2.2.3 物理模型
2.2.4 面向对象模型
2.2.5 业务流程模型
三、PowerDesigner安装
四、PowerDesigner核心功能使用
4.1 创建数据模型
4.1.1 方式一
4.1.2 方式二
4.2 创建数据表
4.2.1 创建三张表
4.2.2 为三张表设置字段和属性
4.3 设置表的关联关系
4.3.1 设置用户表和角色表外键
4.3.2 修改主外键级联关系
4.4 导出数据库
4.4.1 导出sql脚本
4.4.2 使用sql建表
4.5 反向工程
4.5.1 什么是反向工程
4.5.2 反向工程使用步骤
4.5.3 pd连接外部数据源
4.6 不同数据库模型转换
4.6.1 反向工程导入一个sql文件
4.6.2 基于当前的PDM生成一个新的PDM文件
五、写在文末
对后端开发的同学来说,PowerDesigner这款数据库建模工具应该不陌生,使用PowerDesigner可以帮助开发者快速的完成数据库建模相关的工作,从而助力提升整个软件项目的开发效率。
PowerDesigner是Sybase公司的一款软件,使用它可以方便的对系统进行分析设计,几乎包含了数据库模型设计的全过程。利用PowerDesigner可以制作数据流程图、概念数据模型、物理数据模型、面向对象模型。这几种模型的输出也是一个标准的开发流程中在正式编码之前需要完成的工作。(PowerDesigner在后文简称pd)
PowerDesigner通过数据模型可以生成多种代码,比如
利用PowerDesigner,可以跨语言,跨数据库进行库表的设计、转换、迁移,并支持在线连接mysql进行设计,这些都是非常实用的功能。
具备强大的安全性及版本控制能力,可支持多用户协作设计
在真正开始实用pd之前,有必要对其提供的几种核心的模型做一个全面的了解。
概念数据模型 (CDM) ,CDM 表现数据库的全部逻辑的结构,与任何的软件或数据储藏结构无关。
CDM是适合于系统分析阶段的工具。
逻辑数据模型(LDM),帮助分析信息系统的结构,它也是独立于具体物理数据库的实现。
LDM比概念数据模型(CDM)具体,但不允许定义视图、索引以及其他在物理数据模型(PDM)中处理的细节。 可以把逻辑数据模型作为数据库设计的中间步骤,它在概念数据模型与物理数据模型之间。
物理模型即PDM,用于定义详细定义物理结构和数据查询的数据库设计工具。可以在PDM中使用不同类型的图表,这取决于所要设计的目标数据库的类型。
主要目的是把CDM中建立的现实世界模型生成特定的DBMS脚本,产生数据库中保存信息的储存结构,保证数据在数据库中的完整性和一致性。 PDM是适合于系统设计阶段的工具。
面向对象模型 (OOM) ,这个在Java为开发语言的模型设计中是必备的模型。具体来说,
OOM包括用例图、时序图、及类图.最终产生如下图深色部分的五种结果,即模型仓库(Repository) 、模型报告(Report) 、数据库SQL脚本、用户数据库结构及应用程序代码。
业务流程模型即BPM,BPM 描述了业务的各种不同内在任务和内在流程,用户通过BPM模型可以清晰的看到这些任务和流程的关系、互相影响等;
PowerDesigner BPM包括3种流图
1) 处理层次流图(Process hierarchydiagram):以层次化的方式来识别系统的功能。
2) 业务处理流图(Business process diagram):用于分析一个/组流程的具体实现机制。
3) 处理服务流图(Process service diagram):以业务服务的方式来表述业务流程图。
PowerDesigner目前主流的版本是16.5,关于安装的细节就不再详述了,网上安装的教程很多,有兴趣的同学可以查阅一下。
pd发展到今天功能已经非常多了,就算是一个江湖老手,也不见得对里面涉及到的所有功能全部涉及,其实来说,pd在日常的开发中,主要用于数据库设计阶段的数据库建模使用,因此,掌握其核心的数据库建模其实足够应对大部分场景了,接下来将围绕数据库建模相关的技术点做一个深入的使用说明。
在设计表之前,需要有一个模型来承载,因此首先需要创建一个数据模型;
通过 文件 -> 新建模型 ->新建物理模型;
点击文件下方的图标创建
输入模型,点击ok之后, 就在当前的项目空间下创建了一个模型;
有了数据模型之后,接下来就是表结构的设计了,为了方便后续的操作说明,我们结合一个相对真实的场景,假设有3张表需要设计,用户表,角色表,用户角色关联表,这三张表代表着在实际业务场景中用户和角色之间的关系,三张表分别为,user,role,和role_user;
选中右侧悬浮菜单中的表图标,然后在工作区点击一下,就会出现一个表,这里需要三张表,点击3次;
双击当前表,将进入到下面的表设计区域,里面的菜单栏很多,目前主要关注跟表的字段相关的菜单即可;
进入Columns菜单,进行字段的设计,每个字段的属性设置主要包括下面这几个;
字段设计完成后,点击应用,确定即可,此时用户表就设计好了,如果后续还想增加或修改表的字段,可以双击表再次进入到下面的这个界面进行操作;
按照上面同样的方式将 role和role_user表也设计出来
在当下的互联网项目数据库设计中,业内是在逐渐淡化主外键这个概念,因为外键的存在会让后续的业务在程序处理时带来诸多的麻烦,尤其是涉及到数据迁移的时候那是相当痛苦的事情,但是PD建模阶段的一个重要目的就是可以通过数据表呈现出表背后的业务关联关系,而这个关联关系在PD表中就需要通过主外键来反映;
拿上面这三张表来说,了解业务的同学可能一样看出3者之间的关系,但是换做其他的业务呢?怎么能快速看出来呢,下面来设置一下三张表的主外键关系吧。
点击右侧的设置主外键的那个图标,设置两个表之间的关系时,只需将连线连接两张表即可,注意箭头的方向;
一般来说,当你设置连线的时候,pd会自动去找两者之间的主外键关系,从上面连线后的效果来看,连完之后,分别在user表的用户ID和角色表的ID后面,出现了一个fk的标识,说明这个字段同时是外键;
如何确认两者之间真的是建立了外键关系呢?可以双击中间那根连线,切换到Preview这一栏,在里面可以看到有一行sql语句;
sql语句如下,不难看出,这个sql正是在建表的时候来规定两表之间的级联关系的;
alter table user add constraint FK_Reference_3 foreign key (id)
references role_user (id) on delete restrict on update restrict;
默认情况下,当两张表通过主外键连接之后,在生成数据库脚本时,两者之间通过一个sql规定了两表之间的关系,但是默认情况下这种方式在生成数据库脚本时属于强相关的关系,正如上面所说,真实的开发中,我们不希望两表存在太强的绑定关系从而给后续的维护带来麻烦,这就需要手动更改这种级联关系,怎么办呢?按照下面的步骤操作即可;
点击连线箭头,进入下面的界面,勾选none这个单选框,然后点击确定;
做完这一步还不够,还需要在最终生成的数据库脚本中去掉设置引用关系的那些sql;
在使用PD进行外键关系的设置时,有时候在线连接之后,外键字段并不准或者说你想更换外键字段,这时候可以切换到Joins那一栏进行如下设置;
设计完数据表之后,接下来就是要导出数据库可以执行的sql脚本,在pd中也是很简单的事情,按照下面的步骤操作即可;
点击:数据库 -> 生成数据库
设置导出的sql的位置,名称
在Preview这一栏里面,显示了原始的建表sql;
导出完成后,在本地的数据目录下就能看到原始的sql脚本文件;
在navicat中导入上面的这个sql,
导入成功之后,可以看到下面的几张表,同时通过navicat的逆向关系图谱,可以看到三张表之间的主外键关系;
逆向工程(又称逆向技术),是一种产品设计技术再现过程,即对一项目标产品进行逆向分析及研究,从而演绎并得出该产品的处理流程、组织结构、功能特性及技术规格等设计要素,以制作出功能相近,但又不完全一样的产品。
选择:文件 -> 反向工程 -> 数据库,这里要做的事情是,通过使用反向工程对外部的sql脚本进行修改设计,然后重新导出;
进入到下面的界面,填写一个名称
点击确定之后,这里提供了两种方式,一种是基于现有的数据库脚本,另一种是直接配置连接外部数据源;
这里选择使用本地的sql脚本,选择上面导出的sql文件;
点击确定之后,就可以看到之前的数据表模型就导入进来了,就可以基于这个模型继续进行设计使用了;
有时候为了减少sql脚本的加载麻烦,可以直接连接外部的数据源,尤其是某些不允许导出原始sql文件的情况下,这是一种很实用的方式,具体操作步骤如下;
点击: 数据库 -> Configure Connections ...
点击下面这个按钮设置数据源连接;
点击确定后,选择系统数据源
点击下一页后,选择Mysql ODBC 这个(这个有坑,后面会谈到),如果你要连接的是其他数据源,选择对应的驱动即可;
最后来到下面的界面,设置你的数据源连接的配置信息,点击测试连接,成功之后就ok了;
再次点击反向工程,到了下面这一步,选择实用数据源;
点击确定之后,来到下面的界面,根据需要,勾选你要导的表;
点击确定,可以看到已经将外部的数据表导入进来了,这种方式相当于是直接连接了数据库进行导入,如果表比较多的话,这个过程可能会有点慢;
在真实的项目中,可能你会面临下面这样的场景,一开始你的项目使用的是mysql,但是后续突然要求你的项目需要能支持其他数据源,比如oracle,或postgresql等,这时你面临的第一个问题就是要改数据库,这可是一件头疼的事情,尤其是对于那些数据表非常多的项目,先不说数据迁移,就单是重新定义表结构都是不小的工作量了。但是如果你此时想到使用pd来进行转换,恭喜你,接下来这将会为你省下不少的时间,具体怎么做呢?来看下面具体的操作步骤。
完整的操作流程如下
仍然以前面导出到本地的数据库文件为例
可以选择使用本地的脚本,或者直接连接数据库的方式
导入后的效果
这里根据你的实际情况选择要新的数据库类型,比如这里我选择的是postgresql;
确定之后,左侧的菜单中就可以看到一个新的PD文件,同时可以看到右侧的数据表中字段 "用户ID"的类型也从mysq的int转为pg中的in4类型了
导出sql文件
点击确定之后,检查导出的sql文件,然后导入到pg数据库即可
至此通过上面的流程就完成了从mysql到pg的模型数据库的转换。
数据库设计是完整的项目开发周期中非常重要的一环,尽管越来越多的互联网产品在淡化数据库在快速迭代的产品中的地位,但仍然具有非常重要的意义,因此仍有必要深入掌握PowerDesigner 的数据建模的使用,本篇到此结束,感谢观看。