程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

数据库系统原理:规范化概述

balukai 2025-01-06 11:10:12 文章精选 6 ℃

关系数据库设计的核心是关系模式的设计,规范化理论是关系数据库的重要理论基础,是关系数据库模式设计的指南和工具。

学习规范化理论产生的背景,了解规范化问题是如何被提出的。

一、模式概念回顾

回顾几个关于模式的概念:

关系:描述实体、属性和实体间的联系,从形式上看,关系就是一张二维表;

关系模式:用来定义关系;(就相当于是这种二维表的表头)

关系数据库:基于关系模型的数据库,利用关系来描述现实世界,从形式上看是由一组关系组成;

关系数据库模式:定义这组关系的关系模式的全体。(可以看做所有二维表的表头组成关系数据库的模式。)

关系模式的一般形式:R(U, D, DOM, F) (一般情况下,一个关系模式可以用一个五元组来表示。)

R ==>关系名

U ==>全部属性集合

D ==>属性所来自的域的集合

DOM==>属性向域的映象集合

F ==>属性间数据的依赖关系集合

主要讨论的即与关系模式设计相关的主要是R、U、F,因此把关系模式用一个简单的三元组R(U,F)来表示。


二、泛关系模式存在的问题

对于描述一个现实世界的问题,可以设计出多个不同的关系模式,哪个模式更好、或者说如何去设计一个合理的关系数据库模式?

例如对于学生选课问题,设计一个关系数据模型以存放学生各门课考试成绩。可以设计多种情况,有多个答案。

有若干答案:

1)三个模式组成:

STUDENT关系:(sno,sname)学生关系:存储学生的基本信息;

COURSE关系:(cno,cname)课程关系:存储课程的基本信息;

GRADE关系:(sno,cno,grade)成绩关系:存储某一个学生选了某一门课的成绩信息。

2)两个模式组成:(将学生关系和成绩关系合并成了一个关系)

GRADE关系:(sno,sname,cno,grade)学生成绩关系:给出了学生的基本信息以及选课的基本信息;

COURSE关系:(cno,cname)课程关系:存储课程的基本信息。

3)一个模式:(将上述的所有属性合在一起组成一个关系模式)

GRADE关系:U={sno,sname,cno,cname,grade}

我们称3)为泛关系模式,它把现实问题的所有属性组成一个关系式,这是最简单的一个情况。

从上图的泛关系模式的具体的示例中可以看出,某一个学生叫什么名字、选了什么课、课程名是什么、他的成绩是多少。

泛关系模式存在的异常现象、存在的问题:

(1)数据冗余;(如果学生的记录变得很多、或者课程变得很多、或者是每一个学生的属性、课程的属性都增加,那么数据会出现大量的冗余的情况。)

(2)插入异常;(由于在泛关系模型可以看到,候选键是学号和课程号;那么,如果某一个学生没有选课的话,就没有办法将数据插入到表中。)

(3)更新异常;(如果对某一个数据进行更新的话,就需要更新多行。)

(4)删除异常;(如果想要删除掉学生s1的所有的选课信息,那么s1他本身的学生信息也会一并被删除,造成删除的异常。)

产生问题的根本原因:是存在属性间的各种函数依赖关系。

属性间约束关系(即数据间的依赖关系)太强。

解决泛关系存在的上述异常现象的方法:通过模式分解来把不合理的属性间的依赖关系去除,这个过程被称为关系的规范化设计。

以上述泛关系实例为例,解决问题的方法: 分解关系。

可以将其分解为三个关系-学生关系、课程关系、选课关系。这样,冗余就会大幅减少插入异常现象也不会出现,删除异常、更新异常也被解决。


三、总结

关系数据库设计的核心是关系模式的设计。关系模式的设计就是按照一定的原则从数量众多而又相互关联的数据中,构造出一组既能较好地反映现实世界、而又有良好的操作性能的关系模式。

对于规范化来说,要解决的主要问题是:

(1)怎样评价关系模式的优劣。

(2)怎样将一个关系模式分解为一组较理想的关系模式。

最近发表
标签列表