关于PowerDesigner中的各种表间关系的区别

更新时间:2023-12-20 09:52:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

关于PowerDesigner中的各种表间关系的区别

在PowerDesigner中,定义的表间关系的图标有三种,分别是:

除此之外,还有一种单个表之间的关系——自反(Reflexive),Reflexive使用Relationship图标,实际上可以理解成:数据库表的关系,有4种。

为说明表间关系的所有情况,我创建了一个CDM文件,用于说明各种情况之间的区别。

假期天数Number开始时间人姓名Variable characters (50)性别Text年龄Number俱乐部俱乐部名称Characters (256)成立时间部长学号Identifier_1DateNumber教师-人学生-人教师-休假领导教师工号Characters (256)学生-俱乐部师生关系家访0,n日期Date原因Text0,n学生学号Number教龄级别NumberNumber(D) 年级班级NumberCharacters (256)Identifier_1Identifier_1(D) 班主任班级班级号Number部分学生因特长而高考加分学生属于哪个班级特长生特长名称Variable characters (30)高考加了多少分Integer所属年级NumberIdentifier_1班级属于哪个专业专业专业号Integer专业名称Variable characters (50)Identifier_1 一 Relationship,关系

先说最常见的Relationship,关系。

1 一对多

一对多是最常见、使用得最多的情况。图中,专业和学生的关系,就是一对

多的关系:

一个学生必然属于一个班级;一个班级必然有很多学生。 先看属性页面:

Cardinalities页面,是设置Ralationship、Inheritance的共同页面。跟一对多相关的是:

1.1 “一”端的Mandatory(强制)

“一”端是没有Dependent依赖的。

在一对多关系中“一”的这端,选中和不选中,在创建数据库的SQL语句中,没有任何区别,但是,他表示的逻辑是不同的:

1) 选中Mandatory,表示“一”端的每一条记录(班级),都至少有一个

“多”端的记录(学生)对应,即,一个班级至少要有一名学生; 2) 不选中Mandatory,表示,一个班级,可以是空班级,可以没有学生(比

如招生前夕),也可以有多个学生。

1.2 “多”端的Mandatory(强制)

Mandatory选项,对一对多关系中“多”的这端,选中和不选中的区别是: 1) 创建的SQL语句:选中了,表示“多”端的表中的外键不能为空;没

选中,表示“多”端的表中的外键可以为空;

2) 举例:选中了,学生必须属于某个班级;没选中,表示学生可以暂时不

属于任何一个班级(比如降级还没有分班的学生)。

1.3 “多”端的Dependent(依赖)

Dependent(依赖)选项,对一对多关系中“多”的这端,选中和不选中,区别如下:

1) SQL语句:选中,“多”端的外键跟自己的主键一起成为主键;否则,

外键只是外键,生成的逻辑模型图是:

学生班级号numeric学号numeric学生学号numeric班级号numeric选中姓名性别年龄年级班级varchar(50)long varcharnumericnumericchar(256)不选中姓名性别年龄年级班级varchar(50)long varcharnumericnumericchar(256) 2) 举例:选中Dependent,表示:班级的ID传递给学生之后,既是学生

表的外键,又跟学生表的学号一起构成学生表的主键;如果没有选中,那班级的ID传递给学生表,仅仅作为学生表的外键。

2 多对多

多对多的Dependent和Mandatory的意思,跟一对多的意思是一样的。所不同的是,多对多的关系,会在生成物理模型的时候,自动生成一张表,原表和新表之间是两个一对多的关系。

比如:学生和老师的关系,概念模型是:

教师工号Characters (256)学生师生关系学号Number教龄级别NumberNumber年级班级NumberCharacters (256)Identifier_1Identifier_1 生成物理模型之后,就是:

教师工号char(256)班级号numeric师生关系工号char(256)班级号numeric学号numeric学生班级号numeric学号numeric姓名性别年龄教龄级别varchar(50)long varcharnumericnumericnumeric姓名性别年龄年级班级varchar(50)long varcharnumericnumericchar(256) 3 一对一

一对一的表间关系,很容易跟继承、关联混淆。

一对一的Relationship,最重要的选项是“Dominant(支配)”,A“支配”B,表示:A的主键传递给B,但是B的主键不传递给A;

教师工号char(256)班级号专业号工号班级numericintegerchar(256)姓名性别年龄教龄级别varchar(50)long varcharnumericnumericnumeric所属年级numeric 如果不选择“Dominant”,表示,A的主键要传递给B,并且,B的主键也要传递给A。

教师工号char(256)班级号numeric班级号专业号工号班级numericintegerchar(256)姓名性别年龄教龄级别varchar(50)long varcharnumericnumericnumeric所属年级numeric 对于一对一中的Mandatory和Dependent,跟一对多的情况一样。

二 Inheritance,继承

所谓继承,看本文开头部分举的例子,教师和学生都有共同的字段——姓名、性别、年龄——教师和学生都是“人”,他们的属性是从“人”继承来的。

Powerdesigner的继承关系,专门有一个图标,承”关系,其连线是

,将两张表设计成“继

,跟Relationship不一样。

在概念模型中,子表没有主表的字段,生成物理模型之后,主表的全部字段全部复制到子表中。

