2008年12月14日星期日

使用PowerDesigner进行数据库概念模型建模(一)

      为什么要进行建模呢?
      想一想,做事情先是不是需要事先计划一下?想要去做什么,怎么去做,如何做到?
      很多同学在做项目实战的时候,得到需求都不知道该做些什么,这就是因为大脑里没有对要做的事情有规划.还有的同学东想想,西想想,脑袋越想越乱,昏昏欲睡,目光呆泻....
      我曾多次告诉学员,你要开发一个项目的时候,首先要画一张数据关系图(ER图),从需求里找出关键的数据对象,理清它们之间的关系,并且在图上体现出来.这样,项目的基础--数据的设计就出来了.那么针对项目的设计,再画一张图,主要是根据这些数据对象之间的关系,以及你想要获取什么数据对象,来定义新的对象和其方法,并且一步步的在图上描绘出来它们之间的联系,并且相应的标上注释.简单的来说,大体就是这样,当然这其中牵扯了很多内容都被我们忽略了.有了这两份图,起码你知道你应该做什么,怎么去做.接下来的工作就是你用代码实现这两份图的思想了.虽然简单,但有了针对性,目标才更加的明确,实现起来才更加容易.
      罗马不是一天建成的,我们需要慢慢的去锻炼自己的设计能力,之所以要慢慢,是因为对需求的设计锻炼多了,编码多了,你才能从中有所收获.设计是门艺术,形你可以学,但神韵需要你自己去体会,去悟,去修炼....
      以前我们学习过用visio2003画ER图,但要学习设计,我觉得还是PowerDesigner比较好,因为它是一站式的解决方案,从概念到物理到基本实现.
      我们今天呢,就从学习用PowerDesigner来画和ER图差不多的东西,比较专业的术语是概念模型.
      要求基础:<<SQL Server数据库设计和高级查询>>(s2学期)
      我们打开PowerDesigner12.5后看到的工作界面如下:

      接下来呢,我们要新建一个概念模型,文件->新建,选择如下:

      当然你可以修改模型名字为你所喜欢的,点击确定就可以了.接下来,你会看到工作区的变化:

      你会看到左边出现了Diagram_1,这就是你要建模的地方,当然,你可以新建多个.为什么要建多个呢?如果你的项目是分模块的,那么把相关数据对象创建在不同的Diagram中,这样划分是十分清晰的.(当然还有好的解决方案,下祥)那么如何新建Diagram呢?看下图:

      我们接着来了解一下设计工具:

      理论说的够多了,现在我们来一个实际的需求,学员管理,对每个班的学员进行管理,超级简单吧,可以分析出有两个实体,学员和班级,并且,它们之间是多对一的关系. 先拖两个实体到图(Diagram)上:

      只是拖拽了两个实体,我们还需要设置这两个实体,让它们代表各自的真实含义.双击实体可以打开属性设置界面,其中name是在外面显示这个实体的名字,code是实际编码中用到的.

      打开Attribute选项卡来设置此表的字段,点击Data Type表格可以弹出字段类型的设置窗口,后面的M代表不能为null,P为主健(这里术语是标识符),D代表显示.

      当然了,你可能觉得设置属性,该处提供的设置太少了.没关系,双击属性可打开更详细的设置页面:

      可以在下面添加检查约束:

      不满足?想要更多的约束??满足你!!点击左下角的More按钮:

      全部设置好实体后如下,没有外健吗?问的好,概念模型只需要定义关系就好了:

      接下来,我们要建立关系了,拖动Relationship图标,按对应关系指向实体,结果如下:

      点击关系名可以设置更具体的内容:

      接下来,我们可以深入设置对应关系:

      相信大家看图已经一目了然了,班级和学员的关系是一对多的关系,也就是一个班级有多名学员.Mandatory这个选项是什么意思呢?如果选择了强制关系,以班级表to学生表为例,可以看到后面的映射基数是0,n.也就是说一个班级可以没有学生,也可以有多个学生.在勾了Mandatory后,映射基数变为1,n.也就是一个班级必须最少有一个学生.
      最后,我们完成了这个很简单的概念模型,如下:

      是不是美中不足的是映射基数没有显示出来,有点不直观啊,没关系,设置工具->显示参数选择,然后勾选Cardinality即可,看图示:

      最后的概念模型图:

      这只是部分,同学们要学会组合,这样才完整,学会工具使用没什么,重要的是要把思想和工具结合起来才敏捷啊.下讲是关于关系(Association)设计问题的探讨.其余未尽事宜,老规矩:一办找我交流!!(本文用工具:PowerDesigner12.5+汉化包)

2 条评论: