关系模式知足第2、三范式的求解方法!

1、将非第二范式分解成第二范式函数

前记:非第二范式-存在非主属性对主键的部分函数依赖。
  • 分解步骤
    一、用组成主键的属性集合的每个子集做为主键构成一个新的关系模式。
    二、将依赖于这些主键的属性放置到相应的新的关系模式中。
    三、最后去掉只由主键的子集构成的关系模式。

例如:关系(Sno, Sname, Ssex, Sdept, Sloc, Cno, Grade)
对应:(学号,姓名,性别,所在系,宿舍楼号,课程号,成绩)code

分析:由于该关系模式的主键是(Sno,Cno),而且有Sno->Sname,所以Sname部分函数依赖于(Sno,Cno),因此,该关系不知足第二范式。     
 解:将该关系模式分解为以下三个关系模式(**部分表示主键)
     (**Sno**, Sname, Ssex, Sdept, Sloc)
     (**Cno**) //去掉
     (**Sno, Cno**, Grade)
     最后,获得了两个知足第二范式的关系。

2、将非第三范式分解成第三范式集合

前记:非第三范式-存在非主属性对主键的传递函数依赖。
  • 分解步骤
    一、对于不是候选键的每一个决定因子(依赖关系中左边的部分),从关系模式中删去依赖于它的全部属性。
    二、新建一个关系模式,新关系模式中包含原关系模式中全部依赖于该决定因子的属性。
    三、将决定因子做为新关系模式的主键。

例如:(Sno, Sname, Ssex, Sdept, Sloc)中,Sdept不是候选键,可是Sdept->Sloc。因此,Sdept是决定因子,从关系中删去依赖它的Sloc。co

新建一个关系模式(**Sdept**, Sloc)。
最后关系模式(Sno, Sname, Ssex, Sdept, Sloc, Cno, Grade)被分解为三个知足第2、三范式的关系模式:
(Sno, Sname, Ssex, Sdept)
(**Sdept**, Sloc)
(**Sno,Cno**, Grade)
相关文章
相关标签/搜索