1
数据库原理与应用技术
1.4.1 3.1 问题的提出
3.1 问题的提出

当设计关系数据库时,常采用一种自下而上的设计方法。这种方法对涉及的所有数据进行收集,然后按照栏目进行归纳分类。

假定有关系S(no,name,sex,cour,degr)

其中,S表示学生表,对应的各个属性依次为学号、姓名、性别、课程和成绩,(no,cour)是主键。

下面分析这样的关系模式在实际使用中会出现什么问题。

1. 数据冗余

如果一个学生选修多门课程,则会导致name和sex属性多次重复存储,造成数据冗余。

2. 更新异常

由于数据存储冗余,当更新学生姓名时,该关系中与之对应的所有课程名都要进行修改。如果不慎漏改了某些记录,则会造成数据的不一致,这属于更新异常。

3. 插入异常

如果某个学生未选修课程,cour就为空,而关系数据模式的完整性规则中规定主键不能为空或部分为空,则其no、name和sex属性值就无法插入,这便是插入异常。

4. 删除异常

当要删除所有学生成绩时,也会删除与之相关的所有no、name和sex属性值,这便是删除异常。

为了克服上述异常,将关系S分解为如下两个关系:

S1(no,name,sex)

S2(no,cour,degr)

为什么关系S分解成S1、S2之后,原来存在的问题就基本解决了呢?问题的实质是什么?如何把一种不好的关系模式分解成好的关系模式?其理论基础是什么?这是本章要解决的问题。解决这些问题的办法就是重新设计数据库。

关系模式有严格的理论基础,也是目前应用最为广泛的数据模型。关系数据库规范化理论指导数据库的逻辑设计。该理论主要包括数据依赖、规范化和模式分解三个方面的内容。本章着重介绍这三个方面的内容。