如何使用PowerDesigner软件进行数据库设计(一对多关系)

1 模型概述

CDM(Conceptual Data Model):概念数据模型,就是实体图
PDM(Physical Data Model):物理数据模型,就是表格,是由CDM转换而来

在本例中,设计的数据库为一对多的关系,人与车的关系,一个人可以拥有多辆汽车,但是每辆汽车只能有一个主人。

2 创建CDM

首先打开PowerDesigner,点击左上角“File”,选择“New Model”。
在这里插入图片描述
①选择第二个,Model types;
②选择第二个,Conceptual Data Model;
③默认选中了Conceptual Diagram
④在Model name处为模型起一个名字,在本例中我命名为:Person_Car;
⑤点击ok。
请添加图片描述
进入了以下界面,选择该界面中的保存按钮,选择合适的路径,先将创建的该模型保存了。
请添加图片描述
为Person_Car下面的默认的图形名字Diagram_1改名,修改为“CDM”。再找到最右边的Toolbox,选择Conceptual Diagram,选择第2个图标,在中间的绘图区域绘图,有几个实体,就点几下鼠标(在本例中有两个实体,因此绘制两个),然后将鼠标恢复成箭头状态。
请添加图片描述
①双击第一个实体图标,根据Person表(pid,pname,age,gender)进行绘制;
②进入General界面,更改Name,本例中更改为:Person;
③点击Attributes,添加属性,在Name处填写字段名,在Data Types处选择数据类型(两个图标都是修改数据类型的选项),如果该字段为主键,则勾选中间列(Primary Identifier);
④点击Identifiers,在Name处添加主属性,点击下方的“应用”,再点击确定。
请添加图片描述
这样显示出来的结果字体可能有一些小,我们可以通过以下操作来更改样式:
①在实体图上右击鼠标,选择Format;
②选择选项卡Font,根据自己的需求修改样式。
请添加图片描述
紧接着为Car表(cid,mark,price,pid)建立实体,步骤与上面Person表建立过程相同。但是在设计时,不应该将pid设置为属性,因为pid并不是Car表的属性。
在这里插入图片描述

3 建立实体之间的联系

①点击Toolbox下的Conceptual Diagram下的第3个小图标(Relationship);
②将鼠标按住从Person框内拉到Car框内,再松开鼠标,然后将鼠标切换回去箭头。
请添加图片描述
双击中间的Relationship_1部分,会弹关系窗口,在General选项卡中将Name改名,本例中修改为per_car。
然后点击Cardinalities选项卡,在Person to Car部分选择1:n,在Car to Person部分选择1:1,点击最下面的应用,再点击确定。
请添加图片描述

4 检查CDM

点击最上方菜单栏的Tools选项,选择Check Model,打开检查模型的界面,根据自己的需求来选择检查的项目,在本例中选择全部检查,点击确定后,会打开Result List窗口,如果该窗口下什么都没有显示,代表模型并没有检查出错误,如果显示了信息,代表检查到了错误。
请添加图片描述

5 将CDM转换成PDM

点击最上方菜单栏的Tools选项,选择Generate Physical Data Model,则会弹出以下窗口,在DBMS一栏中选择自己使用的数据库,本例中使用的数据库是MySQL,因此选择MySQL 5.0,该版本可以兼容MySQL 8.0版本数据库,然后点击应用,点击确定。
请添加图片描述
这时会打开以下页面,在这个页面中,Person和Car就是两张表了,在Person表的pid和Car表的cid后面显示的<pk>代表了主键,在Car表中自动生成了pid,后面的<fk>代表了外键。
在这里插入图片描述
这时界面上会显示两个CDM,会产生冲突,所以需要将显示两张表的CDM改名为PDM。
请添加图片描述
这时需要再次将PDM保存,点击保存的按钮,选择合适的文件夹下进行保存。
请添加图片描述

6 由PDM生成sql文件

切换到PDM页面,选择菜单栏中的Database(注:在CDM页面没有Database选项),点击Generate Database。
在这里插入图片描述
在弹出的对话框中,先修改sql文件存放的路径,然后修改sql文件的名字,本例中修改为:person_car,点击应用,点击确定。
请添加图片描述
紧接着弹出以下窗口,点击Edit,可以查看生成的sql文件。生成了sql文件之后,就可以从数据库中将这个sql文件导入了。
在这里插入图片描述
生成的sql文件为:

/*==============================================================*/
/* DBMS name:      MySQL 5.0                                    */
/* Created on:     2022/1/23 22:02:01                           */
/*==============================================================*/


drop table if exists Car;

drop table if exists Person;

/*==============================================================*/
/* Table: Car                                                   */
/*==============================================================*/
create table Car
(
   cid                  int not null,
   pid                  int not null,
   mark                 varchar(50),
   price                decimal(15,2),
   primary key (cid)
);

/*==============================================================*/
/* Table: Person                                                */
/*==============================================================*/
create table Person
(
   pid                  int not null,
   pname                varchar(50),
   age                  int,
   gender               varchar(2),
   primary key (pid)
);

alter table Car add constraint FK_per_car foreign key (pid)
      references Person (pid) on delete restrict on update restrict;
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