PowerDesigner 数据库建模使用详解

目录

一、前言

二、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概述

PowerDesigner是Sybase公司的一款软件,使用它可以方便的对系统进行分析设计,几乎包含了数据库模型设计的全过程。利用PowerDesigner可以制作数据流程图、概念数据模型、物理数据模型、面向对象模型。这几种模型的输出也是一个标准的开发流程中在正式编码之前需要完成的工作。(PowerDesigner在后文简称pd)

2.1 PowerDesigner核心能力

2.1.1 集成多种建模能力

  • 数据模型(E/R, Merise) 实体关联关系图 ;
  • 业务模型(BPMN, BPEL, ebXML) ;
  • 应用模型(UML) ;

 2.1.2 自动生产代码能力

PowerDesigner通过数据模型可以生成多种代码,比如

  • SQL脚本 (支持多于50种数据库系统,比如mysql,pg,oracle等),可以直接导入到数据库使用; 
  • Java ,通过面向对象建模,可以快速输出基本的Java对象实体类文件,简单修改即可使用;
  • .NET 等...

 2.1.3 强大的逆向工程能力

利用PowerDesigner,可以跨语言,跨数据库进行库表的设计、转换、迁移,并支持在线连接mysql进行设计,这些都是非常实用的功能。

2.1.4 可扩展的企业库解决方案

具备强大的安全性及版本控制能力,可支持多用户协作设计

2.2 PowerDesigner常用的几种模型

在真正开始实用pd之前,有必要对其提供的几种核心的模型做一个全面的了解。

2.2.1 概念模型

概念数据模型 (CDM) ,CDM 表现数据库的全部逻辑的结构,与任何的软件或数据储藏结构无关。

  • 一个概念模型经常包括在物理数据库中仍然不实现的数据对象; 
  • 它给运行计划或业务活动的数据一个正式表现方式;
  • 概念数据模型是最终用户对数据存储的看法,反映了用户的综合性信息需求; 
  • 不考虑物理实现细节,只考虑实体之间的关系;

CDM是适合于系统分析阶段的工具。 

2.2.2 逻辑数据模型

逻辑数据模型(LDM),帮助分析信息系统的结构,它也是独立于具体物理数据库的实现。 

 LDM比概念数据模型(CDM)具体,但不允许定义视图、索引以及其他在物理数据模型(PDM)中处理的细节。 可以把逻辑数据模型作为数据库设计的中间步骤,它在概念数据模型与物理数据模型之间。

2.2.3 物理模型 

物理模型即PDM,用于定义详细定义物理结构和数据查询的数据库设计工具。可以在PDM中使用不同类型的图表,这取决于所要设计的目标数据库的类型。 

主要目的是把CDM中建立的现实世界模型生成特定的DBMS脚本,产生数据库中保存信息的储存结构,保证数据在数据库中的完整性和一致性。 PDM是适合于系统设计阶段的工具。 

2.2.4 面向对象模型

面向对象模型 (OOM) ,这个在Java为开发语言的模型设计中是必备的模型。具体来说,

  • 一个OOM包含一系列包,类,接口 , 和他们的关系;
  • 这些对象一起形成所有的 ( 或部份) 一个软件系统的逻辑的设计视图的类结构;
  • 一个OOM本质上是软件系统的一个静态的概念模型;

OOM包括用例图、时序图、及类图.最终产生如下图深色部分的五种结果,即模型仓库(Repository) 、模型报告(Report) 、数据库SQL脚本、用户数据库结构及应用程序代码。

2.2.5 业务流程模型

业务流程模型即BPM,BPM 描述了业务的各种不同内在任务和内在流程,用户通过BPM模型可以清晰的看到这些任务和流程的关系、互相影响等;

  • BPM是从业务人员的角度对业务逻辑和规则进行详细描述的概念模型,并使用流程图表示从一个或多个起点到终点间的处理过程、流程、消息和协作协议;
  • 通过BPM可以描述系统的行为和需求,可以使用图形表示对象的概念组织结构,然后生成所需要的文档;
  • 作为一个概念层次的模块,BPM适用于应用系统的系统分析阶段,完成系统需求分析和逻辑设计;

PowerDesigner BPM包括3种流图

1)  处理层次流图(Process hierarchydiagram):以层次化的方式来识别系统的功能。

2)  业务处理流图(Business process diagram):用于分析一个/组流程的具体实现机制。

3)  处理服务流图(Process service diagram):以业务服务的方式来表述业务流程图。

三、PowerDesigner安装

PowerDesigner目前主流的版本是16.5,关于安装的细节就不再详述了,网上安装的教程很多,有兴趣的同学可以查阅一下。

四、PowerDesigner核心功能使用

