关系数据库数据模型设计及设计工具PowerDesigner中实现CDM(概念模型)设计并转化为PDM(物理模型)

来源:互联网 发布:杭州行知幼儿园 编辑:程序博客网 时间:2024/06/01 10:43

             声明:本博文即使自己学习知识的一种简单记录,方便自己使用,也是把自己在遇到问题,找到解决办法拿来与大家分享,方便大家学习中也会遇到同样的问题不知怎样解决提供一种方案,其中内容都出自笔者手稿,并经过亲身实践,有错误地方希望多多评论并指正,方便后面看的人。

 

 

关系数据库数据模型设计及设计工具PowerDesigner中实现CDM(概念模型)设计并转化为PDM(物理模型)

 

 博文摘要

  关系数据库从应用以来,一直是数据关系系统数据存储方式的不二选择,本博文是在一个关系数据库学习过程中对一个简单的关系数据库进行系统分析和模型设计的基础上,应用数据建模工具PowerDesigner工具来描叙概念数据模式CDM图,并转化成特定数据库中的物理数据模式的过程PDM,其中包括对Powerdesigner工具的使用方法的简单讲解,及从概念模型设计到物理模型实现的全过程。

 

实践过程

一、任务描述

根据下面的需求描述,使用Sybase Power Designer设计相应的数据库概念模型,并转换成MS SQL Server上的物理数据库结构。

二、  问题描叙

某银行准备开发一个银行业务管理系统,通过调查,得到以下的主要需求:

   银行有多个支行。各个支行位于某个城市,每个支行有唯一的名字。银行要监控每个支行的资产。银行的客户通过其身份证号来标识。银行存储每个客户的姓名及其居住的街道和城市。客户可以有帐户,并且可以贷款。客户可能和某个银行员工发生联系,该员工是此客户的贷款负责人或银行帐户负责人。银行员工也通过身份证号来标识。员工分为部门经理和普通员工,每个部门经理都负责领导其所在部门的员工,并且每个员工只允许在一个部门内工作。每个支行的管理机构存储每个员工的姓名、电话号码、家庭地址及其经理的身份证号。银行还需知道每个员工开始工作的日期,由此日期可以推知员工的雇佣期。银行提供两类帐户——储蓄帐户和支票帐户。帐户可以由2个或2个以上客户所共有,一个客户也可有两个或两个以上的帐户。每个帐户被赋以唯一的帐户号。银行记录每个帐户的余额、开户的支行以及每个帐户所有者访问该帐户的最近日期。另外,每个储蓄帐户有其利率,且每个支票帐户有其透支额。每笔贷款由某个分支机构发放,能被一个或多个客户所共有。每笔贷款用唯一的贷款号标识。银行需要知道每笔贷款所贷金额以及逐次支付的情况(银行将贷款分几次付给客户)。虽然贷款号不能唯一标识银行所有为贷款所付的款项,但可以唯一标识为某贷款所付的款项。对每次的付款需要记录日期和金额

三、  概念模型建立(如果您对数据库概念建模很熟悉,就可以不用看该部分内容了)

第一步经过简单的对需求的分析,可以抽取基本的实体对象(先抽取基本的实体,再设计中遇到问题再补充)

支行、客户、职员、账户、贷款、贷款发放信息

第二步各简单实体的属性寻找

支行属性

支行相关描叙:银行有多个支行。各个支行位于某个城市,每个支行有唯一的名字。银行要监控每个支行的资产

基本属性:支行名、城市、资产

我们发现与支行有关联的信息不多,只在后面贷款中出现。定义关系一:支行_贷款

客户属性

客户相关描述:银行的客户通过其身份证号来标识。银行存储每个客户的姓名及其居住的街道和城市。客户可以有帐户,并且可以贷款。客户可能和某个银行员工发生联系,该员工是此客户的贷款负责人或银行帐户负责人。

基本属性:身份证号、城市、住所街道

基本关系:关系二:客户_账号;关系三:客户_贷款;关系四:客户_职员

职员属性

职员描述:银行员工也通过身份证号来标识。员工分为部门经理和普通员工,每个部门经理都负责领导其所在部门的员工,并且每个员工只允许在一个部门内工作。每个支行的管理机构存储每个员工的姓名、电话号码、家庭地址及其经理的身份证号。银行还需知道每个员工开始工作的日期,由此日期可以推知员工的雇佣期。

基本属性:身份证号、职工类型、姓名、电话、家庭地址、所在部门

由于要存储每个员工的部门经理,而每个部门只有一个部门经理,我在这重新添加一个实体对象,部门,就类似班级和学生,班级有班长,部门有经理,班长也是学生,经理也是员工。

部门:部门名称、经理职工号

关系模式如下:(由于是个相互用外键的形式,在这先给出给模式结构方便理解)

账户属性

账户描叙:银行提供两类帐户——储蓄帐户和支票帐户。帐户可以由2个或2个以上客户所共有,一个客户也可有两个或两个以上的帐户。每个帐户被赋以唯一的帐户号。银行记录每个帐户的余额、开户的支行以及每个帐户所有者访问该帐户的最近日期。另外,每个储蓄帐户有其利率,且每个支票帐户有其透支额。

