- 浏览: 842555 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (530)
- Java编程 (64)
- C/C++/D (6)
- .Net/C# (9)
- Ruby (12)
- JavaScript (77)
- XML (1)
- JSON (1)
- Ajax (17)
- ExtJs (81)
- YUI (1)
- JQuery (7)
- DWR (1)
- HTML (7)
- CSS (7)
- Database (6)
- PowerDesigner (23)
- DB2 (2)
- Oracle (57)
- MS SQL Server (8)
- MySQL (6)
- JSP/Servlet/JSTL/TagLib (3)
- Spring (1)
- Hibernate (0)
- iText (0)
- Struts (0)
- Struts2 (0)
- iReport (0)
- FreeMarker (0)
- HttpClient (1)
- POI (6)
- FckEditor (15)
- Eclipse / MyEclipse (10)
- IntelliJ IDEA (0)
- NetBeans (0)
- Tomcat (11)
- WebLogic (1)
- Jboss (3)
- jetty (4)
- IIS (2)
- CVS/VSS (1)
- FTP (1)
- Windows/DOS (6)
- Linux/Unix (0)
- 软件建模 UML (0)
- Design Pattern & Thinking In Programming (10)
- 数据结构与算法 (12)
- 软件项目管理 (9)
- 行业应用解决方案 (3)
- 电脑软件与故障解决 (13)
- 编程语言 (1)
- 十万个为什么 (3)
- JBPM (2)
- sysbase (2)
- JDBC (8)
- Ant (2)
- Case-计算机辅助软件工程 (1)
- WebService (4)
- 浏览器 (1)
最新评论
-
gaoqiangjava:
同一楼,还请大手帮解决
JAVA读取word文件 -
hyl523:
// 判断数组中的第一个值是否未定义,如果未定义,便定义为空对 ...
javascript面向对象之二 命名空间 -
ping12132200:
ping12132200 写道我抱着个错不是因为:body标签 ...
extjs在IE报对象不支持此属性或方法 -
ping12132200:
我抱着个错不是因为:body标签内的第一个元素不能为文本tex ...
extjs在IE报对象不支持此属性或方法 -
fireinjava:
呀,不错,转走了,谢谢啦~
利用OpenOffice将word转换成PDF
CDM是大多数开发者使用PD时最先创建的模型,也是整个数据库
设计
最高层的抽象。CDM是建立在传统的ER图模型理论之上的,ER图中有三大主要元素:实体型,属性和联系。其中实体型对应到CDM中的Entity,属性对应到CDM中每个Entity的Attribute,在概念上基本上是一一对应的。但在联系上,CDM有了比较大的扩展,除了保留ER图原有的RelationShip概念之外,还增加了Association,Inheritance两种实体关系,下面就让我们分别看看这些关系的用法和之间的区别(下图中被标红的工具栏按钮就是用来向实体中添加这些关系的)。
另外,在介绍所有这些CDM中的元素之前,笔者先给出一个很简单的CDM图,是对我们最最熟悉的学校场景的一个建模,下文中提到的所有概念在图中都有体现,大家在看下文的时候可以对照着来看:
一.
RelationShip(联系)
先给出PD手册里对联系的定义:“A relationship is a link between entities. For example, in a CDM that manages human resources, the relationship Member links the entities Employee and Team, because employees can be members of teams. This relationship expresses that each employee works in a team and that each team has employees.” 可见,也许联系的概念真的太简单了吧,所以反而不那么好表述,所以PD的文档里也是用一个例子来说明出现了什么样的情况我们就认为两个实体间是有联系的。
当我们提起实体间联系的时候,最先想到的恐怕是one to one,one to many 和many to many这三种联系类型,这些联系类型也是大家最熟悉的。笔者对ER图原本的概念并不精通,但在CDM中,联系还有另外三个可以设置的属性:mandatory(强制性联系), dependent(依赖性联系/标定关联) 和dominant(统制联系)。这些属性对后面PDM的生成都有比较大的影响,需要我们一一有所了解。它们都是在联系的属性控制面板中设定的,见下图:
先给出PD手册里对联系的定义:“A relationship is a link between entities. For example, in a CDM that manages human resources, the relationship Member links the entities Employee and Team, because employees can be members of teams. This relationship expresses that each employee works in a team and that each team has employees.” 可见,也许联系的概念真的太简单了吧,所以反而不那么好表述,所以PD的文档里也是用一个例子来说明出现了什么样的情况我们就认为两个实体间是有联系的。
当我们提起实体间联系的时候,最先想到的恐怕是one to one,one to many 和many to many这三种联系类型,这些联系类型也是大家最熟悉的。笔者对ER图原本的概念并不精通,但在CDM中,联系还有另外三个可以设置的属性:mandatory(强制性联系), dependent(依赖性联系/标定关联) 和dominant(统制联系)。这些属性对后面PDM的生成都有比较大的影响,需要我们一一有所了解。它们都是在联系的属性控制面板中设定的,见下图:
1.mandatory
联系是否具有强制性,指的是实体间是不是一定会出现这种联系;或者换句话说,当我们在谈及一个联系的应用场景的时候,联系对应的那两个实体型的实体实例的个数可不可能为零。也许这样的解释还是有点抽象,让我们举两个联系的例子,一个是对两边的实体都有强制性的,另一个则不然。
(1)教师--学生 联系
这个联系首先是一个多对多联系,因为每个老师可以教多个学生,每个学生也都有多个老师来负责他们的学业。同时,这个联系对教师和学生都是强制性的,也就是说,不存在任何一个老师,他不负责任何一个学生的教学;也不存在任何一个学生,他没有任何一个任课老师。
(2)学生--俱乐部 联系
这个联系也是一个多对多关系,但它对学生这个实体型而言就不是强制的(Optional,可选的)。每个俱乐部都有至少一个学生参加,但并不是每个学生都要去参加俱乐部的活动。完全可以有一些学生,他们什么俱乐部都没参加。
上面的例子主要是从概念的角度来区分了mandatory和optional的区别。实际上如果把这个模型对应到我们最后生成的表,如果A-B间的联系对A是mandatory的话,那么如果在A里面如果包含B的外键,这个外键不能为空值,反之可以为空值。后面我们谈到PDM和实际数据库的时候,大家会看到这一点。
2.dependent
每一个Entity型都有自己的Identifier,如果两个Entity型之间发生关联时,其中一个Entity型的Identifier进入另一个Entity型并与该 Entity型中的Identifier共同组成其Identifier时,这种关联称为标定关联,也叫依赖性关联(dependent relationship)。一个Entity型的Identifier进入另一个Entity型后充当其非Identifier时,这种关联称为非标定关联,也叫非依赖关联。
概念的定义说起来还是有些拗口,说白了其实就是主-从表关系,从表要依赖于主表。比如在我们系统里要记录教师休假的情况,有一个实体型Holiday,其属性包括休假的开始时间和天数,每次有教师休假的时候,都要在这个表留下记录。从我们的场景描述中可以看到,实体型假期必须依附于实体型教师,即对于每一个假期实例,必须指向某一个教师实例。
对于依赖型联系,必须注意它不可能是一个多对多联系,在这个联系中,必须有一个作为主体的实体型。一个dependent联系的从实体可以没有自己的identifier.
3.dominant
这个联系属性是最为简单的,它仅作用于一对一联系,并指明这种联系中的主从表关系。在A,B两个实体型的联系中,如果A-->B被指定为dominant,那么A为这个一对一联系的主表,B为从表,并且在以后生成的PDM中会产生一个引用(如果不指定dominant属性的话会产生两个引用)。比如老师和班级之间的联系,因为每个班级都有一个老师做班主任,每个老师也最多只能做一个班级的班主任,所以是一个一对一关系。同时,我们可以将老师作为主表,用老师的工号来唯一确定一个班主任联系。
二.Association(关联)
先来看一下PD给association的定义:“An association is a connection between entities. In the Merise modeling methodology an association is used to connect several entities that each represents clearly defined objects, but are linked by an event, which may not be so clearly represented by another entity.”。
在上一小段提到的那些RelationShip,在很多情况下(特别是多对多关系中),我们会把联系专门提出来,作为一个实体型放在两个需要被关联的实体型中间(在PD中,选中任何一个联系,在右键的弹出菜单中选择“Change to Entity”命令即可完成联系转实体的操作)。但有的时候,把若干个实体型之间的联系抽象为一个实体型可能不太合适,这个时候你可以选择为这些实体型建立一个association,那么在生成PDM的时候,所有这些相关实体型的identifier都会被加入到association对应生成的表模型中。所以,说白了,其实association就是实体型的一种特例,用来在建模的时候更确切的表达实体间的关联信息。在PD的文档中举了一个录音带、顾客、商店三个实体型在租借录音带这个场景上发生关联,然后把租借定义为上述三个实体型之间的association的例子,非常确切。在我们的学校模型里,我定义了家访做为老师和学生实体型中间的一个association,在接下来产生的PDM中大家就可能看到这种定义所产生的效果。
三.Inheritance(继承)
这种关系在概念层面是最容易理解的了,本文就不赘述了。
前面已经介绍了CDM中关于实体间关系的主要内容,接下来我们就来看看根据这个CDM所生成的PDM是一个什么样子:
联系是否具有强制性,指的是实体间是不是一定会出现这种联系;或者换句话说,当我们在谈及一个联系的应用场景的时候,联系对应的那两个实体型的实体实例的个数可不可能为零。也许这样的解释还是有点抽象,让我们举两个联系的例子,一个是对两边的实体都有强制性的,另一个则不然。
(1)教师--学生 联系
这个联系首先是一个多对多联系,因为每个老师可以教多个学生,每个学生也都有多个老师来负责他们的学业。同时,这个联系对教师和学生都是强制性的,也就是说,不存在任何一个老师,他不负责任何一个学生的教学;也不存在任何一个学生,他没有任何一个任课老师。
(2)学生--俱乐部 联系
这个联系也是一个多对多关系,但它对学生这个实体型而言就不是强制的(Optional,可选的)。每个俱乐部都有至少一个学生参加,但并不是每个学生都要去参加俱乐部的活动。完全可以有一些学生,他们什么俱乐部都没参加。
上面的例子主要是从概念的角度来区分了mandatory和optional的区别。实际上如果把这个模型对应到我们最后生成的表,如果A-B间的联系对A是mandatory的话,那么如果在A里面如果包含B的外键,这个外键不能为空值,反之可以为空值。后面我们谈到PDM和实际数据库的时候,大家会看到这一点。
2.dependent
每一个Entity型都有自己的Identifier,如果两个Entity型之间发生关联时,其中一个Entity型的Identifier进入另一个Entity型并与该 Entity型中的Identifier共同组成其Identifier时,这种关联称为标定关联,也叫依赖性关联(dependent relationship)。一个Entity型的Identifier进入另一个Entity型后充当其非Identifier时,这种关联称为非标定关联,也叫非依赖关联。
概念的定义说起来还是有些拗口,说白了其实就是主-从表关系,从表要依赖于主表。比如在我们系统里要记录教师休假的情况,有一个实体型Holiday,其属性包括休假的开始时间和天数,每次有教师休假的时候,都要在这个表留下记录。从我们的场景描述中可以看到,实体型假期必须依附于实体型教师,即对于每一个假期实例,必须指向某一个教师实例。
对于依赖型联系,必须注意它不可能是一个多对多联系,在这个联系中,必须有一个作为主体的实体型。一个dependent联系的从实体可以没有自己的identifier.
3.dominant
这个联系属性是最为简单的,它仅作用于一对一联系,并指明这种联系中的主从表关系。在A,B两个实体型的联系中,如果A-->B被指定为dominant,那么A为这个一对一联系的主表,B为从表,并且在以后生成的PDM中会产生一个引用(如果不指定dominant属性的话会产生两个引用)。比如老师和班级之间的联系,因为每个班级都有一个老师做班主任,每个老师也最多只能做一个班级的班主任,所以是一个一对一关系。同时,我们可以将老师作为主表,用老师的工号来唯一确定一个班主任联系。
二.Association(关联)
先来看一下PD给association的定义:“An association is a connection between entities. In the Merise modeling methodology an association is used to connect several entities that each represents clearly defined objects, but are linked by an event, which may not be so clearly represented by another entity.”。
在上一小段提到的那些RelationShip,在很多情况下(特别是多对多关系中),我们会把联系专门提出来,作为一个实体型放在两个需要被关联的实体型中间(在PD中,选中任何一个联系,在右键的弹出菜单中选择“Change to Entity”命令即可完成联系转实体的操作)。但有的时候,把若干个实体型之间的联系抽象为一个实体型可能不太合适,这个时候你可以选择为这些实体型建立一个association,那么在生成PDM的时候,所有这些相关实体型的identifier都会被加入到association对应生成的表模型中。所以,说白了,其实association就是实体型的一种特例,用来在建模的时候更确切的表达实体间的关联信息。在PD的文档中举了一个录音带、顾客、商店三个实体型在租借录音带这个场景上发生关联,然后把租借定义为上述三个实体型之间的association的例子,非常确切。在我们的学校模型里,我定义了家访做为老师和学生实体型中间的一个association,在接下来产生的PDM中大家就可能看到这种定义所产生的效果。
三.Inheritance(继承)
这种关系在概念层面是最容易理解的了,本文就不赘述了。
前面已经介绍了CDM中关于实体间关系的主要内容,接下来我们就来看看根据这个CDM所生成的PDM是一个什么样子:
上图中所有标红的部分是我们最应该关注的内容,因为他们都是由于我们对实体型间的关系的定义而产生的,下面给出一些简单的说明。
1. “师生关系”和“学生俱乐部”这两个表是由于我们的多对多关系而产生的。
2. “假期”表的“工号”字段是由于我们将教师-假期关系指定为dependent而产生的。
3. “班级”表的“工号”字段是由于我们将教师-班级关系制定为dominant而产生的。
4. “家访”表中的“工号”和“学号”字段是由于家访是教师和学生实体型的association而产生的。
另外,记得我们在提到dominant属性的时候说过,一个没指定dominant方向的一对一联系将产生两个引用,下面我们就把原本的CDM中的教师-班级关系进行一个小小的修改,去掉这个relationship的dominant定义,那么最终产生的PDM中教师表和班级表将互相包含对方的主键(由于我们的班级表没有自己的主键,所以只能在班级表中看到多出来的列),截图如下:
1. “师生关系”和“学生俱乐部”这两个表是由于我们的多对多关系而产生的。
2. “假期”表的“工号”字段是由于我们将教师-假期关系指定为dependent而产生的。
3. “班级”表的“工号”字段是由于我们将教师-班级关系制定为dominant而产生的。
4. “家访”表中的“工号”和“学号”字段是由于家访是教师和学生实体型的association而产生的。
另外,记得我们在提到dominant属性的时候说过,一个没指定dominant方向的一对一联系将产生两个引用,下面我们就把原本的CDM中的教师-班级关系进行一个小小的修改,去掉这个relationship的dominant定义,那么最终产生的PDM中教师表和班级表将互相包含对方的主键(由于我们的班级表没有自己的主键,所以只能在班级表中看到多出来的列),截图如下:
对照这个PDM截图和上一个PDM截图之间的区别,大家可以很容易得看出dominant属性对一个一对一关系的作用。
好了,说到这里,本文就暂时告一段落了。文中提到的,都是经常使用PD的同志和笔者一样每天都会碰到的一些概念。只有我们把这些概念弄得很清楚,对PD的使用才能事半功倍。笔者也在网上找过关于PD的资料,发现有价值的资源很少。如果哪位老兄有比较好的资源或者书,还请推荐一二。
应一位朋友的要求,将本文中用到的CDM文件放在这里:school.rar
发表评论
-
PD12 建模工具的使用
2010-01-12 00:34 1254http://jpkc.zjbti.net.cn/sjkjs/ ... -
从PowerDesigner概念设计模型(CDM)中的3种实体关系说起
2010-01-12 00:02 1794转自:http://tech.it168.com/m/2007 ... -
PowerDesigner学习--概要介绍
2010-01-12 00:00 2278定义实体 用鼠标双击实体的符号,可以进入 ... -
PowerDesigner学习--基本步骤
2010-01-11 23:59 19981、设计 数据库 ... -
PownerDesigner学习--内部机制
2010-01-11 23:58 13621、pd中复制一列是,实际上是一个链接。源列的变动同时体现在复 ... -
PowerDesingner学习--常见问题解决
2010-01-11 23:57 21371、由pdm生成建表脚本时 ... -
用POWERDESIGNER生成ACCESS2000类型数据库文件
2010-01-11 23:56 1905POWERDESIGNER是设计数据库著名工具由SyBase公 ... -
如何用Powerdesigner的PDM(物理数据模型)生成数据库
2010-01-11 23:55 2705pdm做好后,最终是要将其转化为数据库实体的。 1.确认当前 ... -
PowerDesigner 11 使用心得
2010-01-11 23:55 13121、安装PD v11.0版 2、由pdm生成建表脚本时, ... -
PowerDesigner设计数据库
2010-01-11 23:54 1870本文档不讲述如何使用PowerDesigner ,而是讲述如 ... -
PowerDesigner 的常用方法
2010-01-11 23:53 1637修改外键命名规则 选 ... -
powerdesigner中外建问题
2010-01-11 23:52 1035在PD中建立外键碰到一个问题,如: forum(id,na ... -
Powerdesigner中不能定义主键的解决方案
2010-01-11 23:52 1787如遇“This data item is already us ... -
Powerdesigner 逆向工程 sql/DataBase-PDM-CDM转换
2010-01-11 23:49 2756在【file】菜单中 从数据库或者sql脚本文件生成PDM ... -
PowerDesigner加速IQ数据仓库设计与实现
2010-01-11 23:45 1938一、 数据仓库设计概况 数据仓库的作用在 ... -
PowerDesigner教程系列(六)概念数据模型
2010-01-11 23:43 1666目标:本文主要介绍联系的定义及使用。 一、 联系联系(Re ... -
PowerDesigner教程系列(五)概念数据模型
2010-01-11 23:43 1661目标:本文主要介绍数 ... -
PowerDesigner教程系列(四)概念数据模型
2010-01-11 23:38 1647目标:本文主要介绍如何定义实体的主、次标识符。一、标识符标识符 ... -
PowerDesigner教程系列(三)概念数据模型
2010-01-11 23:37 1786目标: 本文主要介绍属性的标准检查约束、如何定义属性的附加检 ... -
PowerDesigner教程系列(二)概念数据模型
2010-01-11 23:37 2495目标:本文主要介绍PowerDesigner概念数据模型以及实 ...
相关推荐
在提供的压缩包中,"PD概念数据模型DOC文档"很可能是对PowerDesigner CDM建模的详细说明或指南。这个文档可能包含了如何创建、编辑和管理CDM的步骤,以及最佳实践和案例研究。阅读这份文档可以帮助用户深入理解CDM,...
CDM 中有三种实体关系:实体型、属性和联系。实体型对应到 CDM 中的 Entity,属性对应到 CDM 中每个 Entity 的 Attribute。在联系上,CDM 有了比较大的扩展,除了保留 ER 图原有的 RelationShip 概念之外,还增加了 ...
本文将通过“PD教学实例”这一主题,深入探讨**概念数据模型(CDM)**的核心概念、实体关系以及其在数据库设计中的应用,帮助读者更全面地理解CDM及其对后续物理数据模型(PDM)构建的影响。 #### CDM:数据库设计的...
3. **继承与多态**:在CDM中,可能涉及到实体的继承关系和多态性,这些概念对于理解复杂业务模型至关重要。 4. **数据类型与约束**:定义属性的数据类型和约束条件,如长度、是否可为空等,确保数据的完整性和一致性...
在概念模型中,可以清晰地定义实体、实体之间的关系(如一对一、一对多、多对多和继承关系),并借助E-R图进行可视化表达。PD能够根据概念模型(CDM)自动生成物理模型(PDM),从而大大简化了物理结构设计的工作量...
以学校学生选课系统为例,需要构建学生信息、选课信息和课程信息三个实体,每个实体包含特定属性,如学生实体的学号、姓名、性别等。实体间的关联通过关系图表示,形成完整的概念数据模型。 **4.2.2 CDM模型的建立*...
概念数据模型(CDM)是 PowerDesigner 中的一种主要模型类型,用于描述数据的概念结构和关系。 一、概念数据模型概述 概念数据模型(CDM)是一种抽象的数据模型,它描述了数据的概念结构和关系。CDM 是一种基于...
PowerDesigner是一款强大的数据库设计工具,它支持多种建模方法,包括概念数据模型(CDM)、物理数据模型(PDM)等。在这个过程中,我们将详细探讨如何使用PowerDesigner 16创建数据模型。 首先,启动PowerDesigner...
在PowerDesigner中,这一过程涉及创建概念模型、构建实体间的关系、生成物理模型以及最终生成SQL脚本来创建数据库。 #### 二、创建概念模型(CDM) 在PowerDesigner中,通过以下步骤创建概念模型: 1. **启动...
PowerDesigner支持概念数据模型(CDM),逻辑数据模型(LDM)和物理数据模型(PDM)的设计。它提供了图形化的用户界面,使得数据建模过程更加直观易懂。导入Excel文档的功能则为用户提供了从现有数据源快速构建模型的途径...
在 PowerDesigner 中,你可以创建实体、属性、关系,并用注释来描述实体和属性的含义。CDM 提供了一种独立于特定数据库系统的数据建模方式,便于团队间的沟通和理解。 2. **逻辑数据模型(LDM)** LDM 是从 CDM ...
在这个选题系统中,数据库模型可能包括了如“学生表”(记录学生信息)、“导师表”(记录导师信息)、“选题表”(记录选题的详细信息,如题目、状态、所属学科等)、“学生选题关联表”(表示学生选择的题目)等...
1. **新建CDM模型**:通过File > New,选择CDM模型模板,输入模型名称、代码、描述等信息。 2. **创建实体**:使用Entity工具在图形窗口画布上点击以添加实体,双击编辑实体信息。 3. **添加属性**:在实体属性窗口...
在概念模型中,我们定义了订单餐品为一个关联实体,由于订单和菜品是一个多对多关系,所以需要加入一个关联实体,生成一个联系表。同时,我们还定义了餐桌和前台员工的多对多关系,并加入了关联实体。 在数据库设计...
在PowerDesigner中创建CDM模型的步骤如下: 1. 选择“File”>“New”,然后选择CDM模型。 2. 创建模型并命名,添加描述和其他相关信息。 3. 使用Entity工具在图形窗口中绘制实体符号,并通过双击编辑实体属性。 四...
1. **表结构定义**:基于CDM中的实体和关系定义表结构。 2. **字段类型选择**:为每个字段选择合适的数据库类型,如整型、浮点型或字符串类型。 3. **索引创建**:根据查询需求创建索引以优化查询性能。 4. **触发器...
在数据库设计过程中,实体关系图(ER图)是一种重要的工具,它直观地展示了数据库中的实体、属性以及实体之间的关系。PowerDesigner是一款强大的数据库设计和逆向工程软件,它提供了创建ER图的功能,帮助开发者高效...