pd发展到今天功能已经非常多了,就算是一个江湖老手,也不见得对里面涉及到的所有功能全部涉及,其实来说,pd在日常的开发中,主要用于数据库设计阶段的数据库建模使用,因此,掌握其核心的数据库建模其实足够应对大部分场景了,接下来将围绕数据库建模相关的技术点做一个深入的使用说明。

4.1 创建数据模型

在设计表之前,需要有一个模型来承载,因此首先需要创建一个数据模型;

4.1.1 方式一

通过 文件 -> 新建模型 ->新建物理模型;

 

4.1.2 方式二

点击文件下方的图标创建

 

输入模型,点击ok之后, 就在当前的项目空间下创建了一个模型;

4.2 创建数据表

有了数据模型之后,接下来就是表结构的设计了,为了方便后续的操作说明,我们结合一个相对真实的场景,假设有3张表需要设计,用户表,角色表,用户角色关联表,这三张表代表着在实际业务场景中用户和角色之间的关系,三张表分别为,user,role,和role_user;

4.2.1 创建三张表

选中右侧悬浮菜单中的表图标,然后在工作区点击一下,就会出现一个表,这里需要三张表,点击3次;

4.2.2 为三张表设置字段和属性

双击当前表,将进入到下面的表设计区域,里面的菜单栏很多,目前主要关注跟表的字段相关的菜单即可;

进入Columns菜单,进行字段的设计,每个字段的属性设置主要包括下面这几个;

字段设计完成后,点击应用,确定即可,此时用户表就设计好了,如果后续还想增加或修改表的字段,可以双击表再次进入到下面的这个界面进行操作;

按照上面同样的方式将 role和role_user表也设计出来

4.3 设置表的关联关系

在当下的互联网项目数据库设计中,业内是在逐渐淡化主外键这个概念,因为外键的存在会让后续的业务在程序处理时带来诸多的麻烦,尤其是涉及到数据迁移的时候那是相当痛苦的事情,但是PD建模阶段的一个重要目的就是可以通过数据表呈现出表背后的业务关联关系,而这个关联关系在PD表中就需要通过主外键来反映;

拿上面这三张表来说,了解业务的同学可能一样看出3者之间的关系,但是换做其他的业务呢?怎么能快速看出来呢,下面来设置一下三张表的主外键关系吧。

4.3.1 设置用户表和角色表外键

点击右侧的设置主外键的那个图标,设置两个表之间的关系时,只需将连线连接两张表即可,注意箭头的方向;

 一般来说,当你设置连线的时候,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;

4.3.2 修改主外键级联关系

默认情况下,当两张表通过主外键连接之后,在生成数据库脚本时,两者之间通过一个sql规定了两表之间的关系,但是默认情况下这种方式在生成数据库脚本时属于强相关的关系,正如上面所说,真实的开发中,我们不希望两表存在太强的绑定关系从而给后续的维护带来麻烦,这就需要手动更改这种级联关系,怎么办呢?按照下面的步骤操作即可;

点击连线箭头,进入下面的界面,勾选none这个单选框,然后点击确定;

 做完这一步还不够,还需要在最终生成的数据库脚本中去掉设置引用关系的那些sql;

在使用PD进行外键关系的设置时,有时候在线连接之后,外键字段并不准或者说你想更换外键字段,这时候可以切换到Joins那一栏进行如下设置;

4.4 导出数据库

设计完数据表之后,接下来就是要导出数据库可以执行的sql脚本,在pd中也是很简单的事情,按照下面的步骤操作即可;

4.4.1 导出sql脚本

点击:数据库 -> 生成数据库

设置导出的sql的位置,名称

 在Preview这一栏里面,显示了原始的建表sql;

导出完成后,在本地的数据目录下就能看到原始的sql脚本文件;

4.4.2 使用sql建表

在navicat中导入上面的这个sql,

导入成功之后,可以看到下面的几张表,同时通过navicat的逆向关系图谱,可以看到三张表之间的主外键关系;

4.5 反向工程

4.5.1 什么是反向工程

逆向工程(又称逆向技术),是一种产品设计技术再现过程,即对一项目标产品进行逆向分析及研究,从而演绎并得出该产品的处理流程、组织结构、功能特性及技术规格等设计要素,以制作出功能相近,但又不完全一样的产品。

4.5.2 反向工程使用步骤

选择:文件 -> 反向工程 -> 数据库,这里要做的事情是,通过使用反向工程对外部的sql脚本进行修改设计,然后重新导出;

进入到下面的界面,填写一个名称

点击确定之后,这里提供了两种方式,一种是基于现有的数据库脚本,另一种是直接配置连接外部数据源;

这里选择使用本地的sql脚本,选择上面导出的sql文件;

点击确定之后,就可以看到之前的数据表模型就导入进来了,就可以基于这个模型继续进行设计使用了;

4.5.3 pd连接外部数据源

有时候为了减少sql脚本的加载麻烦,可以直接连接外部的数据源,尤其是某些不允许导出原始sql文件的情况下,这是一种很实用的方式,具体操作步骤如下;

点击: 数据库 -> Configure Connections ...

点击下面这个按钮设置数据源连接;

点击确定后,选择系统数据源

点击下一页后,选择Mysql ODBC 这个(这个有坑,后面会谈到),如果你要连接的是其他数据源,选择对应的驱动即可;

最后来到下面的界面,设置你的数据源连接的配置信息,点击测试连接,成功之后就ok了;

再次点击反向工程,到了下面这一步,选择实用数据源;

 点击确定之后,来到下面的界面,根据需要,勾选你要导的表;

 

点击确定,可以看到已经将外部的数据表导入进来了,这种方式相当于是直接连接了数据库进行导入,如果表比较多的话,这个过程可能会有点慢;

4.6 不同数据库模型转换

在真实的项目中,可能你会面临下面这样的场景,一开始你的项目使用的是mysql,但是后续突然要求你的项目需要能支持其他数据源,比如oracle,或postgresql等,这时你面临的第一个问题就是要改数据库,这可是一件头疼的事情,尤其是对于那些数据表非常多的项目,先不说数据迁移,就单是重新定义表结构都是不小的工作量了。但是如果你此时想到使用pd来进行转换,恭喜你,接下来这将会为你省下不少的时间,具体怎么做呢?来看下面具体的操作步骤。

完整的操作流程如下

4.6.1 反向工程导入一个sql文件

仍然以前面导出到本地的数据库文件为例

 

可以选择使用本地的脚本,或者直接连接数据库的方式

 导入后的效果

 

4.6.2 基于当前的PDM生成一个新的PDM文件

 这里根据你的实际情况选择要新的数据库类型,比如这里我选择的是postgresql;

 

确定之后,左侧的菜单中就可以看到一个新的PD文件,同时可以看到右侧的数据表中字段 "用户ID"的类型也从mysq的int转为pg中的in4类型了

导出sql文件

 

 

点击确定之后,检查导出的sql文件,然后导入到pg数据库即可

 

至此通过上面的流程就完成了从mysql到pg的模型数据库的转换。

五、写在文末

数据库设计是完整的项目开发周期中非常重要的一环,尽管越来越多的互联网产品在淡化数据库在快速迭代的产品中的地位,但仍然具有非常重要的意义,因此仍有必要深入掌握PowerDesigner 的数据建模的使用,本篇到此结束,感谢观看。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1317.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习AJAX

AJAX 🚀 HTTP请求报文响应报文 🚄 express框架🚬 express基本使用 🚒 原生AJAX🚬 GET.HTML🚬 POST.HTML🚬 JSON.HTML🚬 nodemon工具可以帮助重启服务🚬 IE缓存问题&#…

ELK 企业级日志分析系统(四)

ELK 一、部署Kafka集群二、Kafka的命令行操作三、Kafka架构深入四、FilebeatKafkaELK部署 一、部署Kafka集群 1.下载安装包 官方下载地址:http://kafka.apache.org/downloads.html cd /opt wget https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.7.1/kafka_2…

铰接式车辆的横向动力学仿真提供车辆模型研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

【关于C++中----特殊类设计和单例模式】

