PowerDesigner 数据库建模使用详解

news2024/11/19 19:44:34

目录

一、前言

二、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.coloradmin.cn/o/755969.html

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

相关文章

综合能源系统(2)——综合能源系统典型应用场景

综合能源系统关键技术与典型案例  何泽家,李德智主编 根据空间分布范围特征,综合能源系统可大致划分为楼宇级、园区级以及区域级。楼宇级综合能源系统适用于办公楼、家庭、商场等单一主体区域,投资、建设和运营模式较为简单,技术…

arm学习stm32芯片学习方波启动蜂鸣器,马达,风扇,裸机开发,soc

main.c #include "pwm.h" extern void printf(const char *fmt, ...); void delay_ms(int ms) {int i,j;for(i 0; i < ms;i)for (j 0; j < 1800; j); } int main() {//蜂鸣器初始化hal_pwm_beep_init1();//马达hal_pwm_motor_init1();//风扇hal_pwm_blower_…

基于Vue3+LeaderLine实现画线测距及线条自由调整

先看下效果&#xff1a;我们画线后可以根据比例关系自动计算距离&#xff0c;并且线条不对可以自由调整 <template><div id"image-detail"><el-image :src"myImageUrl" style"height: auto; width: 800px;" fit"scale-dow…

Django实现接口自动化平台(十)自定义action names【持续更新中】

相关文章&#xff1a; Django实现接口自动化平台&#xff08;九&#xff09;环境envs序列化器及视图【持续更新中】_做测试的喵酱的博客-CSDN博客 深入理解DRF中的Mixin类_做测试的喵酱的博客-CSDN博客 python中Mixin类的使用_做测试的喵酱的博客-CSDN博客 本章是项目的一…

高数笔记5(第一章函数 极限 连续-第三节-函数的连续性)

目录 第三节 函数的连续性&#xff08;1&#xff09;函数的连续性例1&#xff08;补充定义&#xff0c;函数连续&#xff09;例4&#xff08;无穷小*有界量&#xff09;例6 &#xff08;补充定义&#xff0c;三角函数的代换的妙用&#xff09; &#xff08;2&#xff09;连续函…

7.带你入门matlab偏斜度和峰度(matlab程序)

峰度&#xff08;Kurtosis&#xff09;与偏态&#xff08;Skewness&#xff09;就是量测数据正态分布特性的两个指标。 峰度&#xff08;Kurtosis&#xff09; 峰度衡量数据分布的平坦度&#xff08;flatness&#xff09;&#xff0c;即数据取值分布形态陡缓程度的统计量。它…

C#,数值计算——柯西分布(Cauchy distribution)的计算方法与源程序

柯西分布&#xff08;Cauchy distribution&#xff09;简介 The Cauchy distribution, also called the Lorentzian distribution or Lorentz distribution, is a continuous distribution describing resonance behavior. It also describes the distribution of horizontal …

ASEMI快恢复二极管MUR2080CTR资料,MUR2080CTR参数

编辑-Z MUR2080CTR是一种高压、超快恢复整流二极管。它通常用于各种电子应用&#xff0c;如电源、逆变器和电机控制电路。该二极管设计用于处理高压和高频开关&#xff0c;适用于需要快速高效整流的应用。 MUR2080CTR二极管的一个关键特性是其超快的恢复时间。这意味着它可以非…

从零开始 Spring Cloud 2:Eureka 注册中心

从零开始 Spring Cloud 2&#xff1a;Eureka 注册中心 图源&#xff1a;laiketui.com Eureka 常被用作 Spring Cloud 的注册中心&#xff0c;用于注册微服务的接口提供方。 在上一篇文章中&#xff0c;我们实现了两个子模块互相调用接口&#xff0c;但存在一个缺陷&#xff0…

旅游管理系统的设计与实现(论文+源码)_kaic

摘 要 旅游业走过了改革开放&#xff0c;到现在依旧蓬勃发展。但是放眼国际社会&#xff0c;我们在旅游业发展的深度和广度上所做的努力还远远不够。在中国&#xff0c;旅游业也将成为经济崛起中的重要一环。目前&#xff0c;我们生活在一个信息时代里。无论是工作&#xff0c;…

哈希表的原理

哈希概念 线性表、树结构的查找方式都是以关键字的比较为基础&#xff0c;查找效率比较低&#xff0c;顺序表的时间复杂度是O&#xff08;n&#xff09;&#xff0c;平衡树中为树的高度&#xff0c;即O&#xff08;logn&#xff09;&#xff0c;搜素的效率取决于搜索过程的元素…

归并排序的递归和非递归

基本思想 归并排序&#xff08;MERGE-SORT&#xff09;是建立在归并操作上的一种有效的排序算法,该算法是采用分治法&#xff08;Divide andConquer&#xff09;的一个非常典型的应用。将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff1b;即先使每个子序列有序&a…

OpenCV项目开发实战--详细介绍如何进行边缘轮廓检测 (Python/C++)-附源码

使用轮廓检测​​,我们可以检测对象的边界,并轻松在图像中定位它们。它通常是许多有趣应用的第一步,例如图像前景提取、简单图像分割、检测和识别。 因此,让我们使用 OpenCV 来了解轮廓和轮廓检测,并亲眼看看如何使用它们来构建各种应用程序。 轮廓在计算机视觉中的应用

latex2【图片、公式、矩阵】

图片 语法&#xff1a; \includegraphics{排队论模型.png} 看起来很别扭是吧&#xff0c;需要进行“修饰”&#xff1a; 当然&#xff0c;这样也很丑&#xff0c;一般写论文可以用以下的格式&#xff1a; \begin{figure}[H] \caption{问题一模型示意图} \label{paiduimx} …

【企业架构工具】2023 年 18 大企业架构工具

这些流行和新兴的 EA 工具为企业提供了支持企业架构和数字化转型所需的一切。 企业架构系统并不总是必不可少的。据推测&#xff0c;在 1940 年代&#xff0c;国际商业机器公司的一位领导人小托马斯沃森 (Thomas Watson Jr.) 曾说过&#xff1a;“我认为大约有 5 台计算机的全球…

基于SpringBoot+vue的校园疫情防控系统设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

Linux内核网络-拥塞控制系列(一)

谈起网络拥塞控制&#xff0c;大家可能很熟悉八股文中的"加法增大“、”乘法减小“、”慢开始“、“拥塞避免”、“快重传”、“快恢复”等概念。没错&#xff0c;这是一种经典网络拥塞控制算法的基础理论&#xff0c;但在实际的实现时不同的拥塞控制算法&#xff0c;有很…

【Android Camera开发】深入理解相机ISP(图像信号处理)必看文章

​原文&#xff1a;https://blog.51cto.com/u_16081664/6224003 作者&#xff1a;mb64411cc0e9333 凡是和图像领域工作的人&#xff0c;都会经常听到ISP&#xff08;Image Signal Process&#xff0c;图像信号处理&#xff09;&#xff0c;知道ISP对图像质量非常重要。比如华为…

电能管理系统在路店上的应用 安科瑞 许敏

摘要&#xff1a;随着企业改革的不断深入&#xff0c;对现代化用电管理的水平要求越来越高&#xff0c;准确、快速、经济的获得用电回路的各类数据进行用电分析、负荷管理、表计运行状况监测、电费自动结算的基础。同时也是提高企业经济效益的有效手段。近年来技术人员对监控系…

嵌入式程序开发者的数量剧增

随着物联网、智能设备和嵌入式系统的快速发展&#xff0c;嵌入式程序开发领域的需求不断增长&#xff0c;因此嵌入式程序开发者的数量也在剧增。这种趋势在过去几年中已经变得非常明显。 以下是导致嵌入式程序开发者数量剧增的一些主要原因&#xff1a; 我这里刚好有嵌入式、单…