数据库系统概论——6.第六章关系数据理论[入门笔记0.2]

6.关系数据库理论

关系数据库理论, 是针对逻辑设计,就是如果去更好地设计逻辑模型。

6.1问题的提出

关系数据库逻辑设计

  • 问题:针对具体问题, 如何构造一个适合于它的数据模式?这是数据库设计的问题, 确切地将是关系数据库逻辑设计问题。
  • 数据库逻辑设计的工具——关系数据库的规范化理论

6.1.1概念的回顾

  • 关系:描述实体、属性、实体间的联系。从形式上看,它是一张二维表,是所涉及属性的笛卡尔积的一个子集。

  • 关系模式:用来定义关系

  • 关系数据库:基于关系模型的数据库,利用关系来描述现实世界。

    从形式上看,它由一组关系组成。

  • 关系数据库的模式:定义这组关系的关系模式的全体。

6.1.2. 关系模式的形式化定义

关系模式由五部分组成,即它是一个五元组:

R(U, D, DOM, F)

  • R: 关系名
  • U: 组成该关系的属性名集合
  • D: 属性组U中属性所来自的域
  • DOM: 属性向域的映象集合
  • F: 属性间数据的依赖关系集合

由于D、DOM与模式设计关系不到,因此可以将关系模式看做一个三元组。

简化为一个三元组:R(U,F)

6.1.3. 什么是数据依赖

  1. 完整性约束的表现形式

    • 限定属性的取值范围: 如学生成绩必须在0 -100之间

    • 定义属性值间的相互关联(主要体现于值得相等与否): 如学生关系, 学号确定, 学生的姓名就确定。 不会出现一个学号 对应多个名的情况。

      这就是数据库依赖, 它是数据模式设计的关键


  2. 什么是数据依赖

    • 是一个关系内部属性与属性之间的约束关系
    • 是现实世界属性间相互联系的抽象
    • 是数据内在的性质
    • 语义的体现

  3. 数据依赖可以作为关系模式取值的任何一个关系所必须满足的一种约束条件,是透过一个关系数值间的相等与否体现出来的相互关系。

    举例:在一个学生关系中,客观存在每个学生必须有一个唯一的学号,当一个学生的学号确定以后,该学生的其他属性,如姓名、性别、班级等值就唯一的确定了。在关系模式学生的任何一个关系中,都不可能存在两个元组,他们的学号取值相等,而他们的姓名、性别和班级取值不相等。这就是一种数据依赖


  4. 数据依赖的类型:函数依赖、多值依赖

    函数依赖,比如描述一个学生关系,可以有学号、姓名、系名等属性。 一个学生的学号确定了学生的姓名和所在系也就确定了。这类似于数学中的函数y=f(x), x确定了, 对应的y也就确定了。


6.1.4. 数据依赖对关系模式的影响

举一个学生教务系统的数据库的例子:

组成:学生的学号(Sno)、所在系(Sdept)、系主任姓名(Mname)、课程名(Cname)、成绩(Grade)

单一的关系模式 : Student <U、F>U ={ Sno, Sdept, Mname, Cname, Grade }

属性组U上的一组函数依赖F: F ={ Sno → Sdept, Sdept → Mname, (Sno, Cname) → Grade }

根据该关系模式建立的表如下图所示

数据库系统概论——6.第六章关系数据理论[入门笔记0.2]


关系模式Student<U,F>中存在的问题

  • 数据冗余太大: 系和系主任的名字重复多次,浪费内存。
  • 更新异常:如果某系更换系主任,需要把表中系主任名都更改,代价很大。
  • 插入异常: 如果新成立的一个系,没有学生,则无法将系名和系主任添加到数据库。
  • 删除异常:如果该系的学生都毕业了,删除了所有学生的信息, 系和系主任的信息也就被删除了。

结论

Student关系模式不是一个好的模式


原因

由存在于模式中的某些数据依赖引起的


解决方法

通过分解关系模式来消除其中不合适的数据依赖。这就是关系数据理论所要学习的内容