文章目录 一、设计一个类,不能被拷贝1.1C98的实现方法及其弊端1.2 C11的实现方法 二、设计一个类,只能在堆上创建对象三、设计一个类,只能在栈上创建对象四、设计一个类,不能被继承五、设计一个类,只能创建一个对象(单…

Leecode316: 去除重复字母

下面这里使用有序map——TreeMap来实现Map接口,但是相对顺序是不能改变的!这样会使得后面的跑到前面去,所以有问题 最简单的思想肯定是暴力思想,就是从前往后寻找,一旦遇到存在的情况就. 重点在于明确两点&#xff1a…

【Docker】了解和使用Docker

文章底部有投票活动,赶快参与进来吧😃 相信大家在开发过程中都听说过 Docker 一词,至于 Docker 在开发中扮演的角色,估计好多人都说不上来,今天就让阿Q带大家一起揭开它神秘的面纱! 文章目录 什么是容器&a…

dolphinscheduler伪分布式安装

1、上传安装包 2、安装 #解压 重命名 [rootdatacollection conf]# cd /opt/modules/ [rootdatacollection modules]# tar -zxf apache-dolphinscheduler-2.0.6-bin.tar.gz -C /opt/installs/ [rootdatacollection modules]# cd ../installs/ [rootdatacollection installs]# m…

【广州华锐互动】智慧交通3D可视化交互平台

智慧交通3D可视化交互平台由广州华锐互动开发,是一种基于现代科技的智能交通管理系统,它能够实现对车站内部人员和车辆的实时监控和管理。该平台采用了先进的三维可视化技术,将车站内部的结构和设备以立体、直观的方式呈现在用户面前&#xf…

LangChain大型语言模型(LLM)应用开发(四):QA over Documents

LangChain是一个基于大语言模型(如ChatGPT)用于构建端到端语言模型应用的 Python 框架。它提供了一套工具、组件和接口,可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。LangChain 可以轻松管理与语言模型的交互&#x…

springboot整合ehcache和redis实现多级缓存实战案例

一、概述 在实际的工作中,我们通常会使用多级缓存机制,将本地缓存和分布式缓存结合起来,从而提高系统性能和响应速度。本文通过springboot整合ehcache和redis实现多级缓存案例实战,从源码角度分析下多级缓存实现原理。 二、实战案…

赛效:如何将PDF文件免费转换成Word文档

1:在网页上打开wdashi,默认进入PDF转Word页面,点击中间的上传文件图标。 2:将PDF文件添加上去之后,点击右下角的“开始转换”。 3:稍等片刻转换成功后,点击绿色的“立即下载”按钮,将…

做私域选个微还是企微,哪个有优势?

做私域,你必须要有一个,引流新客户及留存老客户的地方。 于是,就有很多人讨论或者纠结:做私域,选择个人微信?还是企业微信? 让我们一起来看看个人微信和企业微信在功能和使用上有哪些区别&…

[SpringBoot]单点登录

关于单点登录 单点登录的基本实现思想: 当客户端提交登录请求时,服务器端在验证登录成功后,将生成此用户对应的JWT数据,并响应到客户端 客户端在后续的访问中,将自行携带JWT数据发起请求,通常&#xff0c…

一篇搞懂steam/csgo搬砖原理

接触csgo游戏搬砖项目三年了,也有在别的论坛交流心得。让我无语的是有些已经游戏搬砖差不多半年,却还告诉我没有赚到钱,又或者说时常到可出售的时候利润少的可怕,总是说这个行业说水太深了!那么请你告诉我,…

快快快快快快快快快快排

作者简介:დ旧言~,目前大一,现在学习Java,c,Python等 座右铭:松树千年终是朽,槿花一日自为荣。 望小伙伴们点赞👍收藏✨加关注哟💕💕 C语言实现快排☺️ ℹ️…

Ceph 块存储系统 RBD 接口

-创建 Ceph 块存储系统 RBD 接口- 1、创建一个名为 rbd-demo 的专门用于 RBD 的存储池 ceph osd pool create rbd-demo 64 642、将存储池转换为 RBD 模式 ceph osd pool application enable rbd-demo rbd3、初始化存储池 rbd pool init -p rbd-demo # -p 等同于 --pool4、…

jenkins手把手教你从入门到放弃01-jenkins简介(详解)

一、简介 jenkins是一个可扩展的持续集成引擎。持续集成,也就是通常所说的CI(Continues Integration),可以说是现代软件技术开发的基础。持续集成是一种软件开发实践, 即团队开发成员经常集成他们的工作,通…

STM32 Proteus仿真LCD12864火灾检测烟雾火焰温度报警器MQ2 -0064

STM32 Proteus仿真LCD12864火灾检测烟雾火焰温度报警器MQ2 -0064 Proteus仿真小实验: STM32 Proteus仿真LCD12864火灾检测烟雾火焰温度报警器MQ2 -0064 功能: 硬件组成:STM32F103R6单片机 LCD12864 液晶显示DS18B20 温度传感器多个按键电位…

单例模式:懒汉式和饿汉式

目录 懒汉模式和饿汉模式 区别 示例 懒汉模式线程不安全 懒汉模式线程安全 懒汉模式内部静态变量线程安全 饿汉式线程安全 指的是在系统生命周期内,只产生一个实例。 懒汉模式和饿汉模式 分为懒汉式和饿汉式 区别 创建时机和线程安全 线程安全&#xff1…

高时空分辨率、高精度一体化预测技术的风、光、水自动化预测技术的应用

第一章 预测平台讲解及安装 一、高精度气象预测基础理论介绍 综合气象观测数值模拟模式; 全球预测模式、中尺度数值模式; 二、自动化预测平台介绍 Linux系统 Crontab定时任务执行机制 Bash脚本自动化编程 硬件需求简介 软件系统安装 …