账户有有两种类型储蓄账户和支票账户,似乎设计一个账户类型就可以解决问题,但后面发现,两种不同的账户有不同的属性域,如果把这两种不同属性域定义到一个模式中,在大量说句时就会有太多的数据冗余,很明显我们需要把这两种类型具体划分出来,但这两种类型的支票有很多基础属性是相似的,他们的关系更加满足一种像,存在账户父类,而两种不同类型的账户是两个子类,他们大部分属性继承与账户父类,而自己有部分的独立属性,模型结构如下:

附加知识:继承关系的表达在PowerDesigner中默认是不可用的,怎样打开继承关系的表达呢?

也就是把

点击菜单栏:Tools——》Model Option。。——》在Noation选项中选择“E/R+Merise”(如下图)

对于继承关系,PowerDesigner生成物理模型的时候,会去掉父类,子类会继承所有父类的属性

对于上面的继承关系生成的数据表结构就是这样的。

和账号相联系的是客户,一个客户可以有多个账户,一个账户可以有多个客户(帐户可以由2个或2个以上客户所共有,一个客户也可有两个或两个以上的帐户)

明显账户和客户是个多对多的关系,我们需要建立多对多的关系,在父类中建立这种关系,PowerDesigner现在还不能把这种关系在继承中反映出来。例如我们在父类的账户与客户之间建立这种多对对的关系,在生成的物理模型中,父类不会像上面说的那样不取消掉!

如下图所示:

这样似乎没有达到我们消去冗余还多了张结构不清晰的表。我们用什么办法去解决这个问题。

其实回到原点,如果我们不用这种子类继承父类的方法,而是把这两个属性冗余的放在一个模型中,就没有这样的问题存在,所以如果这样的模式划分,对于数据量不是很大,然后又不想把数据模式弄的太复杂,增加业务逻辑部分的设计难度,就可以采用这个方案,也是一种可行的方案。出于这是一个银行系统,账户数据量很大,采用这种冗余对存储空间的浪费很大,下面提供一种通过复杂化数据模型来减少这种冗余的方案。

数据模型:

生成的物理模型:

重物理模型的数量上来说,还是五个表,但是,它解决了结构混乱的问题,而且不会有数据的冗余,带来的缺陷是业务逻辑处理上的细分,但是这两种账户类型的业务逻辑本来就不一样,会细分,所以也就是划算的!

客户与账户的关系完成了,我们接着完成贷款的结构。

贷款属性

贷款描述:每笔贷款由某个分支机构发放,能被一个或多个客户所共有。每笔贷款用唯一的贷款号标识。银行需要知道每笔贷款所贷金额以及逐次支付的情况(银行将贷款分几次付给客户)。虽然贷款号不能唯一标识银行所有为贷款所付的款项,但可以唯一标识为某贷款所付的款项。对每次的付款需要记录日期和金额

基本属性:贷款号、贷款金额、办理支行

每笔贷款能被抖个客户拥有,一个客户也可以贷款多次,是个多对多的关系,不能简单的通过外间定义每笔贷款的客户,可是贷款分多次发放,每次的发放情况银行需要记录,我们需要提取一个新的实体——贷款发放才能办到,模型结构如下:

生成的物理模型:

再就是客户与贷款的关系,他们两之间就是简单的多对多的关系,不再想详细说明。

汇总模型:

生成物理模型

第四部分:前面讲的这些好像都是数据模型建立分析,PowerDesigner怎样来画这些图的呢?这些不讲,不会用就无从谈起了,别急,下面就来讲讲PowerDesigner怎样使用吧

建立CDM模型的办法:

File——》new model

如图选择Conceptual digramok

然后就是用工具创建实体对象类:

在右边的工具栏中的这些可视化的组件,点击选择一个,在编辑区单击,就画好了一个实体

              

双击实体,就打开了属性编辑窗体

Attributes中编辑属性吧

其中后面的M代表强制,P代表主键,D代表是否显示

这就建好了实体,是不是很简单

下面就是关系的定义了

关系主要操作就分为两种,一种是一对多,也就是我们常常讲的通过在n端建立外键来实现的,另一种是多对多的关系,这个看是困难,其实在Powerdesigner中最容易实现。

看例子吧:

一对多,一个班级有多个学生,一个学生只属于一个班级(选择关系组件,从班级到学生画关系)

双击关系,设定关系属性

在第二个选项中选择One-Many,在班级to学生中选择1n

在学生to 班级中选择 0,1,这就是建立1对多的关系

生成的物理模型学生表中会自动添加班级号外键

多对多关系的实现:

直接建立一个多对多的关系,工具帮我们自动建立一张新的表,举例学生与课程关系吧

设定关系为Many To Many

这样就建立好了多对多的关系模式

看看生成的物理模式,是不是自动就多了一个选课表

好了,到目前为止,讲的差不多了。

补充一定:PDM中的属性可以修改的,可以和CDM中的不一一致。例如我们想在选课表中加上一个学生该门课程的成绩,就自己添加一个个属性就行了!

然后就是怎样生成相应数据库的sql代码,方便我们进行数据库的创建了!

         PDM模式下Ctrl+G就行了

 

总结:

       本论文通过几个详细的实例讲了PowerDesigner的使用基础,及从CDMPDM,再生成sql代码的全过程,涵括了所有关系数据库需要表达的数据库关系在PowerDesigner中的实现过程。也稍稍有点数据库设计分析过程的讲解。希望能对你学习带来一点作用。