6.7使用PowerdesignerPowerDesigner进行数据库设计6.7.1PowerdesignerPowerDesigner介绍1.概述PowerDesigner是Sybase公司的CASE工具集,使用它可以方便地对管理信息系统进行分析设计,它几乎包括了数据库模型设计的全过程,是一款开发人员常用的数据库建模工具。PowerDesigner主要包括以下功能:(1)集成多种建模能力,能建立的模型包括:数据模型(E/R,Merise)、业务模型(BPMN,BPEL,ebXML)、应用模型(UML)等;(2)自动生产代码,包括:SQL(支持多于50种数据库系统),Java,.NET等;(3)强大的逆向工程能力;(4)可扩展的企业库解决方案,具备强大的安全性及版本控制能力,可支持多用户自动化、可定制的报表能力。2.PowerDesigner环境PowerDesigner的环境如图6-11所示,包含以下几部分:结果列表对象浏览器图表窗口输出窗口图6-11PowerDesigner环境对象浏览器对象浏览器可以用分层结构显示工作空间,显示模型以及模型中的对象,实现快速导航。通过对象浏览器还可以访问PowerDesigner库,可以把模型及相关的文件存放到PowerDesigner库中。对象浏览器中主要包含以下对象:工作空间(Workspace):它是对象浏览器中树的根,是组织及管理所有设计元素的虚拟环境。用户可以通过保存工作空间保存自己的设计空间信息以便再次打开时可以还原到保存前的状态。项目(Project):项目中的所有对象可以作为一个单元存到PowerDesigner库中。每个项目自动维护一张图用以显示模型以及文档之间的依赖。文件夹(folder):工作空间可以包含用户自定义的文件夹用以组织模型和文件。例如,有两个独立的项目,希望在一个工作空间中处理,此时可以使用文件夹。模型(Model):模型是PowerDesigner中的基本设计单元。每个模型中有一个或多个图以及若干模型对象。包(Package):当模型较大时,可能需要把模型拆分成多个“子模型”以便于操作,这些子模型就叫做包,今后可以把不同的包分配给不同的开发组。图(Diagram):展现模型对象之间的交互,可以在模型或包中创建多个图。输出窗口:显示操作的进程,比如模型检查或从数据库逆向工程。结果列:用于显示生成、覆盖和模型检查结果,以及设计环境的总体信息。图表窗口:用于组织模型中的图表,以图形方式显示模型中各对象之间的关系。3.常用的Powerdesigner的几种模型:概念数据模型(ConceptualDatabaseModel,CDM)CDM帮助分析信息系统的概念结构,识别主要实体、实体的属性及实体之间的联系。CDM比逻辑数据模型(LDM)和物理数据模型(PDM)抽象。CDM表现数据库的全部逻辑的结构,与任何的软件或数据存储结构无关。因此,CDM是适合于系统分析阶段的工具。由CDM可生成LDM、PDM和OOM。逻辑数据模型(LogicalDataModel,LDM)LDM帮助分析信息系统的结构,它独立于具体物理数据库的实现。LDM比CDM具体,但不允许定义视图、索引以及其它在物理数据模型(PDM)中处理的细节。可以把逻辑数据模型作为数据库设计的中间步骤,它在概念数据模型与物理数据模型之间。物理数据模型(PhysicalDataModel,PDM)PDM帮助分析数据库中的表、视图及其它对象,还包括数据仓库所需的多维对象,可针对目前主流数据库进行建模、逆向工程以及产生代码。PDM叙述数据库的物理实现,主要目的是把CDM中建立的现实世界模型生成特定的DBMS脚本,产生数据库中保存信息的储存结构,保证数据在数据库中的完整性和一致性。PDM是适合于系统设计阶段的工具。面向对象模型(Object-orientedDataModel,OOM)一个OOM包含一系列包、类、接口和它们的关系。一个OOM本质上是软件系统的一个静态的概念模型。使用PowerDesigner面向对象模型建立OOM,能为纯粹地面向对象的系统建立一个OOM,产生Java文件或者PowerBuilder文件,或使用一个来自OOM的物理数据模型(PDM)对象来表示关系数据库设计分析。本章中主要介绍和使用PowerDesigner的概念数据模型和物理数据模型来设计数据库。6.7.2概念数据模型1.概述概念数据模型也称信息模型,它以实体联系理论为基础,并对这一理论进行了扩充。它从用户的观点出发对信息进行建模,主要用于数据库的概念级设计。通常人们先将现实世界抽象为概念世界,然后再将概念世界转为机器世界。换句话说,就是先将现实世界中的客观对象抽象为实体和联系,它并不依赖于具体的计算机系统或某个DBMS系统,这种模型就是我们所说的CDM;然后再将CDM转换为计算机上某个DBMS所支持的数据模型,这样的模型就是物理数据模型,即PDM。CDM是一组严格定义的模型元素的集合,这些模型元素精确地描述了系统的静态特性、动态特性以及完整性约束条件等,其中包括了数据结构、数据操作和完整性约束三部分。(1)数据结构表达为实体和属性;(2)数据操作表达为实体中的记录的插入、删除、修改、查询等操作;(3)完整性约束表达为数据的自身完整性约束(如数据类型、检查、规则等)和数据间的参照完整性约束(如联系、继承联系等)。CDM的功能如下:(1)通过创建实体关系(E-R)图来描述数据的组织结构。(2)能够校验数据设计的合理性。(3)能够生成指定了相应物理实现数据库的物理数据模型(PDM)。(4)能够生成用UML标准描述CDM中对象的面向对象模型(OOM)。(5)为在不同的设计阶段创建另一个模型版本,可以生成概念数据模型(CDM)。图6-中描述了CDM、PDM和OOM之间的转换关系。数据库概念数据模型物理数据模型面向对象模型模型间转换模型间转换模型间转换生成逆向工程面向对象语言生成逆向工程图6-1CDM、PDM和OOM之间的关系2.创建CDM步骤如下:(1)选择【File】|【NewModel】,弹出如图6-所示对话框。在【Modeltypes】选项页中选择【ConceptualDataModel】,在【Modelname】中输入CDM模型的名称(本例中为模型取名CDM_grade)。图6-2新建CDM(2)在【对象浏览器】中选择新建的CDM,右键单击,在快捷菜单中选择【Properties】属性项,弹出如图6-所示对话框。在【General】标签里可以输入所建模型的名称、代码、描述、创建者、版本以及默认的图表等信息。在【Notes】标签里可以输入相关描述及说明信息。图6-3CDM属性窗口以下我们具体介绍如何创建CDM。3.创建新实体(1)在CDM的图形窗口中,单击工具选项板上的Entity工具,如图6-所示。再单击图形窗口的空白处,在单击的位置就出现一个实体符号,如果连续单击,即可创建多个实体。点击Pointer工具或右击鼠标,释放Entity工具。(2)双击已创建的实体,打开【EntityProperties】窗口,在此可以编辑实体的相关属性。在此窗口【General】标签中可以输入实体的名称、代码、描述等信息,如图6-所示。图6-5【General】选项页(3)不像标准的E-R图中使用椭圆表示属性,在PowerDesigner中添加属性只需打开【Attribute】选项页,在该窗口上可以添加该实体的属性,【Attribute】选项页如图6-所示。在该选项页上,可以输入每个属性的名称、代码以及数据类型等。其中【Attributes(属性)】选项卡中主要的选项的含义如下:Name:属性名;Code:属性代号;DataType:数据类型;Length:数据长度;Precision:精度。Domain:域,表示此属性取值的范围。M:即Mandatory,表示该属性是否为强制的,即该列是否为空值。如果一个实体属性为强制的,那么,这个属性在每条记录中都必须被赋值,不能为空。P:即PrimaryIdentifier,是否是主标识符,表示实体唯一的标识符,对应我们常说的主键。当选中某属性为主标识符时,在【Identifiers】选项页中自动出现该标识符的name和code。D:即Displayed,D列表示该属性是否在图形窗口中所示。说明:标识符是实体中一个或多个属性的集合,可用来唯一标识实体中的一个实例。要强调的是,CDM中的标识符等价于PDM中的主键或候选键。每个实体都必须至少有一个标识符。如果实体只有一个标识符,则它为实体的主标识符。如果实体有多个标识符,则其中一个被指定为主标识符,其余的标识符就是次标识符了。实体图6-4新建实体图6-6【Attribute】选项页(4)在图6-所示的窗口中,创建实体的各个属性。本例中创建了“院系”实体,属性有“院系编号”和“院系名”,其中“院系编号”是主标识符(图6-8)。在选择数据类型时,可以在对应的数据类型列中,点击省略号按钮,打开【StandardDataTypes】窗口,在这个窗口中,选择相应的数据类型即可,如图6-所示。图6-7“院系”实体的属性图6-8【StandardDataTypes】窗口类似的方法可以创建“课程”实体。已创建的“院系”和“课程”实体如图6-所示。图6-20院系和课程实体4.创建实体间的继承联系通过特殊化或概化方法产生的实体类型之间的联系称为继承联系。特殊化:在实体集内部分组并把这些分组存放在不同的实体类型中的过程称为实体集的特殊化。概化:从多个实体集的公共属性中抽象出一个公共实体类型的过程为实体集的概化。继承联系的一端是具有普遍性的实体集,为父实体集;另一端连接的是具体特殊的一个或多个实体集,为子实体集。例如:“银行账户”是“借记卡账户”与“信用卡账户”的父实体,相应地,“借记卡账户”与“信用卡账户”是“银行账户”的子实体。另外在继承联系中,还可以分为互斥性继承联系和非互斥性继承联系。互斥性继承联系:父实体中的一个实例只能在一个子实体中。例如:“帐户”主实体下的“个人账户”与“公司账户”两个子实体之间的联系是互斥的。非互斥性继承联系:父实体中的一个实例可以在多个子实体中。例如:“职工”父实体下的“干部”与“教师”子实体之间属于非互斥继承联系,教师有可能也是干部,干部有可能也是教师。说明:如果工具栏上的Inheritance图标默认是禁用的。打开方法如下:【Tools】|【ModelOptions】|【ModelSettings】|【Notation】设为“E/R+Merise”就行了。因此,继承允许定义一个实体为另一个更一般的特例,涉及到继承的实体间既有着共同相似的特征,也有不同的特征。如在【学生成绩管理】系统中,有学生实体,有教师实体,其实他们都是人员,所以我们可以抽象出一个人员的实体,具有教师和学生的公共属性:姓名、性别、出生日期、电子邮件、家庭住址等属性。而教师实体中又具有教师编号、办公电话、职称等属性这是学生没有的,所以不能放在人员实体中;同样,学生实体中也有学号、入学年份等属性是教师没有的。在CDM中创建继承的操作步骤如下:(1)在工具面板中左键单击继承(Inheritance)工具,在子实体上单击鼠标左键,按住不放,拖拽鼠标到父实体后才松开,这样就建立了父子实体之间的Inheritance关系。如图6-所示,人员是父实体,教师和学生是子实体。图6-21使用继承(2)双击新建的继承关系线,打开继承关系属性窗口,在此可以设置继承的相应属性。比如在【General】选项页中(图6-),可以输入该继承关系的name和code值,以及子实体间是否互斥:复选框Mutuallyexclusivechildren选中,代表是互斥性继承联系,那么在继承关系线上的半球形图标里会出现有叉叉图标。子类可以只继承父类的主键,也可以继承所有的字段,可通过继承属性页面进程设置,双击新建的继承关系线,打开继承关系属性窗口,切换到【Genarati