今天上午主要学习了CDM由于所用嘚版本和作者的版本不同,我用的是PowerDesigner15.所以在学习的过程中自己进行了一下整理并截图。 1) 概念数据模型 概念数据模型CDM(Conceptual Database Model)
以下我们要完成對示例论坛系统的数据库设计工作首先让我们建立目标系统的概念数据模型(CDM)。
在进行CDM演示之前让我先简要介绍概念数据模型(CDM)嘚概 念。我们进行数据库设计时一般都是概念层次(Conceptual level)开始的。在概念层次上你无须考虑数据库的实际物理执行细节。概念模型(CDM)描述了与任何软件或数据存储系统无关的数据库整体逻辑结构 通常包含了与物理数据库无关的数据对象,提供了一种对用于运行企业或業务行为的形象化的表达方式
(1)通过创建实体关系图表(E-R)来描述数据的组织结构。
(2)能够校验数据设计的合理性
(3)生成指定了相应物理实现数据库的物理数据模型(PDM)
(4)能够生成用UML标准描述CDM中对象的面向对象模型(OOM)
(5)为在不同的设計阶段创建另一个模型版本,可以生成概念数据模型(CDM)
打开New窗口,在左边模型选择列中选中Conceptual Data Model,单击OK即确认创建概念数据模型。
(2) 双击资源浏览窗口中新创建的CDM名称图标打开CDM模型属性窗口,进行属性信息设置如下图:
对刚创建的CDM进行详细之前有必要先说说囿关实体属性命名问题。
PowerDesigner默认在CDM中不能存在相同名称的实体属性这也是考虑到可能产生的一些如主键外键等名称冲突问题,但当我們进行实际数据库设计时可能会多次使用相同数据项(DataItem)便于理解各实体。为此需要对更改PowerDesigner设置软件默认为DataItem不能重复使用(重名),需要進行以下操作:
同时该设置均是面向特定模型的即针对当前模型有效,若希望在其它模型中也有此命名设置则需要重新进行设置。不過在Check Model时如果选择全部Check,则依旧会报DataItem重名的错误信息这时需要我们在人为检查确认数据项无误时,可以在选择不对 DataItem不检查如下图示:[v3]
各种数据类型对应匹配(这里只给出与SQL Server中的常用对应类型,其它DBMS可以使用类似处理)
3) 实体及各类关系
实体(Entity) (1) 在新创建的CDM中选择Palette工具面板中的Entity工具,再在模型区域淡季鼠标左键即添加了一个实体图符。 (2) 单击鼠标右键或单击面板中Pointer工具使鼠标处于选择圖形状态。
(3) 双击新创建的实体图符打开实体属性窗口,输入实体名称和代码
(4) 单击OK,即完成实体创建过程
继续仩述操作,创建多个实体分别设置为不同名称,具体信息参考示例文档
实体创建完成后资源浏览窗口中层次结构如下所示:
現在编辑各实体的详细内容,如属性组实体间关系等。
(1) 以User实体为例打开实体User属性窗口,进入Attributes属性页如下图示:
(2) 单擊属性窗口工具栏中Add a Row工具,即在属性实体属性列表中添加了一个属性同时设置该属性信息,如数据类型是否为主标识符,是否不可为涳等
(3) 详细设置新添加的属性为UserID,作为系统唯一标识区别的用户编号,同时选择P,M,数据类型(DataType)选择Integer如下图:
(4)对属性列进荇更为详细的设置,可以通过单击对应属性列左边箭头进入Attribute Properties窗口,可以进行更为精确详细的设置如数据上下限,精度等如下图:
只要在列表中选择想要显示的项目即可完成设置。
标识符(Identifiers) 标识符是能够用于唯一标识实体的每条记录的一个实体属性或实体属性的集合CDM中的标识符等同于PDM中的主键(Primary Key)或候选键(Alternate
Key)。每个实体至少要有一个标识符若一个实体中只存在一个标识符,它就自动被默认指派为该实体的主标识符(Primary Identifier)
(1) 在双击图表中对应实体以显示实体属性窗口。
(2) 在当前实体属性窗口中选择Identifiers属性栏洳下所示:
(3) 可以通过单击工具栏上Property 工具或双击所要选择的标识符栏,进入标识符属性编辑窗口
(4) 选择Attributes属性,可以看到当湔标识符所关联的属性列表如下图:
(5) 单击工具栏中Add Attributes工具,即可以进行为当前标识符添加属性
关系(Relationship) 关系(Relationship)表示实体間的连接。如在一个人力资源管理系统的CDM中员工是团队中的成员,关系"Member"连接了员工(Employee)和团队(Team)这种关系表述了每个雇员在团队中笁作且每个团队都由员工组成。
建立关系(Relationship)这里以用户实体(User)和帖子实体(Post)为例
(2) 在实体User上单击鼠标左键按住不放,拖拽鼠标至实体Post上后才松开这样即建立了User和Post之间的Relationship.
(3) 单击鼠标右键或左键单击Palette面板上的Pointer工具,使鼠标返回至选择状态
(4) 雙击图表中的刚建立的两实体之间关系(Relationship)以打开关系属性窗口,便于对关系进行详细定义
(5) 输入相应的Name和Code,选择Detail选项进入如丅属性编辑页:
(7) 确定修改后,单击OK,即可在模型图表中显示新建的Relationship
当然你也可以选择其它节点,实现对图符的显示属性设置
各种类型关系(Relationship) 这部分是比较令人头疼的,不太好懂需要投入较多时间研究。
自反关系(Reflexive relationship) 是一种实体和它自身的关系這里用员工的管理概念来表述管理人员管理员工,同时管理人员也属于员工范畴
(2) 在实体内单击鼠标左键且按住不放,将鼠标拖放至实体旁的空白位置后松开鼠标
确认修改后,最后在单击Display Preferences窗口的OK按纽后会Change Formats选择对话框若只要将修改应该至当前的自反图符,只需选择所选定图符(Selected symbols)即可
强制关系(Mandatory relationship) 以上其它关系不再赘述,需要在实际使用过程加以运用才能加深进一步的理解同时以上知识點和关系型数据库的理论知识密切,PowerDesigner的这些功能只是对应于这些理论的一种运用映射
关系(Association) Association也是一种实体间的连接,在Merise模型方法學理论中Association是一种用于连接分别代表明确定义的对象的不同实
体,这种连接仅仅通过另一个实体不能很明确地表达而通过"事件(Event)"连接來表示。下面通过示例论坛系统的用户实体(User)和论坛栏目 (ForumColumn)实体的Association来讲解示例论坛系统中通过一个Association来表示目标系统中论坛栏目对应嘚版主关 系,包括了属性创建时间(DateCreated)用于记录版主添加的时间
(2) 在实体User内单击鼠标左键且按住不放,拖放鼠标至另一实体ForumColumn上松开鼠标左键,即在两实体间创建了Association如下图:
按类似方法可以创建论坛栏目实体(ForumColumn)和角色实体(Role)之间的Association。
继承(Inheritance) Inheritance允许你萣义一个实体为另一个更一般(常规)的特例涉及到继承的实体之间有着共同相似的特征,但却是不同的超类(或父类)指那些包含囲同特征的更一般的类,而特例则被成为子类型包含了一些更为具体和特殊的特例。
关于继承方面的例子不少稍具有面向对象观念的都应该能够理解,不再赘述
而PowerDesigner中关于继承方面的操作过程在这只作简要介绍:
(2) 左键单击子类型,按住鼠标不放拖放臸鼠标至父类型实体图符中,松开鼠标即完成了一个Inheritance Link的创建
(3) 要再次添加另一子实体时,可以单击Inheritance工具从半圆形图处拖动鼠标臸另一子类型实体,然后松开鼠标即可
(4) 双击新创建的继承图符或实体之间的连接线即可打开Inheritance Properties编辑窗口。
(5) 输入相应Name和Code唍成基本设置,单击OK即完成创建过程。
现在已经基本上完成了目标系统的概念建模过程为此下一步我们需要校验已经设计好的模型,便于能够正确地转换为物理数据模型(PDM)
检验模型(Check)
在这你可以对需要Check的项目进行自定义选择。
(2) 确认选择后單击OK,则PowerDesigner开始对模型进行检验。
(3) 完成检验后PowerDesigner会将检验结果在输出列表中显示出来
我们可以根据所列出的错误信息对模型进行修改,错误信息分别有Error,Warning, Automatic correction三种同时只要经过检验后没有Error一类的错误信息,我们就可以将该CDM转化为对应PDM
当你从一个CDM生成PDM时,PowerDesigner将CDM中的对潒和数据类型转换为PDM对象和当前DBMS支持的数据类型
关系(Relationship) 引用(Reference) 同一个表中的两列不能有相同的名称,如果因为外键迁移而导致列名沖突PowerDesigner会自动对迁移列重命名,新列名由原始实体名的前三个字母 加属性的代码名组成主标识符在生成PDM中的主键和外键,非主标识符则對应生成候选键
在PDM中生成的键类型取决于CDM中用于定义一个Relationship的基数和依赖类型。[v13]
在非依赖性关系中"一"端的实体主标识符将转化為:
(1) 由关系中"一(one)"端的实体生成的表的主键(Primary key)
(2) 由关系中"多(many)"端的实体生成的表的外键(Foreign key)。
在依赖性关系中被依赖端的主标识符转化为主键,依赖端则产生一个与被依赖端主标识符同名称的字段同时作为同时作为依赖端的主键和外键如果依賴端实体中已经存在主标识符转化为主键,则该键同主键共同组成主键同时作为外键。
在非依赖性多对多关系中各实体的主标识符(Primary key)迁移至一个新生成的连接表中都作为外键,同时共同组成这个新连接表的主键各实体的主标识符也转化为其所生成表的主键(Primary key)。下圖所示CDM每个雇员可以是一个或多个团队的成员,同时每个团队也可能包含一个或多个的雇员
在非依赖性一对一关系中,如果没有萣义支配角色(Dominant role)的方向则各实体的主标识符均自动迁移转化为另一实体生成的表的外键。
个人觉得在生成PDM过程中有关生成主键外键等问题比较棘手,我自己在生成该示例论坛系统的PDM时就遇到这方面问题后来在多次对一些设计得比较优 秀的开源系统进行反向工程,然後慢慢研究借鉴发现自己在设计过程的一些问题,因此觉得这方面只有多多研究才能逐渐得心应手
准备差不多了,开始生成我们需要的PDM
(5) 单击Selection页,选择需要进行转化的对象
(6) 确认各项设置后,单击确定即生成相应的PDM模型。
model下拉框选择将要更新的PDM如下图:
最后我们在CDM部分的工作应该就是根据所建立的概念模型生成文档了,文档是作为设计成果的输出也用于开发小组成员交鋶的媒介,其重要性不能忽视这方面我们可以参考前面生成报告(Report)方面的内容。
[v1]关于CDM功能光靠描述看不能深刻理解,希望在以後的操作中能够深刻理解
[v3]这个地方一直都没有看懂。不知道怎么操作所有这个图片没有办法截取。
[v4]这里也是看了很久都没有看清楚不知道怎么操作!
[v8]这个我是从头操作的的,加上了Tools
[v9]不知道怎么回事,我的这个工具是灰色的不能用。所有下面没有辦法继续
[v11]关于这个实体属性我没有弄明白。
[v12]双击连接线会出现如下图。
[v13]关于这几个关系还要细看。没有很搞懂这里嘚截图是我直接截教程上面的图片。
|