如何保证数据库结构的合理性(三、建立可靠的关系)

(三)建立可靠的关系

    关系本身可以分为三类:一对一、一对多、多对多。而每种关系都是以专门的方式建立的,这里先简要回顾一下。

    通过从“主”表中拷贝其主关键字并插入到“从属”表中,成为从属表的外关键字,这样建立一个一对一的关系。这是洋特殊的关系,在多数情况下,外关键字也是从属表的主关键字。

    建立一对多的关系是这样的,拷贝“一”关系安放能够的表的主关键字,并将其插入到“多”方的表中,成为“多”方表的外关键字。

    多对多关系的建立要创建一个关联表。这个关联表通过把关系中每一个表的主关键字拷贝出来形成新表的结构。这些字段通常会有这样两个截然不同的作用:这些字段组合在一起形成关联表的组合主关键字;同时这些字段各自又都作为一个外关键字。

    为了保证数据库中表的关系是真正可靠的,还必须给每一个关系创建关系特征。定义这些特征就可以表明删除一条记录会发生什么样的后果、关系中表参与的类型、以及每一个表的参与程度。

    在讨论关系特征之前,必须弄明白的一点是:要在引用的通用逻辑结构中描述这样的一些特征。这些特征非常重要,因为它们可以增强关系的完整性。然而,在不同的软件平台上其实现方法可能会有很大差别。使用前应该仔细查看软件所附带的文档,确定是否支持这些特征,如果支持,又是如何实现的。

 

1)  建立删除规则

    删除规则确定了用户发出请求,要求从一对一关系中的“主”表或者从一对多关系中“一”关系方表中删除一个记录时所响应的动作。创建这样的规则可以防止出现“孤立”记录。(“孤立”记录是这样的一些记录,它们存在于一对一关系的“从属”表中,但在“主”表中却没有相应的记录对应,或者是在多对多关系的“多”关系方的表中存在而“一”方的表中却找不到相关的记录。)

    可以给关系设置以下两种类型的删除规则:限制和级联。

 

    1.限制删除规则:若想要删除的记录在一对一关系的“从属”表中或一对多关系的“多”方表中还存在相关的记录,则不允许删除该记录。必须先删除这些相关的记录之后才能再删除该记录。

 

    2.级联删除规则:如果要删除某条记录,那么同时强制地把和它相关的一对一关系的“从属”表中的记录或一对多关系的“多”方表中的记录也一并删除。这类规则的使用要非常慎重,要不可能最后会把想要保留的记录都删掉了。

    无论使用哪中类型的删除规则,都要仔细检查关系本身来决定到底使用哪种类型的规则更合适。可以通过一个简单的问题来帮助做出选择。首先,选择关系中的两个表并提出这样的问题:“是不是[主表或“一”关系方的表]中的一个记录删除时,在[从属表或关系中“多”方的表]中的相关记录同时也要被删掉?”

    这个问题是根据一般情况提出的,可以理解它的基本假设前提。在实际应用中,把方括号中的内容用表名称代替。比如:“是不是Committees表中的一条记录删除时,Committee_Menbers表中的相关记录也要同时删除?”

    如果答案是“不”,那么就用限制删除规则,否则就用级联删除规则。而最终,这个问题的答案主要还是取决于如何使用数据库中存储的数据。这也就是确保选择一个正确规则的原因。

 

2)设定参与类型

    在建立两个表之间的关系时,每一个表都是以某种方式参与关系。一个表的参与类型指定了是否在另一个表添加某一记录之前必须在此表中有记录存在。有两种类型的参与方式。

    强制型——在添加任何记录到其它表之前,这个表中至少必须要有一条相关记录。

    可选型——在其他表添加记录之前并没有特别要求是否这个表必须包含相关记录。

    两个表的参与类型的选择主要还是卡年组织的逻辑事务的行为。

    例如,一个公司有好几个部门,公司的数据库中有一个Employees表,一个Departments表,一个Department_Employees表。其中Department_Employees表是一个关联表,允许把许多雇员和一个部门关联起来。

    在最近一次部门调整上,要将一部分职员分配到一个新的部门Research_Development部,现在问题就出来了:要先确保添加了这个新的部门到Departments表中,这样才能在Department_Employees表中给这个部门分配职员。设置Departments表的参与类型为强制型,设置Department_Employees表的参与类型为可选型,这样设置完成后,才能确保在Department_Employees表中给部门分配职员之前这个部门是已经在Departments表中先建立好了的。

    参考删除规则,仔细分析每一个关系并确定其中的每一个表的合适的参与类型。

 

3)设置参与程度级别

    在确定了每一个表是如何参与到关系中来的,接着就必须指出每一个表的参与是什么样的程度级别。这可以通过确定一个表中的记录和另一个表中某一单个记录相关联的最大最小数目来实现。这个过程也可以成为确定表的参与级别。参与级别用两个数字来描述,这两个数字用圆括号圈起来,中间用逗号隔开。第一个数字表示的是最小的关联记录数,后一个数字表示的就是最多能关联的记录数目。例如,这样的一个参与级别(1,12)就表示能关联的最小记录数是1,最大数是12。

    数据库中各个表的参与级别的选择确定,很大程度上依赖于数据使用和查看的方式。同其他关系特征一样,要对关系仔细研究,才能确定每个表的合适的参与级别。

posted @ 2012-09-29 11:53  竹风抚荷塘  阅读(1828)  评论(0编辑  收藏  举报