三 Association,关联

Association关系,就是两个实体之间的多对多关系,一般这种情况下会增加一个中间实体,这就是前面“Relationship”中的“一对多”。

此外,在Power Designer中,提供了一个专门的符号来对应,叫做“Association”关联,需要注意的是,“Association”只是为了方便直观地表示这种类型的实体而设置的一个图标,他其实还是实体。

使用一个普通的实体,定义多对多关系,和使用“Association”图标定义多对多关系,两者相比,使用“Association”更方便、直观,使模型更容易理解,并可以减少因不谨慎而可能导致的错误。

下面的是概念模型:

教师工号Characters (256)学生0,n家访日期Date原因Text学号Number教龄级别NumberNumber0,n年级班级NumberCharacters (256)Identifier_1Identifier_1 生成物理模型之后:

教师工号char(256)班级号numeric学生家访工号char(256)班级号numeric学号numeric班级号numeric学号numeric姓名性别年龄教龄级别varchar(50)long varcharnumericnumericnumeric日期原因datelong varchar姓名性别年龄年级班级varchar(50)long varcharnumericnumericchar(256) 需要足以的是,针对Association,PowerDesigner专门提供了一个图标用于设置这种关系:

四 Reflexive,自反

如上图中的领导。领导本身是老师,每个老师都有一个领导。这种关系就是自反关系。

这种关系下,Mandatory、Dependent的设置,跟一对多的Relationship关系是一样的。

五 总结

一张表跟自己的关系,是Reflexive(自反);

一张表的主键和字段全部传递给另一张表,是Inheritance(继承); 一张表只把自己的主键传递给另一张表,是Relationship(关系)和Association(关联),其中,Relationship可以是一对一、一对多、多对多;Association只能是多对多;

Mandatory(强制)选项,选中了,表示:一张表的主键传递给另一张表,作为后者的外键,并且不能为空;

Dependent(依赖)选项,选中了,表示:一张表的主键传递给另一张表,作为后者的外键,并且不能为空;并且与它原来的主键,一起构成它的主键;

Dominant(支配)选项,只针对一对一的情况,选择A“支配”B,表示:A的主键传递给B,但是B的主键不传递给A;如果不选择“Dominant”,表示,A的主键要传递给B,并且,B的主键也要传递给A。

本文开始给出的概念模型,生成物理模型后,是下面的样子:

假期工号char(256)人姓名varchar(50)性别long varchar年龄numeric成立时间部长学号俱乐部俱乐部名称char(256)天数numeric开始时间datenumeric学生-俱乐部师生关系工号学生_工号班级号学号char(256)char(256)numericnumeric俱乐部名称工号班级号学号char(256)char(256)numericnumeric教师工号char(256)教师_工号char(256)工号学生_工号班级号学号学生家访char(256)char(256)numericnumeric工号char(256)班级号numeric学号numeric姓名性别年龄教龄级别varchar(50)long varcharnumericnumericnumeric日期原因datelong varchar班级姓名性别年龄年级班级varchar(50)long varcharnumericnumericchar(256)工号班级号专业号char(256)numericinteger工号班级号学号特长生char(256)numericnumeric所属年级numeric专业专业号integer特长名称varchar(30)高考加了多少分integer专业名称varchar(50)

这种关系下,Mandatory、Dependent的设置,跟一对多的Relationship关系是一样的。

五 总结

一张表跟自己的关系,是Reflexive(自反);

一张表的主键和字段全部传递给另一张表,是Inheritance(继承); 一张表只把自己的主键传递给另一张表,是Relationship(关系)和Association(关联),其中,Relationship可以是一对一、一对多、多对多;Association只能是多对多;

Mandatory(强制)选项,选中了,表示:一张表的主键传递给另一张表,作为后者的外键,并且不能为空;

Dependent(依赖)选项,选中了,表示:一张表的主键传递给另一张表,作为后者的外键,并且不能为空;并且与它原来的主键,一起构成它的主键;

Dominant(支配)选项,只针对一对一的情况,选择A“支配”B,表示:A的主键传递给B,但是B的主键不传递给A;如果不选择“Dominant”,表示,A的主键要传递给B,并且,B的主键也要传递给A。

本文开始给出的概念模型,生成物理模型后,是下面的样子:

假期工号char(256)人姓名varchar(50)性别long varchar年龄numeric成立时间部长学号俱乐部俱乐部名称char(256)天数numeric开始时间datenumeric学生-俱乐部师生关系工号学生_工号班级号学号char(256)char(256)numericnumeric俱乐部名称工号班级号学号char(256)char(256)numericnumeric教师工号char(256)教师_工号char(256)工号学生_工号班级号学号学生家访char(256)char(256)numericnumeric工号char(256)班级号numeric学号numeric姓名性别年龄教龄级别varchar(50)long varcharnumericnumericnumeric日期原因datelong varchar班级姓名性别年龄年级班级varchar(50)long varcharnumericnumericchar(256)工号班级号专业号char(256)numericinteger工号班级号学号特长生char(256)numericnumeric所属年级numeric专业专业号integer特长名称varchar(30)高考加了多少分integer专业名称varchar(50)

本文来源:https://www.bwwdw.com/article/v2w5.html

Top