还剩20页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
使用PowerDesigner设计ER图详细教程
(1)
一、概念数据模型概述数据模型是现实世界中数据特征的抽象数据模型应该满足三个方面的要求1)能够比较真实地模拟现实世界2)容易为人所理解3)便于计算机实现概念数据模型也称信息模型,它以实体-__Entity-RelationShip简称E-R理论为基础,并对这一理论进行了扩充它从用户的观点出发对信息进行建模,主要用于数据库的概念级设计通常人们先将现实世界抽象为概念世界,然后再将概念世界转为机器世界换句话说,就是先将现实世界中的客观对象抽象为实体Entity和__Relationship它并不依赖于具体的计算机系统或某个DBMS系统,这种模型就是我们所说的CDM;然后再将CDM转换为计算机上某个DBMS所支持的数据模型,这样的模型就是物理数据模型即PDMCDM是一组严格定义的模型元素的__,这些模型元素精确地描述了系统的静态特性、动态特性以及完整性约束条件等,其中包括了数据结构、数据操作和完整性约束三部分1)数据结构表达为实体和属性;2)数据操作表达为实体中的记录的插入、删除、修改、查询等操作;3)完整性约束表达为数据的自身完整性约束(如数据类型、检查、规则等)和数据间的参照完整性约束(如__、继承__等);
三、实体、属性及标识符的表达http://www.dezai.cn/UploadFiles/
200812413341734.jpg\t_blank介绍PowerDesigner概念数据模型以及实体、属性创建
一、新建概念数据模型1)选择File--New弹出如图所示对话框,选择CDM模型(即概念数据模型)建立模型http://www.dezai.cn/UploadFiles/
200812413342621.jpg\t_blank2)完成概念数据模型的创建以下图示,对当前的工作空间进行简单介绍(以后再更详细说明)http://www.dezai.cn/UploadFiles/
200812413343371.jpg\t_blank3)选择新增的CDM模型,右击,在弹出的菜单中选择“Properties”属性项,弹出如图所示对话框在“General”标签里可以输入所建模型的名称、代码、描述、创建者、版本以及默认的图表等等信息在“Notes”标签里可以输入相关描述及说明信息当然再有更多的标签,可以__More按钮,这里就不再进行详细解释
二、创建新实体1)在CDM的图形窗口中,单击工具选项版上的Entity工具,再单击图形窗口的空白处,在单击的位置就出现一个实体符号__Pointer工具或右击鼠标,释放Entitiy工具如图所示http://www.dezai.cn/UploadFiles/
200812413346784.jpg\t_blank2)双击刚创建的实体符号,打开下列图标窗口,在此窗口“General”标签中可以输入实体的名称、代码、描述等信息http://www.dezai.cn/UploadFiles/
200812413346738.jpg\t_blank
三、添加实体属性1)在上述窗口的“Attribute”选项标签上可以添加属性,如下图所示http://www.dezai.cn/UploadFiles/
200812413346472.jpg\t_blank注意数据项中的“添加属性”和“重用已有数据项”这两项功能与模型中DataItem的Uniquecode和Allowreuse选项有关P列表示该属性是否为主标识符;D列表示该属性是否在图形窗口中显示;M列表示该属性是否为强制的,即该列是否为空值如果一个实体属性为强制的,那么,这个属性在每条记录中都必须被赋值,不能为空2)在上图所示窗口中,__插入属性按钮,弹出属性对话框,如下图所示http://www.dezai.cn/UploadFiles/
200812413348811.jpg\t_blank注意这里涉及到域的概念,即一种标准的数据结构,它可应用至数据项或实体的属性上
一、定义属性的标准检查约束标准检查约束是一组确保属性有效的表达式在实体属性的特性窗口,打开如图所示的检查选项卡http://www.dezai.cn/UploadFiles/
200812413351965.jpg\t_blank在这个选项卡可以定义属性的标准检查约束,窗口中每项的参数的含义,如下参数说明Minimum属性可接受的最小数__ximum属性可接受的最大数Default属性不赋值时,系统提供的默认值Unit单位,如公里、吨、元For__t属性的数据显示格式Lowercase属性的赋值全部变为小写字母Uppercase属性的赋值全部变为大写字母Cannotmodify该属性一旦赋值不能再修改ListOfValues属性赋值列表,除列表中的值,不能有其他的值Label属性列表值的标签
二、定义属性的附加检查当Standardchecks或Rules不能满足检查的要求时,可以在AdditionalChecks选项卡的Server子页上,通过SQL语句中使用%MIN__X%、%LISTVAL%、%RULES%、%UPPER%、%LOWER%几个变量来定义Standard和Rule如图所示http://www.dezai.cn/UploadFiles/
200812413353150.jpg\t_blank%MIN__X%、%LISTVAL%、%UPPER%、%LOWER%在StandardCheck中定义的Minimum和__ximum、Listvalues、uppervalues、lowervalues%RULES%在Rules特性窗口Expression选项卡中定义的有效性规则表达式
一、标识符标识符是实体中一个或多个属性的__,可用来唯一标识实体中的一个实例要强调的是,CDM中的标识符等价于PDM中的主键或候选键每个实体都必须至少有一个标识符如果实体只有一个标识符,则它为实体的主标识符如果实体有多个标识符,则其中一个被指定为主标识符,其余的标识符就是次标识符了
二、如果定义主、次标识符1)选择某个实体双击弹出实体的属性对话框在Identifiers选项卡上可以进行实体标识符的定义如下图所示http://www.dezai.cn/UploadFiles/
200812413353427.jpg\t_blank2)选择第一行“主标识符”,__属性按钮或双击第一行“主标识符”,弹出属性对话框,如图所示http://www.dezai.cn/UploadFiles/
200812413354790.jpg\t_blank3)选择Attributes选项卡,再__“AddAttributes”工具,弹出如图所示窗口,选择某个属性作为标识符就行了http://www.dezai.cn/UploadFiles/
200812413355633.jpg\t_blank
一、数据项数据项(DataItem)是信息存储的最小单位,它可以附加在实体上作为实体的属性注意模型中允许存在没有附加至任何实体上的数据项
二、新建数据项1)使用“Model”---DataItems菜单,在打开的窗口中显示已有的数据项的列表,__“AddaRow”按钮,创建一个新数据项,如图所示http://www.dezai.cn/UploadFiles/
200812413356660.jpg\t_blank2)当然您可以继续设置具体数据项的Code、DataType、Length等等信息这里就不再详细说明了
三、数据项的唯一性代码选项和重用选项使用Tools---ModelOptions-ModelSettings在DataItem组框中定义数据项的唯一性代码选项UniqueCode与重用选项(AllowReuse)注意如果选择UniqueCode复选框,每个数据项在同一个命名空间有唯一的代码,而选择Allowreuse,一个数据项可以充当多个实体的属性http://www.dezai.cn/UploadFiles/
200812413357337.jpg\t_blank
四、在实体中添加数据项1)双击一个实体符号,打开该实体的属性窗口2)单击Attributes选项卡,打开如下图所示窗口http://www.dezai.cn/UploadFiles/
20081241340846.jpg\t_blank注意AddaDataItem与ReuseaDataItem的区别在于AddaDataItem情况下,选择一个已经存在的数据项,系统会自动__所选择的数据项如果您设置了UniqueCode选项,那系统在__过程中,新数据项的Code会自动生成一个唯一的号码,否则与所选择的数据项完全一致ReuseaDataItem情况下,只引用不新增,就是引用那些已经存在的数据项,作为新实体的数据项
一、____(Relationship)是指实体集这间或实体集内部实例之间的连接实体之间可以通过__来相互关联与实体和实体集对应,__也可以分为__和__集,__集是实体集之间的__,__是实体之间的__,__是具有方向性的__和__集在含义明确的情况之下均可称为__按照实体类型中实例之间的数量对应关系,通常可将__分为4类,即一对一(ONETOONE)__、一对多(ONETO__NY)__、多对一(__NYTOONE)__和多对多__(__NYTO__NY)
二、建立__在CDM工具选项板中除了公共的工具外,还包括如下图所示的其它对象产生工具http://www.dezai.cn/UploadFiles/
20081241342987.jpg\t_blank在图形窗口中创建两个实体后,单击“实体间建立__”工具,单击一个实体,在按下鼠标左键的同时把光标拖至别一个实体上并释放鼠标左键,这样就在两个实体间创建了__,右键单击图形窗口,释放Relationship工具如下图所示http://www.dezai.cn/UploadFiles/
20081241342304.jpg\t_blank
三、四种基本的__即一对一(ONETOONE)__、一对多(ONETO__NY)__、多对一(__NYTOONE)__和多对多__(__NYTO__NY)如图所示http://www.dezai.cn/UploadFiles/
20081241342982.jpg\t_blank
四、其他几类特殊__除了4种基本的__之外,实体集与实体集之间还存在标定__(IdentifyRelationship)、非标定__(Non-IdentifyRelationShip)和递归__(RecursiveRelationship)标定__每个实体类型都有自己的标识符,如果两个实体集之间发生__,其中一个实体类型的标识符进入另一个实体类型并与该实体类型中的标识符共同组成其标识符时,这种__则称为标定__,也叫依赖__反之称为非标定__,也叫非依赖__注意在非标定__中,一个实体集中的部分实例依赖于另一个实例集中的实例,在这种依赖__中,每个实体必须至少有一个标识符而在标定__中,一个实体集中的全部实例完全依赖于另个实体集中的实例,在这种依赖__中一个实体必须至少有一个标识符,而另一个实体却可以没有自己的标识符没有标识符的实体用它所依赖的实体的标识符作为自己的标识符换句话来理解,在标定__中,一个实体(选课)依赖一个实体(学生),那么(学生)实体必须至少有一个标识符,而(选课)实体可以没有自己的标识符,没有标标识符的实体可以用实体(学生)的标识符作为自己的标识符http://www.dezai.cn/UploadFiles/
20081241344580.jpg\t_blank递归__递归__是实体集内部实例之间的一种__,通常形象地称为自反__同一实体类型中不同实体集之间的__也称为递归__例如在“职工”实体集中存在很多的职工,这些职工之间必须存在一种__与被__的关系又如“学生”实体信中的实体包含“班长”子实体集与“普通学生”子实体集,这两个子实体集之间的__就是一种递归__创建递归__时,只需要单击“实体间建立__”工具从实体的一部分拖至该实体的别一个部分即可如图http://www.dezai.cn/UploadFiles/
20081241345999.jpg\t_blank
五、定义__的特性在两个实体间建立了__后,双击__线,打开__特性窗口,如图所示
六、定义__的角色名在__的两个方向上各自包含有一个分组框,其中的参数只对这个方向起作用,RoleName为角色名,描述该方向__的作用,一般用一个动词或动宾组表如“学生to课目”组框中应该填写“拥有”,而在“课目To学生”组框中填写“属于”(在此只是举例说明,可能有些用词不太合理)
七、定义__的强制性__ndatory表洋这个方向__的强制关系选中这个复选框,则在__线上产生一个__线垂直的竖线不选择这个复选框则表示__这个方向上是可选的,在__线上产生一个小圆圈
八、有关__的基数__具有方向性,每个方向上都有一个基数举例,“系”与“学生”两个实体之间的__是一对多__,换句话说“学生”和“系”之间的__是多对一__而且一个学生必须属于一个系,并且只能属于一个系,不能属于零个系,所以从“学生”实体至“系”实体的基数为“11”,从__的另一方向考虑,一个系可以拥有多个学生,也可以没有任何学生,即零个学生,所以该方向__的基数就为“0n”如图所示http://www.dezai.cn/UploadFiles/
20081241347617.jpg\t_blankCDM是大多数__者使用PD时最先创建的模型,也是整个数据库设计最高层的抽象CDM是建立在传统的ER图模型理论之上的,ER图中有三大主要元素实体型,属性和__其中实体型对应到CDM中的Entity,属性对应到CDM中每个Entity的Attribute,在概念上基本上是一一对应的但在__上,CDM有了比较大的扩展,除了保留ER图原有的RelationShip概念之外,还增加了Association,Inheritan__两种实体关系,下面就让我们分别看看这些关系的用法和之间的区别(下图中被标红的工具栏按钮就是用来向实体中添加这些关系的) 另外,在介绍所有这些CDM中的元素之前,笔者先给出一个很简单的CDM图,是对我们最最熟悉的学校场景的一个建模,下文中提到的所有概念在图中都有体现,大家在看下文的时候可以对照着来看一.RelationShip__ 先给出PD手册里对__的定义“Arelationshipisalinkbetweenentities.ForexampleinaCDMthat__nageshu__nresour__stherelationshipMemberlinkstheentitiesEmployeeandTeambecauseemployeescanbemembersofteams.Thisrelationshipexpressesthateachemployeeworksinateamandthateachteamhasemployees.”可见,也许__的概念真的太简单了吧,所以反而不那么好表述,所以PD的文档里也是用一个例子来说明出现了什么样的情况我们就认为两个实体间是有__的 当我们提起实体间__的时候,最先想到的恐怕是onetoone,oneto__ny和__nyto__ny这三种__类型,这些__类型也是大家最熟悉的笔者对ER图原本的概念并不精通,但在CDM中,__还有另外三个可以设置的属性__ndatory(强制性__)dependent(依赖性__/标定关联)和dominant(统制__)这些属性对后面PDM的生成都有比较大的影响,需要我们一一有所了解它们都是在__的属性控制面板中设定的,见下图http://www.dezai.cn/UploadFiles/
20081241349141.gif\t_blank
1.__ndatory __是否具有强制性,指的是实体间是不是一定会出现这种__;或者换句话说,当我们在谈及一个__的应用场景的时候,__对应的那两个实体型的实体实例的个数可不可能为零也许这样的解释还是有点抽象,让我们举两个__的例子,一个是对两边的实体都有强制性的,另一个则不然
(1)教师--学生__ 这个__首先是一个多对多__,因为每个老师可以教多个学生,每个学生也都有多个老师来负责他们的学业同时,这个__对教师和学生都是强制性的,也就是说,不存在任何一个老师,他不负责任何一个学生的教学;也不存在任何一个学生,他没有任何一个任课老师
(2)学生--俱乐部__ 这个__也是一个多对多关系,但它对学生这个实体型而言就不是强制的(Optional可选的)每个俱乐部都有至少一个学生参加,但并不是每个学生都要去参加俱乐部的活动完全可以有一些学生,他们什么俱乐部都没参加上面的例子主要是从概念的角度来区分了__ndatory和optional的区别实际上如果把这个模型对应到我们最后生成的表,如果A-B间的__对A是__ndatory的话,那么如果在A里面如果包含B的外键,这个外键不能为空值,反之可以为空值后面我们谈到PDM和实际数据库的时候,大家会看到这一点
2.dependent 每一个Entity型都有自己的Identifier,如果两个Entity型之间发生关联时,其中一个Entity型的Identifier进入另一个Entity型并与该Entity型中的Identifier共同组成其Identifier时,这种关联称为标定关联也叫依赖性关联dependentrelationship一个Entity型的Identifier进入另一个Entity型后充当其非Identifier时,这种关联称为非标定关联也叫非依赖关联 概念的定义说起来还是有些拗口,说白了其实就是主-从表关系,从表要依赖于主表比如在我们系统里要记录教师休假的情况,有一个实体型Holiday,其属性包括休假的开始时间和天数,每次有教师休假的时候,都要在这个表留下记录从我们的场景描述中可以看到,实体型假期必须依附于实体型教师,即对于每一个假期实例,必须指向某一个教师实例 对于依赖型__,必须注意它不可能是一个多对多__,在这个__中,必须有一个作为主体的实体型一个dependent__的从实体可以没有自己的identifier.
3.dominant 这个__属性是最为简单的,它仅作用于一对一__,并指明这种__中的主从表关系在AB两个实体型的__中,如果A--B被指定为dominant,那么A为这个一对一__的主表,B为从表,并且在以后生成的PDM中会产生一个引用(如果不指定dominant属性的话会产生两个引用)比如老师和班级之间的__,因为每个班级都有一个老师做班主任,每个老师也最多只能做一个班级的班主任,所以是一个一对一关系同时,我们可以将老师作为主表,用老师的工号来唯一确定一个班主任__二.Association(关联) 先来看一下PD给association的定义“Anassociationisaconnectionbetweenentities.IntheMerisemodelingmethodologyanassociationisusedtoconnectseveralentitiesthateachrepresentsclearlydefinedo__ectsbutarelinkedbyaneventwhich__ynotbesoclearlyrepresentedbyanotherentity.” 在上一小段提到的那些RelationShip,在很多情况下(特别是多对多关系中),我们会把__专门提出来,作为一个实体型放在两个需要被关联的实体型中间(在PD中,选中任何一个__,在右键的弹出菜单中选择“ChangetoEntity”命令即可完成__转实体的操作)但有的时候,把若干个实体型之间的__抽象为一个实体型可能不太合适,这个时候你可以选择为这些实体型建立一个association,那么在生成PDM的时候,所有这些相关实体型的identifier都会被加入到association对应生成的表模型中所以,说白了,其实association就是实体型的一种特例,用来在建模的时候更确切的表达实体间的关联信息在PD的文档中举了一个录音带、顾客、商店三个实体型在租借录音带这个场景上发生关联,然后把租借定义为上述三个实体型之间的association的例子,非常确切在我们的学校模型里,我定义了家访做为老师和学生实体型中间的一个association,在接下来产生的PDM中大家就可能看到这种定义所产生的效果三.Inheritan__(继承) 这种关系在概念层面是最容易理解的了,本文就不赘述了前面已经介绍了CDM中关于实体间关系的主要内容,接下来我们就来看看根据这个CDM所生成的PDM是一个什么样子上图中所有标红的部分是我们最应该__的内容,因为他们都是由于我们对实体型间的关系的定义而产生的,下面给出一些简单的说明
1.“师生关系”和“学生俱乐部”这两个表是由于我们的多对多关系而产生的
2.“假期”表的“工号”字段是由于我们将教师-假期关系指定为dependent而产生的
3.“班级”表的“工号”字段是由于我们将教师-班级关系制定为dominant而产生的
4.“家访”表中的“工号”和“学号”字段是由于家访是教师和学生实体型的association而产生的另外,记得我们在提到dominant属性的时候说过,一个没指定dominant方向的一对一__将产生两个引用,下面我们就把原本的CDM中的教师-班级关系进行一个小小的修改,去掉这个relationship的dominant定义,那么最终产生的PDM中教师表和班级表将互相包含对方的主键由于我们的班级表没有自己的主键,所以只能在班级表中看到多出来的列,截图如下http://www.dezai.cn/UploadFiles/
200812413410370.gif\t_blank转自。