PowerDesigner设计技巧.docx
- 文档编号:30653850
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:32
- 大小:1.30MB
PowerDesigner设计技巧.docx
《PowerDesigner设计技巧.docx》由会员分享,可在线阅读,更多相关《PowerDesigner设计技巧.docx(32页珍藏版)》请在冰豆网上搜索。
PowerDesigner设计技巧
在PowerDesigner中设计物理模型2——约束
在PowerDesigner中设计概念模型
在概念模型中主要有以下几个操作和设置的对象:
实体(Entity)、实体属性(Attribute)、实体标识(Identifiers)、关系(Relationship)、继承(Inheritance)、关联(Association)、关联连接(AssociationLink)。
实体
实体就是我们抽象出的对象,比如:
一个选课系统中,学生、教师、班级、课程等等都是实体。
实体属性就是一个实体中所包含的简单属性,比如学生实体,具有学号、姓名、生日、性别等属性。
另外实体还有个标识用于唯一的标识出每个实体实例,比如学生实体中就可用将学生的学号作为该实体的标识。
标识可用是一个实体属性也可以是多个属性的结合。
在PD中新建一个新的概念模型,系统将出现一个工具栏如下,用于在设计面板中设计模型。
单击Entity图标,然后在设计主面板中单击一次便可添加一个实体。
再单击鼠标图标,即可切换回一般鼠标的模式。
双击已经添加的实体,弹出实体属性设置对话框,在General中可以设置实体的Name和Code等属性,如图所示:
切换到Attributes选项卡可以设置实体的属性Name、Code、DataType等,右边还有3个复选框,M表示不能为空,P表示是标识属性,D表示在模型图中是否显示,如果在设置属性时直接选中StudentID的P复选框,系统将会自动生成该Student实体的一个Identifier。
如果不希望系统自动生成而是手动设置的话,那么切换到Identifiers选项卡,添加一行Identifier,然后单击左上角的“属性”按钮,然后弹出的标识属性设置对话框中单击“添加行”按钮,选择该标识中使用的属性。
例如将学号设置为学生实体的标识,具体操作如图所示:
整个设置好的实体如图所示:
关系
关系用于表示一个实体与另外一个实体之间的对应关系,分为一对一(1:
1),一对多(1:
n),多对一(n:
1),多对多(m:
n)4种对应关系,一对多和多对一其实就是方向相反,所以实际上就是一对一、一对多和多对多。
最最常用的就是一对多,比如班级实体和学生实体就是一对多关系,一个班级有多个学生,一个学生只会属于一个班级。
在设计面板中添加一个Class实体,然后单击工具栏的Relationship按钮,然后在Class实体上单击一下,再到Student上单击一下,就可以在Class和Student之间建立一对多关系,如图:
系统默认会给该关系一个命名Relationship_1,切换到鼠标指针模式,双击Relationship_1,即可打开关系的属性窗口,可以在General选项卡中修改该关系的Name、Code等,如图:
切换到Cardinalities选项卡,上面可以修改是一对多还是多对多之类的关系,下面的Rolename没有多大的意义,就是在模型中显示文字,多的一方有0,n和1,n两种,也就是说一个班级可以对应多个学生,那么一个班级中最少是没有学生还是要至少存在一个学生,同样的一的一方有0,1和1,1两种,就是说一个学生是可以不属于任何班级呢还是必须属于某一个存在的班级,这里我们都选至少是1,所以最终的设置界面如图:
继承
在概念模型中的继承与在OO模型中的继承是一回事,就是要抽象出一个实体,其他实体继承该实体后就拥有该实体的属性。
同样以选课系统为例,现在有学生实体,有教师实体,其他他们都是人,具有人的属性,所以我们可以抽象出一个人的实体,人具有性别、生日、名字等属性,教师具有职称、工号等属性这是学生没有的,所以不能放在人实体中,学生具有学号属性是教师没有的。
这里只是概念模型,在DBMS中是没有继承这种说法的,所以在接下来的逻辑模型和物理模型中,系统就会将继承转换为实际的实体和表。
这里只是概念模型,所以才有继承的说法。
关联(Association)我也不知道这个翻译成中文用哪个词比较好,就暂且用“关联”吧。
Association也是一种实体间的连接,在Merise模型方法学理论中,Association是一种用于连接分别代表明确定义的对象的不同实体,这种连接仅仅通过另一个实体不能很明确地表达,而通过“事件(Event)”连接来表示。
也就是说,实体和实体之间存在着关系(多对多),但是这种关系还存在其他的属性,这些属性如果如果作为一个明确的实体的实体来表示又不是很合适,所以就使用了Association来表达,这种关系之间一般是一个“事件”虚实体,也就是说是一个动词对应的实体。
前面说的可能还是太抽象,以实际的例子来说明:
现在有了学生实体,有课程实体,一个学生可以选择多门课程,一门课程有多个学生来上课,所以之间就存在一个“选课”的Association,其中记录了学生选课的时间、选课的状态:
一个学生会对应多个选课结果选择多门课程,一个课程对应多个选课学生选课,所以学生实体和课程实体与选课的关系都是一对多,添加关联连接,一门课程可能太枯燥了,没有学生来选,所以课程对应选课可能是0,n,一个学生可能学分够了这学期一门课都不选,所以学生对应选课也可能是0,n的关系,所以我们最终形成的概念模型如图所示:
这就是一个完整的概念模型。
接下来就是要根据概念模型生成逻辑模型或者物理模型。
在PD中建立物理模型由以下几种办法:
∙直接新建物理模型。
∙设计好概念模型,然后由概念模型生成物理模型。
∙设计好逻辑模型,然后由逻辑模型生成物理模型。
∙使用逆向工程的方法,连接到现有的数据库,由数据库生成物理模型。
物理模型能够直观的反应出当前数据库的结构。
在数据库中的表、视图、存储过程等数据库对象都可以在物理模型中进行设计。
由于物理模型和数据库的一致性,接下来以数据库对象和物理模型对象的对应来一一介绍:
表
新建物理模型时需要指定物理模型对应的DBMS,这里我们使用SQLServer2008,新建一个物理模型后,系统会显示一个专门用于物理模型设计的工具栏:
若要在物理模型中添加一个表,单击“表”按钮,然后再到模型设计面板中单击一次便可添加一个表,系统默认为表命名为Table_n,这里的n会随着添加的表增多而顺序增加。
添加的表是没有任何列的,如图所示:
单击工具栏的鼠标指针按钮,将鼠标切换回指针模式,然后双击一个表,系统将打开表属性窗口,在General选项卡中可以设置表的Name、Code等属性。
例如我们要新建一个教室表(ClassRoom),则可修改Name和Code。
Name是在模型中显示的名称,Code是生成数据库表的时候的实际表名。
另外Name中的内容还会作为SQLServer中的表备注。
单击Columns切换到列选项卡,在下面的列表中可以添加表中的列。
Name是模型上显示的名称,Code是生成的实际的表名,后面的3个复选框P代办主键、F代表外键,M代表不能为空。
为教室表设计了两个列,如图所示:
主键
在设计一个表时,一般情况下每个表都会有一个主键,主键分为单列主键和复合主键。
在为表设置主键时有以下几种办法:
1.在Columns选项卡中,直接选中主键列的P列复选框,这是最简单的方式。
2.选中一个列,然后单击工具栏中的“属性”按钮,系统将弹出列属性窗口,在该窗口中可以设置该列的各种属性,当然也包括该列是否是否是主键。
另外还有一个很重要的复选框是“Identity”。
选中Identity复选框则表示该列为自增列。
3.切换到Keys选项卡中,在其中添加一行命名为PK_ClassRoom,然后单击工具栏的“属性”按钮,打开键属性窗口,在该窗口中切换到Columns选项卡,单击添加列按钮,弹出列选择窗口,选中主键中应该包含的列,单击确定按钮即可完成主键的创建。
另外需要注意的是,在建立主键时,系统会在主键上建立索引,索引分为聚集索引和非聚集索引,在“键属性”窗口的General选项卡中可以设置该主键上建立的索引是聚集索引还是非聚集索引,如图所示:
外键
如果是由概念模型或者逻辑模型生成物理模型,那么外键是通过Relationship生成的,也可以通过工具栏中的Reference来实现两表之间的外键关系。
假如一个课程只会在一个固定的教室上课,而一个教室会安排多个课程在不同的时间上课,所以教室和课程是一对多的关系,那么课程表中就需要添加RoomID列以形成外键列,具体操作方法就是在工具栏中单击“Reference”按钮,然后在设计面板中,课程表上按下鼠标左键,并拖拽到教师表中放开鼠标,这时如果课程表中没有RoomID列,系统会自动创建RoomID列并创建该列上的外键引用,如果已经存在RoomID列,则只添加外键引用,不会再添加新列。
切换到鼠标指针模式,双击箭头,系统将弹出引用的属性窗口,在属性窗口中可以设置该引用的Name、Code、关联的列、约束名、更新策略和删除策略等。
下一篇文章将会介绍其他约束具体包括:
1.CHECK约束
2.默认值约束
3.非空约束
……
另外在物理模型中还包括:
视图、存储过程、函数、触发器等都会在接下来的几篇文章中讲解到。
唯一约束
唯一约束与创建唯一索引基本上是一回事,因为在创建唯一约束的时候,系统会创建对应的一个唯一索引,通过唯一索引来实现约束。
不过唯一约束更直观的表达了对应列的唯一性,使得对应索引的目的更加清晰,所以一般建议创建唯一约束而不是只创建唯一索引。
在PD中创建唯一约束的操作,以教室表来说,RoomID是主键,必然是唯一的,RoomName如果我们也要去必须是唯一的,那么具体操作如下:
在PD的模型设计面板中,双击“教室”表,打开属性窗口,切换到"”Keys”选项卡,可以看到里面有一行数据PK_ClassRoom,这是主键约束。
添加一行数据,命名为UQ_RoomName,不能将右边的“P”列选上,然后单击工具栏的“属性”按钮,弹出UQ_RoomName的属性窗口,切换到列选项卡,单击增加列按钮,选择将RoomName列添加到其中,然后单击确定即可完成唯一约束的添加。
这样系统就会自动创建唯一约束。
CHECK约束
CHECK分为列约束和表约束,列约束是只对表中的某一个列进行的约束,可以在列的属性中进行设置,而表约束是对多个列进行的约束,需要在表的属性中进行设置(其实列约束也可以在表约束中设置)。
1.标准CHECK约束
对于一些常用的CHECK约束,可以直接通过设置界面来完成。
以班级表为例,ClassName每个学校有自己的命名规则,假设这里规定ClassName必须以2开头,那么需要在ClassName列上定义CHECK约束,使得其满足命名规范。
具体操作是在PD中双击Class表,打开Class的属性窗口,切换到列选项卡,选择ClassName列,单击工具栏的“属性”按钮,弹出ClassName的属性窗口,切换到StandardChecks选项卡如图:
在这个选项卡可以定义属性的标准检查约束,窗口中每项的参数的含义,如下:
参数
说明
Minimum
属性可接受的最小数
Maximum
属性可接受的最大数
Default
属性不赋值时,系统提供的默认值
Unit
单位,如公里、吨、元
Format
属性的数据显示格式
Lowercase
属性的赋值全部变为小写字母
Uppercase
属性的赋值全部变为大写字母
Cannotmodify
该属性一旦赋值不能再修改
ListOfValues
属性赋值列表,除列表中的值,不能有其他的值
Label
属性列表值的标签
2.直接编写SQL语句的CHECK约束
在前面弹出ClassName属性窗口中,单击左下角的“More”按钮,系统将弹出更多的选项卡,切换到“AdditionalChecks”选项卡,可以设置约束名和具体的约束内容,如图所示:
表级的CHECK约束与列级的CHECK约束设置类似,单击表属性窗口左下角的“More”按钮,切换到Check选项卡,设置CHECK约束的命名和SQL语句内容。
3.使用Rule创建约束
同样以班级名必须以2开头为例,通过Rule创建CHECK约束。
首先需要创建一个Rule,双击Class表,打开表的属性窗口,切换到Rules选项卡,单击“CreateaObject”按钮,系统将打开一个业务规则属性窗口,修改规则名,并将规则的类型修改为Constraint,如图所示:
然后切换到Expression选项卡,设置规则的内容为“ClassNameLIKE'2%'”,单击确定按钮即可完成Rule的设置。
切换到表属性的Check选项卡,默认约束内容中的“%RULES%”就是用来表示Rule中设置的内容,如果我们还有一些其他的CHECK约束内容,不希望在Rule中设置,而是在Check选项卡中设置,那么只需要删除%RULES%将CHECK约束内容添加进去,也可以保留%RULES%,然后在与%RULES%之间添加一个and即可。
比如规定ClassID必须小于10000,那么我们可以将Check内容设置如下:
生成的脚本如下:
createtableClass(
ClassID int notnull,
ClassName varchar(20) notnull,
constraintPK_CLASSprimarykeynonclustered(ClassID),
constraintCKT_CLASScheck(ClassID<10000),
constraintClassNameRulecheck(ClassNameLIKE'2%')
)
go
可以看到,根据Rule生成的CHECK约束与在Check选项卡中设置的约束将分别创建一个约束,相互并不影响。
默认约束
默认约束是用户在没有输入值的情况下,系统给出默认的值。
最常用的是CreateTime字段,设置默认值为getdate(),在用户创建一行数据时记录下创建时间。
例如对于选课表,需要记录下选课的时间,则可以设置ApplyTime的默认值为getdate()函数。
设置默认值约束的操作如下:
双击选课表,打开表属性窗口,选择ApplyTime字段,单击工具栏的属性按钮,打开列的属性窗口,切换到StandardChecks选项卡,在Default下拉列表框中选择getdate()即可。
至此我们所有的约束在PD中的设置都介绍完了,下一篇将介绍视图、存储过程等数据库对象。
PowerDesigner15使用时的十五个问题
PowerDesigner的主要作用一般还是数据库建模,并生成对应的数据库设计文档,可以与数据库保持同步。
一般常用的有CDM,PDM,UML建模,CDM可以转为PDM。
支持正向[生成数据库]和逆向工程[从数据库中生成],并直接关联到到数据库中,PDM可以直接和数据库进行关联,并将数据库,表,视图,触发器等数据库对象生成到数据库中,也可将这些对象更新到PDM中。
PowerDesigner的几个主要常用菜单是MODEL、DATEBASE、Tool,这三个菜单下命令使用比较多,要熟悉。
PD还可以用来画用例图,序列图,类图等UML图。
也可以画企业架构图,软件应用架构图等等图形
15个问题列表:
No.1:
是不是一定要从CDM开始设计,然后在进行PDM的设计?
NO.2:
工具栏palette不见了,如何把它找出来?
NO.3:
如何建立与数据库的关联?
NO.4:
域和数据项有何作用?
No.5:
如何生成主键的自定义增长列,SQLServer和Oracle数据分别是如何操作的?
No.6:
NAME和CODE联动,如何取消?
NO.7.如何实现字段的NAME和Comment属性互换?
NO.8:
如何修改某个对象的命名规则,比如外键,比如主键,比如触发器等?
No.9:
如何用PD生成测试数据,以便测试?
No.10如何把CODE的NAME中文也生成在脚本中,也就是列名后就是NAME的说明文字?
NO.11如何将数据库结构,表名,表的字段导出到Word中,或者生成HTML文件以便查看?
No.12如何去除生成SQL时的双引号问题,双引号在Oracle中可以保证大小写,却异常麻烦?
NO.13如何修改PD的显示样式?
No.14如何去除表名,字段的长度限制?
No.15如何进行数据库的逆向工程?
说明:
本文提到的PD基于PD15.英文版。
No1:
是不是一定要从CDM开始设计,然后在进行PDM的设计?
本人觉得没有必要,项目的大小、熟悉程度、起步和个人习惯不一样,熟练业务的,项目小的直接用PDM设计未尝不可。
NO2:
工具栏palette不见了,如何把它找出来?
这个问题我找了所有的菜单才找到,在【Tools】-【CustomizeToolbars】点击打开,列表项里的【palette】选中即可,此外,这个窗口中还可以设计对齐的方式等等。
NO3:
如何建立与数据库的关联?
详细建立:
PowerDesigner建立与数据库的连接,以便生成数据库和从数据库生成到PD中。
[Oracle10G版]
PowerDesigner建立与数据库的连接,以便生成数据库和从数据库生成到PD中。
[SQLSERVER2005版]
NO4:
域和数据项有何作用?
域和数据项的作用是为了复用而设定的,数据类型可以保持一致,比如不少表里都有经纬度,则可以定义两个通用的域,如图所示,点击【Model】-【Domains】出现如图所示,建了三个域,那么建表时可以复用,打开列的属性的时候就可以复用了,如果域的类型发生了改变,则该列的数据类型也发生改变。
数据项作用类似于此。
还有一些,比如主键递增ID
No.5如何生成主键的自定义增长列,SQLServer和Oracle数据分别是如何操作的?
SQLServer版本:
Oracle版本:
No.6NAME和CODE联动,如何取消?
要熟悉几个常用的菜单,MODEL,DATABASE,Tools,REPORT等等,在【Tools】下找到【GeneralOptions】如图所示:
NO7.如何实现字段的NAME和Comment属性互换?
还有一个,如果你只想生成的时候,把NAME自动更新到Comment列,是这样操作的:
NO.8:
如何修改某个对象的命名规则,比如外键,比如主键,比如触发器等?
下面以主键为例,一般每个表都有一个主键,那主键的命名规则如何修改定义呢,
菜单:
【Database】--【EditCurrentDBMS】,如图所示:
No.9:
如何用PD生成测试数据,以便测试?
Powerdesigner中如何生成测试数据
No.10:
如何把CODE的NAME中文也生成在脚本中,也就是列名后就是NAME的说明文字?
修改字段生成规则。
要给每个字段都添加一个注释的话,如图所示:
NO.11:
如何将数据库结构,表名,表的字段导出到Word中,或者生成HTML文件以便查看?
这个涉及到数据库的脚本中,也就是将表生成数据库文档,可以是HTML格式,也可以是DOC格式.如图所示:
如果需要添加数据类型,注释等更多的信息,右键,选择【layout】,选择你需要的显示的信息即可。
No.12:
如何去除生成SQL时的双引号问题,双引号在Oracle中可以保证大小写,却异常麻烦?
生成SQL语句时,表名和字段名都是带双引号,这个在ORACLE中以后使用时都要带上""非常的麻烦,必须生成脚本时去除:
【Database】--【EditCurrentDBMS】,如图所示:
NO.13如何修改PD的显示样式?
设计PDM文档时,样式不一样,这个在哪里设置呢,如图所示,比如修改表的显示样式。
【Tools】--【Displaypreference】,
点击修改按钮,就可以修改表的样式了,包括字体大小,颜色,线的形状、阴影等等。
No.14如何去除表名,字段的长度限制?
当生成脚本时,有的表名或者列名莫名其妙的缩短了,这时因为限定了长度,这是把双刃剑,如果要强制表名或者字段名在某个范围内,这个作用刚好,如果不想限制,就需要修改那个限制的值了。
【Database】--【EditCurrentDBMS]--依次找到:
Script\Objects\Table
No.15如何进行数据库的逆向工程?
如何进行数据库,比如ORACLE,SQLSERVER的逆向工程,将数据库导入到PD中
依次选择PhysicalOptions-->Physical_Proerties-->segment_attributes_clause-->tablespace这个选项,双击然后在右边单击“tablespace”,在最下面有一行tablespace部分,单击下拉框右边的类似小方块似的东东,出来一个“ListofTablespaces”,可以在里面添加表空间。
然后在刚才那个下拉框里面既可以选择相应的表空间了。
-----以上是创建表及索引所需要的表空间和设置表的表空间。
-----单击索引或主键,在弹出的“indexproperties”,然后选择“Physical_Proerties”选项卡,展开下面的“index_attributes”,找到tablespace(
--在删除表时不用存放到回收站中
select'droptable'||u.table_name||'purge;'fromuser_tablesuwhereu.table_namelike'PUB%';
数据量估算方法
先插入数据1000行记录,通过user_segment视图查找出当前表的大小。
然后预估以后的数据量大小为500万行记录,估算一下该表可能的数据量
大小及所占用的块数。
selectsegment_name,bytes,blocksfromuser_segmentwheresegment_name='table_name'.
通过bytes即可知道当前1000行记录的大小(large_len)。
500万数据量大小=large_len/1000(行数)*5000000bytes
500万数据所用块数1=500万数据量大小/1024/8预估出来的一个块数(没有折损的情况下),
500万数据所用块数2=500万数据所用块数1*8/6预估出来的一个块数(按照实际存储量为6K,正常一个块大小为8K);
PowerDesigner如何将消失的工具栏显示出来
----
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PowerDesigner 设计 技巧
![提示](https://static.bdocx.com/images/bang_tan.gif)