介绍
Power Designer是能进行数据库设计的强大的软件,是一款开发人员常用的数据建模工具。几乎包括了数据库模型设计的全过程。利用Power Designer可以制作数据流程图、概念数据模型、物理数据模型,还可以为数据仓库制作结构模型。
概念模型
概念数据模型是最终用户对数据存储的看法,反映了最终用户综合性的信息需求,它以数据类的方式描述企业级的数据需求,数据类代表了在业务环境中自然聚集成的几个主要类别数据。
概念数据模型的内容包括重要的实体及实体之间的关系。在概念数据模型中不包括实体的属性,也不用定义实体的主键。这是概念数据模型和逻辑数据模型的主要区别。
概念数据模型的目标是统一业务概念,作为业务人员和技术人员之间沟通的桥梁,确定不同实体之间的最高层次的关系。在有些数据模型的设计过程中,概念数据模型是和逻辑数据模型合在一起进行设计的。
逻辑模型
逻辑数据模型反映的是系统分析设计人员对数据存储的观点,是对概念数据模型进一步的分解和细化。逻辑数据模型是根据业务规则确定的,关于业务对象、业务对象的数据项及业务对象之间关系的基本蓝图。
逻辑数据模型的内容包括所有的实体和关系,确定每个实体的属性,定义每个实体的主键,指定实体的外键,需要进行范式化处理。
逻辑数据模型的目标是尽可能详细的描述数据,但并不考虑数据在物理上如何来实现。
逻辑数据建模不仅会影响数据库设计的方向,还间接影响最终数据库的性能和管理。如果在实现逻辑数据模型时投入得足够多,那么在物理数据模型设计时就可以有许多可供选择的方法。
物理模型
物理数据模型,提供了系统初始设计所需要的基础元素,以及相关元素之间的关系。即用于存储结构和访问机制的更高层描述,描述数据是如何在计算机中存储的,如何表达记录结构、记录顺序和访问路径等信息。使用物理数据模型,可以在系统层实现数据库。数据库的物理设计阶段必须在此基础上进行详细的后台设计,包括数据库的存储过程、操作、触发、视图和索引表等;
物理数据模型是在逻辑数据模型的基础上,考虑各种具体的技术实现因素,进行数据库体系结构设计,真正实现数据在数据库中的存放。
物理数据模型的内容包括确定所有的表和列,定义外键用于确定表之间的关系,基于用户的需求可能进行发范式化等内容。在物理实现上的考虑,可能会导致物理数据模型和逻辑数据模型有较大的不同。 物理数据模型的目标是指定如何用数据库模式来实现逻辑数据模型,以及真正的保存数据。
1. 概念数据模型
1.1新建及设置
1.1.1 新建项目
1.1.2 新建概念数据模型
在项目的基础上建一个概念数据模型:
修改模型的属性信息:
1.1.3 新建和修改模型图
创建好了概念数据模型后,默认生成一张模型图。我们在要在模型图上做设计。点击或者点击前面的小图标,会显示模型图。
修改模型图的属性:
新建一个模型图:
1.1.4 新建实体
1.1.5 编辑实体和属性
选中实体右击
编辑属性后:
1.1.6 设置实体的显示
勾选实体显示那些内容。设置后,实体显示如下:
1.1.7 设置属性的name、code可重复
powerdesinger 默认是不允许实体属性(字段)的name和code重复。需要我们去修改配置。
设置字段能否重复使用:
设置生成逻辑模型或物理模型时,不要检查重复实体属性的name和code:
1.1.8 创建和使用domain(域)
概念:域是某个或某些属性的取值范围,定义域后可以被多个实体的属性共享使用,域的定义在模型涉及中具有重要意义,使得不同实体中的属性标准化更加容易。
Domain是对字段统一定义数据类型和长度等,多个字段添加这个domain,一旦变化只需要修改domain即可。功能类似于java中的配置文件,一旦修改了配置文件,程序中所有引用都会变化。
新建一个domain:
新建后,在这里显示:
我们在设置实体的属性(字段)的时候,在这里选择即可使用:
1.2 一对一双向关联关系
1.2.1 创建一对一关系
(1) 我们准备两个实体。分别是用户和护照,他们是一对一的关系。
(2) 新建一对一关系。实体之间的关系是使用主键来维护的。
1.2.2 编辑一对一关系
修改关系的名称等:
设置关系的基本信息:
建好后的效果:
1.2.3 生成逻辑模型
1.3 一对一单向关联关系
1.3.1 单向和双向
这个模型就是双向关系。用户和护照实体都有对方的引用(对方的主键)。
单向关系:我们从护照想知道用户信息,不想从用户知道护照信息。
1.3.2 示意图利用已有的实体(强烈不推荐)
利用已有的实体,会导致之前的关系和现在的关系混乱。不要这样操作。
1.3.3 编辑一对一单向关系
主表和从表就是谁依赖谁,我依赖你,你是主表,我是从表。我依赖你,可以理解为,要先有你才有我。
1.3.4 更新逻辑模型
1.3.5 删除逻辑模型
纠错。按照上面操作,我们发现生成的逻辑模型不是我们想要的。原因是我们两个概念模型使用了相同的实体。工作中,我们两个概念模型不会使用相同的实体,不会遇到这种情况。
删除逻辑模型:
1.3.6 复制实体(不推荐)
不要复制表和字段。复制品和原有的会联动变化。
1.3.7 从概念模型删除实体
1.3.8 一对一单向和双向逻辑模型
1.3.9 一对一关系的思考和总结
一对一关系,我们首先要弄清是单向关系还是双向关系。
双向关系,两个实体表都要包含对方主键。
单向关系,我们要弄清,两个实体的主从关系,从表要包含主表的主键,主表无需操作。
主表和从表如何定义?1. 看我们需求,一般主表不经常查询从表,从表经常查询主表。2. 看他们依赖关系,从表必须要有主表的存在才行。主表不需要从表的存在,也能独立表达业务。3. 从表中有主表的主键。主表的主键是从表的外键。
一对一关系,我们还需要注意是一对一还是一对零。
这里通过主键关联,这里的主键更像一个概念意义上的主键。我们可以把它理解为概念主键,而不是数据表主键。
1.4 一对多和多对一关联关系
1.4.1 重用字段(不推荐)
1.4.2 数据类型扩展
1.4.3 准备员工表和部门表
1.4.4 创建一对多关系
1.4.5 一对多逻辑模型
1.5 多对多关联关系
1.5.1 解决多对多图标不能使用
PowerDesigner下面图标都是灰色的,不能点击。
解决PowerDesigner的association按钮不能使用的问题:
1.5.2 创建多对多关系
(1) 新建一个association
(2) 双击association或右击--properties,编辑
(3) 建立关系
1.5.3 多对多的逻辑模型
注意:关联表没有自己的主键。他们还存在依赖关系。多对多就是两个一对多。
1.5.4 多对多关联实体包含其他属性
我们先准备2个实体:
学生实体存储每个学生的信息,如:张三、李四、王五。
考试实体存储考试信息,如:数学考试、英语四级、计算机二级。
需求1:我们想知道每个学生每科考试的总成绩。
解决思路:多对多的中间关联表不仅要包含两个实体的主键,还要包含其他属性。多对多本质就是两个一对多。我们新建一个中间表,不仅包含两个实体的主键,还包含其他属性,然后两个实体和中间表建立两个一对多关系,即可。
概念模型图:
生成的逻辑模型图:
1.6 依赖关系
1.6.1 依赖关系--联合主键
需求:我们要求建一个答题卡实体,答题卡存储每个学生每个考试每个题目的信息。如:题目编号、题目得分。我们想知道每个学生每个考试每个题目的得分。
这个需求我们有两个方案。
第一个方案,答题卡实体不建独立主键,以学生ID、考试ID、题号作为联合主键。
总结:没勾选“dependent”,主表的主键会变成从表的外键。勾选“dependent”,主表的主键会变成从表中的主键。勾选“dependent”,主键能够继续传递下去,而关联关系都是靠主键来实现的。
1.6.2 依赖关系--独立主键
(1) 答题卡实体建独立主键
(2) 取消答题卡和关联表的依赖
(3) 最终的概念模型
(4) 最终的逻辑模型
总结:这部分内容,还是体现了上部分总结的内容。
其实这部分模型,不太优化,应该把答题卡和关联表建立一个一对一的关系,我随便画一下模型图,没有学习价值。
概念模型:
逻辑模型:
1.7 继承关系
1.7.1 继承关系的数据库设计
这里的继承关系和java中的继承是一个意思。这种关系我们在数据库中该如何表达呢?
列举一些应用场景:
1. 程序有很多异常类,这些异常类有共同属性,也有各自的特性。
2. 一个物联网系统,它有很多设备种类,如:摄像机、显示屏、传感器。他们有一些设备共同属性,但是每种设备还有各自的特性。
我们现在有个案例,有一个老师实体:他有name、age、学科。有一个学生实体,他有name、age、专业。如何设计?
第一种,老师和学生各自建数据表,数据表包含各自全部属性,不建父级表。缺点:字段冗余。
第二种,老师和学生都建在一张数据表,用字段区分实体。缺点:字段数量太多,数据为null的情况多。
第三种,如上图所述。
总结:第三种更优化。如果业务比较简单,第二种和第二种比较适合。如何选择看具体情况。
1.7.2 继承关系第一种设计
(1) 准备3个实体
(2) 建立继承关系
(3) 编辑继承关系。两个继承关系都要编辑
(4) 生成逻辑模型
1.7.3 继承关系第二种设计
(1) 前面的步骤和上面一样。只有关系设置不同。
(2) 生成的物理模型
1.7.4 继承关系第三种设计
(1) 前面的步骤和上上面一样。只有关系设置不同。
(2) 生成的逻辑模型
2. 物理数据模型(PDM)
2.1 生成物理数据模型
2.2 表与字段
2.3 物理模型中创建视图
在物理数据模型中创建视图,注意先切换到物理数据模型图。
2.4 物理模型中创建索引
物理模型中创建索引:
2.5 物理模型中创建存储过程
2.6 物理模型中创建触发器
2.7 PDM生成SQL脚本文件
老师在课程中还有用power designer连接数据库,执行SQL语句。这个不实用,就不赘述了。我们一般在navicat中操作。
3. 项目实战
3.1 新建实体和属性
1. 分析需求中的实体。有如下实体:客户、部门、员工、开发团队、项目、项目的任务。
2. 确定实体属性。实体和实体属性如下:
3.2 部门、员工、开发团队和一对多、多对多关系
一个部门有多个员工,一个员工只属于一个部门。
一个开发团队有多个员工,一个员工属于多个开发团队。
设置部门和员工一对多关系:
建好的关系:
3.3 客户、项目、项目任务和一对多、依赖关系
一个客户有多个项目,一个项目只属于一个客户。
一个项目有多个任务,一个任务只属于一个项目。任务可以依赖项目。
一个员工参与多个任务,一个任务属于多个员工。
设置客户和项目之间一对多关系:
设置项目和项目任务之间的一对多和依赖关系:
设置好他们之间的关系:
3.4 项目、项目任务、父表和继承关系
他们之间继承关系设置:
设置好的继承关系:
3.5 员工、项目任务、员工参与任务和多对多包含其他属性、依赖关系
员工和员工参与任务之间依赖和多对多关系:
任务和员工参与任务之间依赖和多对多关系:
建好的关系:
3.6 建好的概念模型、逻辑模型、物理模型
概念模型:
逻辑模型:
物理模型: