使用PowerDesigner进行概念模型设计

 

实验内容

学生信息管理中有如下实体型:

  1. 学生(student),包括的属性有学号(Sno),姓名(Sname),性别(Ssex),年龄(Sage),身份证号(Sid)
  2. 课程(course),包括的属性有课程号(Cno),课程名(Cname),学分(Ccredit)
  3. 学院(department),包括的属性有学院编号(Dno),学院名称(Dname)
  4. 教师(teacher),包括的属性有教师编号(Tno),姓名(Tname),性别(Tsex),年龄(Tage),参加工作时间(Tworktime)

 

  1. 一个学生选修多门课程,一门课程由多个学生选修
  2. 一个学院有多名学生,一个学生只属于一个学院
  3. 一门课程可以由多个教师讲授,一个教师可以讲授多门课程
  4. 一个学院有多名教师,一个教师只属于一个学院
  5. 一个学院至多有一个正院长,一个正院长只能在一个学院担任正院长职务
  6. 某课程可以是其他多门课程的先修课程,一门课程至多有一门先修课程

 

student实体

General选项卡设置通用属性,Attributes选项卡设置实体包含的属性,Identifiers选项卡设置实体的码,Notes选项卡记录备注信息,Rules选项卡设置规则。General和Attributes选项卡中的内容必须设置,其他内容可以根据需要设置。

选择General选项卡,设置该实体的Name属性为student,Code属性与Name属性一致即可。

选择Attributes选项卡,设置该实体所包含的属性。Name列设置属性的名称,Code列设置属性的代码,Data Type列设置属性的数据类型,Domain列设置属性的域。M和P列设置属性的约束。M列设置属性是强制非空的,属性Sname要求强制非空。P列设置该属性是主键中的属性,属性Sno设置为主键。D列表示该属性被显示。一般在设置实体的属性时,一定要设置实体的主键,如果某个属性被设置为主键中的属性则自动强制非空。

Name与Code的区别是:Name供显示使用,Code是之后物理数据模型中表(或字段)的代码。

单击Identifiers选项卡,设置实体主、次标识符的定义界面。主标识符指主键,只能有一个,次标识符指其他候选键,可以有多个。主标识符后面的P为选中状态,由于前面已经指定属性Sno为主键,系统会自动创建主标识符并自动命名为Identifier_1。

设置属性Sid为候选键。单击工具栏上的Add a Row(添加)按钮,出现一行,系统自动命名为Identifier_2,修改为Sid_u,Name和Code相同即可。

 

设置规则,要求属性Ssex只能取“女”或“男”。

在General选项卡中输入规则名为Ssex_r,单击Expression选项卡,输入规则内容。

创建course实体

按照上面的方法创建course实体。在General选项卡中,设置该实体的Name属性为course,Code属性与Name属性一致即可。Cno为主键,即主标识符。Cname强制非空。

创建department实体

按照上面的方法创建department实体。在General选项卡中,设置该实体的Name属性为department,Code属性与Name属性一致即可。Dno为主键,即主标识符,Dname为候选键,即次标识符。

创建teacher实体

按照上面的方法创建teacher实体。在General选项卡中,设置该实体的Name属性为teacher,Code属性与Name属性一致即可。Tno为主键,Tname强制非空,创建规则Tsex_r要求Tsex取值只能是“女”或“男”。

设置student和course之间的联系

在PowerDesigner中,有Association(实体间的联系)与Relationship(实体间的关系),二者之间的区别是:前者用于m:n联系、多个实体型之间的联系,在转换为PDM(物理数据模型)时对应一个表(另外,也用于自身带有属性的1:n和1:1联系,但在转换为PDM时不对应一个表,而是附加属性);后者用于不带属性的1:n和1:1联系,在转换为PDM时附加属性(1:n在n方附加1方的主键,1:1由Dominant Role决定在其中一方附加对方的主键)。

student和course之间应该使用Association。单击设计元素面板上的代表Association的图标,将鼠标指针指向设计区域的合适位置,单击鼠标左键,在设计区域中创建一个Association,自动命名为Association_1。

双击Association_1,出现Association_1的属性设置界面。在General选项卡中设置Name为sc,code与Name相同即可。选择Attributes选项卡,添加Grade属性。

单击设计元素面板上的代表Association Line的图标,然后将实体student和联系sc连接起来,同样将实体course和联系sc连接起来。

设置teacher和course之间的联系

参照student和course之间的联系设置teacher和course之间的联系tc,联系自身有两个属性:Location(授课地点)、Term(授课学期)。

设置student和department之间的关系

在设计元素面板上单击代表Relationship的图标,光标置于department实体,按下左键并从department实体拖动到student实体,此时,在两个实体间创建了一个Relationship。

双击student和department之间的关系,在General选项卡设置关系的Name为ds,Code与Name一致即可。在Cardinalities选项卡中设置关系类型和每个方向上的基数(Cardinality)。

设置关系类型为One-Many,意思是由Entity1到Entity2为One-Many。由于创建该关系时,鼠标是由department拖动到student,因此,Entity1指department,Entity2指student,也可以在General选项卡中重新设置。

在Cardinalities选项卡中,关系的每个方向都包含一个分组框,每个分组框中包括下列属性:

Role name:用来描述该方向关系的作用,例如,在department to student分组框中可以填写have,而在student to department分组框中可以填写belong to。

Dependent:用来表示该方向两个实体之间的依赖关系,只有子实体依赖于父实体。

Mandatory:表示该方向具有强制特性。

Cardinality:表示该方向上关系的基数。例如,对于department to student,基数指对于department中的一个院系在student中可能存在的最大与最小实例数。现实世界中,一个院系可以拥有多个学生,也可以没有任何学生,所以department to student方向的基数应选择“0,n”,不设置Mandatory;而一个学生必须属于一个院系,并且只能属于一个院系,所以student to department方向的基数应选择“1,1”,设置Mandatory。

Dominant role只在一对一联系中才进行设置。

设置teacher和department之间的关系td_belongto

参照student和department之间的关系,创建teacher和department之间的关系td_belongto,由department到teacher是“1:n”关系。在General选项卡设置关系的Name为td_belongto,Code与Name一致即可。

Role name:在department to teacher分组框中可以填写have,在teacher to department分组框中可以填写belong to。

Cardinality:现实世界中,一个院系可以拥有多个教师,也可以没有任何教师,所以department to teacher方向的基数应选择“0,n”,不设置Mandatory;而一个教师必须属于一个院系,并且只能属于一个院系,所以teacher  to department方向的基数应选择“1,1”,设置Mandatory。

设置teacher和department之间的td_manage关系

创建teacher和department之间的关系td_manage,是“1:1”关系。在General选项卡设置关系的Name为td_manage,Code与Name一致即可。

Role name:在department to teacher分组框中可以填写managed by,在teacher to department分组框中可以填写manage。

Cardinality:现实世界中,一个院系只能而且必须有一个院长,所以department to teacher方向的基数应选择“1,1”,设置Mandatory;而一个教师可以不是院长,如果是则只能担任一个院系的院长职务,所以teacher  to department方向的基数应选择0,1,不设置Mandatory。

Dominant role:只有在一对一联系中出现,表示支配方向。所选择的支配方向在生成PDM时产生一个参照。例如,选择teacher->department,在生成PDM时,将在department表中增加tno属性,存储某院系的院长编号,而这个属性是department表的一个外键,参考teacher表,结合Cardinality中department to teacher方向的基数“1,1”,意味着该外键不能接受空值。

设置course实体集的自反联系course_self

假设某门课可以是其他多门课的先行课,而一门课如果有先行课则只能有一门先行课,这样course实体集内部存在“1:n”关系。

在设计元素面板上单击代表Relationship的图标,光标置于course实体,按下左键并在course实体上拖动一段距离,此时,在course实体上创建了一个Relationship。右击鼠标,进入对象编辑状态。双击course自身的关系,在General选项卡设置关系的Name为course_self,Code与Name一致即可。

Role name:在上面的course to course分组框中可以填写pioneer,在下面的course to course分组框中可以填写succeed。

Cardinality:现实世界中,某门课可能不是先行课,也可能是多门课的先行课,所以,上面的course to course方向的基数应选择“0,n”;而一门课可以没有先行课,如果有先行课则只能有一门,所以,下面的course to course方向的基数应选择“0,1”。

至此,根据上面E-R图创建的CDM已经完成。

PowerDesigner自动生成PDM

PowerDesigner的PDM可以描述逻辑结构和物理结构,根据CDM生成PDM。

检查CDM的正确性

在CDM设计界面上,选择Tools|Check Model,检查CDM的正确性,如果存在错误,请检查并更正。

将CDM转换为PDM

在CDM不存在错误(警告不影响模型转换)的情况下,可以将CDM转换为PDM。在CDM设计界面上,选择Tools|Generate Physical Data Model,出现模型转换选项设置界面。在General选项卡中,设置转换生成PDM的基本属性,包括使用哪种DBMS(请选择SQL Server2005),要生成的PDM模型的Name属性(请设置为SIM_PDM),Code属性与Name属性一致即可。Detail选项卡设置转换过程中的选项,例如转换过程中是否需要检测CDM模型,转换生成表时是否增加前缀,各种约束的命名规则等。Selection选项卡设置需要转换的实体。

 

PDM如下图所示。

你可能感兴趣的:(数据库,powerdesiner)