摘要: 对于数据库的设计,我们一般从概念模型开始,在概念模型设计阶段,我们着重分析数据的逻辑结构,避免陷入具体的存储细节,所有的设计都与将来所要采用的具体数据库产品无关。本文适合已经掌握数据库基本设计理论或者已经具有实际经验,打算借助Power Designer进行辅助设计的读者。另外,如果能够额外的从您那里获得批评和指正,将不胜荣幸!本文是第二部分。
版权声明: 本文可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息。
原文出处: http://www.aiview.com/v_3/focus/pd_conceptual_model_2.htm
作者: 张洋 Alex_doesAThotmail.com
最后更新: 2004-11-21
目录 |
|
谁适合阅读本文
本文适合已经掌握数据库基本设计理论或者已经具有实际经验,打算借助Power Designer进行辅助设计的读者。
如果你已经是一个Power Designer的熟练使用者,或者你期望的是一些数据库的设计理论,请跳过本文。
如果你还不清楚数据库的基本设计理论,比如关系模型,范式,又有志于数据库设计领域的话,最好能够先打好基础,先找些与上面有关的资料看看,即使是优秀的辅助设计工具也并不能够替代我们设计出一个规范化的模型。
本文是第二部分,接上篇: 在Power Designer 中应用概念模型进行数据库第一阶段设计的示例(一)假设您已经安装好Power Designer 9.5 版本,如果您还没有获得软件,请到Sybase网站下载试用版本。
定义更复杂的关系
使用依赖关系(Dependent)
还是使用上面的例子,我们假定这样的业务描述:雇员享有假期,雇员每次休假,需要记录雇员休假的起始日与结束日,假期以天为单位,一个雇员和一个开始日唯一确定一个假期。根据这个业务描述,我们知道,对于假期而言,其必须依存于实体“Employee”而存在,即一个休假,必定有一个主体雇员。我们在上一个模型的基础之上,添加一个实体,名称是“Holiday”,定义假期的属性开始日与结束日,这里并不需要重复定义一个雇员编号,而是替代的,使用依赖关系,来表示实体“Holiday”依赖于实体“Employee”,关系定义如下图:
在实体“Holiday”中,我们需要设置开始日为主键标识符,开始日与其依赖实体中的雇员编号一起作为实体“Holiday”的标识符,用来唯一确定一个假期。这种依赖关系在概念图中表现如下:
从途中可以看出,在实体“Holiday”一端多了一个朝外的三角▲箭头,这个含义就是这个实体“的依赖于三角箭头所指的另外一个实体,在转化出来的物理模型当中,实体“Employee”的empNo,在Holiday实体中不仅会作为一个外键,还同时会作为主键出现(与startData一起作为复合主键)。
使用Dominant role
当两个实体之间的关系是1..1 时(尽管这种关系比较少见,常见于面向对象的设计方法当中,依赖实体中的主键通常与外健重合),你需要明确指定这两个实体,哪一个是父实体,哪一个是依赖实体,否则,系统在由概念模型转化为物理模型时,将不能确定需要在哪一端生成外键,这时就需要用到“Dominant role”选项,这个选项只有在1..1 的关系中才允许进行设置。我们假定这样的业务描述,企业中的部分雇员拥有一个系统帐号,并且是唯一的一个帐号,这些雇员需要保存一些额外的信息,比如帐号名称、密码等等。我们添加了一个新的实体“User”,其与雇员之间为1..1 的关系,由于一个用户帐号必定属于一个雇员,而一个雇员则可能没有用户帐号,所以我们定义实体“Employee”支配实体“User”。同时,由于“User”依赖于“Employee”而存在,所以再定义一个由前者到后者的依赖关系,如下图:
Dominant role 选项中,箭头所指的实体为被支配的实体,即作为依赖实体。在模型图中,支配实体的一方会出现一个用圆括号括起来的大写字母“D”。
转化出来的物理模型中,表User中,empNo作为单独的主键,同时也是引用Employee表的一个外键。
处理多对多(n..n)的关系
在概念模型中,一般很少看见两个实体之间是直接的n..n 的关系,一般这种情况下我们会增加一个中间实体,在Power Designer中,提供了一个专门的符号来对应,叫做“Association”。请考虑以下的情形:
企业中拥有帐号的雇员在系统中具有不同的操作权限,这通过用户角色来进行管理,权限已经分配给了多个不同的角色,一个用户帐号至少属于一个角色,并且可能会同时属于多个角色,一个角色可以包含0个或多个用户帐号。根据以上描述,我们添加一个实体“Role”,它与实体“User”之间是n..n 的关系,为了表达这种关系,我们增加一个“Association”并分别使用“Association Link”与其他两个实体建立关系,表示如下:
使用一个普通的实体,合理定义关系,并选择“Dependent”选项,是可以替代“Association”的,但使用“Association”更方便、直观,使模型更容易理解,并可以减少因不谨慎而可能导致的错误。
(完)