zoukankan      html  css  js  c++  java
  • 关系数据库设计理论

    关系数据库设计理论

     构造一个关系数据库模式的方法可有多种

    1、举例(学生选课数据库)

    *数据库模式的构造方法一

    用一个关系模式来描述学生选课信息()

    SCG S no , S name, S sex, S age, S dept C no , C name, C pno, C credit,Grade

    *数据库模式的构造方法二

    *概念模型为(E-R图):

                               m           n

    *将概念模型转换为以下关系模式:

    *学生表S tudent( S no , S name, S sex, S age, S dept) ;

    *课程表C ourse( C no , C name, C pno, C credit) 

    *学生选课 SC( Sno,Cname ,Grade)              

    SCG S no , S name, S sex, S age, S dept C no , C name, C pno, C credit,Grade

    S no

    S name

    S sex

    S age

    S dept

    C no

    C name

    C credit

    Grade

    001

    张三

    18

    101

    Pascal

    4

    90

    001

    张三

    18

    102

    操作系统

    4

    80

    001

    张三

    18

    103

    编译

    3

    98

    001

    张三

    18

    105

    数据库

    4

    87

    001

    张三

    18

    110

    数据结构

    4

    70

    002

    李四

    17

    信电

    103

    编译

    4

    82

    002

    李四

    17

    信电

    105

    数据库

    4

    87

    003

    王五

    19

    化工

    107

    网络

    3

    86

    *学生表S tudent( S no , S name, S sex, S age, S dept) ;

    *课程表C ourse( C no , C name, C pno, C credit) 

    C no

    C name

    C credit

    101

    Pascal

    4

    102

    操作系统

    4

    103

    编译

    3

    105

    数据库

    4

    107

    网络

    3

    110

    数据结构

    4

    *学生选课 SC( Sno,Cname ,Grade)

    S no

    C no

    Grade

    001

    101

    90

    001

    102

    80

    001

    103

    98

    001

    105

    87

    001

    110

    70

    002

    103

    82

    002

    105

    87

    003

    107

    86

    S no

    S name

    S sex

    S age

    S dept

    001

    张三

    18

    002

    李四

    17

    信电

    003

    王五

    19

    化工

    2、数据库模式(关系模式)的不同构造方法与数据冗余度、插入异常、删除异常、更新异常的关系

    1)  冗余度比较

    *方法1冗余度很大:学生信息冗余大(一个学生如选修n门课,其信息要重复存放n遍。如001号张三,重复存放5遍);课程信息冗余大(一门课程被 n 个学生选修,课程信息存放 次)

    *方法2冗余度小:只有学号课程号有冗余。冗余度大大小于前一个,它仅有少量冗余数据,这些冗余数据保持在合理水平。

    2)  更新异常(修改复杂)

    *方法1:由于数据冗余,更新数据库中的数据时,系统需要付出很大的代价来维护数据库的完整性;

    *方法2:修改复杂度大大减少。

    3)  插入异常

    *方法1:没选课程的学生信息,没被选修的课程信息,没法插入到表中;(插入异常)

    *方法2:不同信息存放在不同的关系中,不产生插入异常现象。

    4)  删除异常

    *方法1:如某门课只有一个学生选修,学生毕业或因病退学后,删除相关信息后,课程等信息也被全部删除;(删除异常)

    *方法2:不同信息存放在不同的关系中,不产生删除异常现象。

    3、小结

    1)  在关系数据库设计中,关系模式的设计方案可以有多个;

    2)  不同的设计方案有好坏之分;

    3)  要设计一个好的关系模式方案,要以规范化理论作为指导,规范化理论研究属性间的数据依赖关系,主要有函数依赖与多值依赖。关系规范化按属性间不同的依赖程度分为第一范式、第二范式、第三范式、BC范式、第四范式。

    4.1 函数依赖

    函数依赖是关系模式内属性间最常见的一种依赖关系

    1、  关系中属性间函数依赖举例

    学生关系属性的集合U={ Sno,Sdept,Mname,Cname,Grade }

    现实世界的已知事实:

    1)  一个学生只属于一个系(含义:学号确定后,学生所在的系也就被唯一确定了。类似于数学中的函数y=f(x),x=Sno,y= Sdept 。我们说 Sno 函数决定 Sdept, 或者说 ,Sdept 函数依赖于 Sno,  记做 sno sdept 反过来一个系有若干学生(解释系不能决定学生)

    2)  一个系只有一名系主任(含义:系确定后系主任名被唯一确定了,类似于数学中的函数,我们说 Sdept 函数决定 Mname, 或者说 ,Mname 函数依赖于 Sdept 。记做 S dept Mname

    3)  一个学生可以选修多门课,每门课程有若干学生选修(含义:学号与课程号间够不成决定被决定关系)

    4)  每个学生所学的每门课程都有一个成绩,含义: (sno,cname)  → Grade

    属性组 U 上的一组函数依赖 F={ sno sdept,  S dept Mname,(sno,cname)  → Grade  }    

    2、  函数依赖定义(4 . 1

    R(U) 是一个关系模式, U R 的属性集合, X Y U 的子集。对于 R(U) 的任意一个可能的关系 r ,如果 r 中不存在两个元组,他们在 X 上的属性值相同,而在 Y 上属性值不同,则称“ X 函数决定 Y 或“ Y 函数依赖于 X , 记作 X Y

    见下表,如Sno →Sname,则 不存在 蓝色 两元组(即学号确定后,姓名不确定):

    S no

    S name

    S sex

    S age

    S dept

    001

    张三

    18

    001

    赵六

    002

    李四

    17

    信电

    003

    王五

    19

    化工

    思考题:1)码是否一定函数决定非码属性?非码属性间是否存在函数依赖

      2)SNo Sdept 成立  (Sno,Cno)  → Sdept 是否也成立?

      3)找出以下几个表的中的函数依赖

    SCG S no , S name, S sex, S age, S dept C no , C name, C pno, C credit,Grade

    *学生表S tudent( S no , S name, S sex, S age, S dept) ;

    *课程表C ourse( C no , C name, C pno, C credit) 

    *学生选课 SC( Sno,Cname ,Grade)              

    函数依赖的几点说明:

    1)  函数依赖是所有关系实例(关系模式值的每一状态)均要满足的约束条件。

    2)  函数依赖是语义范畴。只能根据语义确定函数依赖。如:在没有同名的情况下“姓名 年龄”成立

    3)  数据库设计者可以对现实世界作强制的规定。

    4)  X Y ,则 X 称为这个函数依赖的决定属性集

    5)  X Y,Y X 则记为  X           Y

    6)  Y 不函数依赖于 X ,则记为 X      Y

    3、  平凡函数依赖与非平凡函数依赖定义( 4.2

    在关系模式 R(U) 中,对于 U 的子集 X Y ,如果 X Y ,但 Y 不是 X 的子集,则称 X Y 是非平凡函数依赖。若 Y X 的子集,则称 X Y 为平凡函数依赖。

    对于任一关系模式,平凡函数依赖都是必然成立的,它不反映新的语义。(为什么?)

    4、  完全函数依赖与部分函数依赖

    在关系模式 R(U) 中,如果 X Y,  并且对于 X 的任何一个真子集 X' 都有 X' Y ,则称 Y 完全函数依赖于 X ,记作 X Y( f) 。若 X Y ,但 Y 不完全函数依赖于 X ,则称 Y 部分函数依赖于 X ,记 X Y (少 P )。

    5、  传递函数依赖

    在关系模式 R(U) 中,如果 X Y Y Z ,且 Y 不是 X 的子集, X 不函数依赖于 Y ,则称 Z 传递函数依赖于 X

    Std(Sno,Sdept,Mname)  Sno Sdept, Sdept Mname Mname 传递函数依赖于  Sno

    6、 

    K 为关系模式 R( U F )中属性或属性组。若 U 完全依赖于 K ,则 K 称为 R 的一个侯选码。若关系模式中有多个侯选码,则选定一个作为主码。

    4.2范式

    *1 NF :关系模式 R 的所有属性都是不可分割的基本数据项,则 R 1NF

         ( 非主属性函数依赖于码 )

    *不满足1NF的举例:

    学生 ( 学号,姓名,年龄, 入学毕业年月 )

    *1 NF 是关系模式的起码要求

    *第一范式举例:

    SLC(Sno,Sdept,Sloc,Cno,Grade)  

    属性函数依赖情况:

    (虚线表示部分函数依赖,实线表示完全函数依赖)

    插入异常:未选课的学生不能插入,因为码值部分为空( 原因是对码的部分函数依赖造成 )。(解决问题的办法:把部分函数以来部分分解出来)

    删除异常:某一学生的选课信息全部删除后,学生的其他信息也被删除,否则码值部分为空(不允许)( 原因是对码的部分函数依赖造成 )。(解决问题的办法:把部分函数以来部分分解出来)

    数据冗余度大:一个学生选修了多门课程,同一学生的基本信息( Ssept,Sloc )需要保存多次。( 原因是对码的部分函数依赖造成 )。(解决问题的办法:把部分函数以来部分分解出来)

    修改复杂:修改某学生基本信息时,如果其选修多门课程,同一信息需要重复修改多次。( 原因是对码的部分函数依赖造成 )(解决问题的办法:把部分函数以来部分分解出来)

    2 NF :满足第一范式,非主属性完全函数依赖于码

    前面的关系模式不满足第二范式,分解为下面两个模式后,部分函数依赖被消除:

    SC(sno,cno,grade)

    SL(Sno,Sdept,Sloc)

    分解成第二范式后 SC(sno,cno,grade) SL(Sno,Sdept,Sloc) 。以上4个问题在一定程度上得到了解决。

    1)  SL 关系中可以插入尚未选修的学生

    2)  删除学生选课关系,只涉及 SC 关系,不涉及 SL 中的学生基本信息。

    3)  由于学生选课信息于学生基本信息分开存放,不论该学生选修了几门课, Sdept Sloc 值都只存储一次。

    4)  某学生转系,只需要修改相关关系中的一个元组。

    第二范式 SL 中存在传递函数依赖,使得 SL 仍然存在上述4个问题。

    1)  插入异常:系刚成立,无在校学生,无法存入系信息。(解决问题的办法:把与主码无关的函数部分分解出来独立构成关系模式,即消除     对主码的传递函数依赖)

    2)  删除异常:某系的全部学生毕业了,系的信息也丢失了。(解决问题的办法:把与主码无关的函数部分分解出来独立构成关系模式,即消除对主码的传递函数依赖)

    3)  数据冗余度大:每一个系的学生都住在同一个地方,关于系的住处信息却要重复出现。

    4)  修改复杂:当某系学生调整住处时,需要修改所有学生的 Sloc 属性值。

    造成上述4个问题的主要原因:非主属性传递函数依赖于主码。

    解决办法:将传递函数依赖关系分解出来。

    3NF :满足第2范式,且主属性既不部分函数依赖于码,也不传递函数依赖于码

    SL(Sno,Sdept,Sloc)   分解为

                       SD(sno,sdept)

                      DL(Sdept,Sloc)

    规范化过程:

    规范化过程即为关系模式的不断分解过程。

    规范化的实质:概念的单一化。

    规范化的目的:

    不断解决关系插入异常、删除异常、数据冗余度大、修改复杂问题。

    3NF 是工程上的标准,在工程应用上,达到第三范式一般情况下就可以了

    4.3  关系模式的规范化

    1、  第一范式到第三范式的分解过程:分解关系模式消除非主属性对码的部分函数依赖,分解关系模式消除非主属性对码的传递函数依赖。

    2、  关系模式的分解方法并不唯一,只有能够保证分解后的关系模式与原关系模式等价的方法才有意义。

    1)  分解具有无损连接性:分解后不能丢失信息,即分解前的关系与分解后关系的自然连接结果相等。

    2)  分解后应能保持函数依赖。分解前的函数依赖F被分解后关系模式函数依赖F i 所逻辑蕴含

    3)  分解既保持函数依赖,又保持无损连接。

    3、  第3范式是工业标准

    若要求分解既具有无损连接,又保持函数依赖,那么模式分解一定能达到3 NF ,但不一定能达到 BCNF

    习题: P 143

    第3题

    学生(学号,姓名,出生年月,系名,班号,宿舍区)

    班级(班号,专业名,系名,人数,入校年份)

    系(系名,系号,系办公室地址,人数)

    学会(学会名,成立年份,地点,人数)

    学生参加学会(学号,学会名,入会年份)

    只考虑与1、2、3 NF 有关的函数依赖(非主属性部分或完全函数依赖于码,非主属性传递函数依赖于码)

    学生(学号,姓名,出生年月,系名,班号,宿舍区)

      分解为:学生( 学号 ,姓名,出生年月,班号,系) 系宿舍( 系名 。宿舍区)

    班级(班号,专业名,系名,人数,入校年份)

    分解为:班级(班号,专业名,人数,入校年份) 专业系(专业名,系名)

    系(系号,系名,系办公室地址,人数)

    学会(学会名,成立年份,地点,人数)

    学生参加学会(学号,学会,入会年份)

  • 相关阅读:
    Android 获取当前系统时间
    Android下面的MD5加密
    产品管理有行业特殊性吗
    产品经理的人才模型
    什么样的人适合做产品经理
    产品经理是“通”才还是“专”才
    产品经理的职责都有哪些
    产品经理的知识结构是什么
    产品管理职位的级别都有哪些
    产品经理的职业发展路线是什么
  • 原文地址:https://www.cnblogs.com/huyong/p/2685765.html
Copyright © 2011-2022 走看看