什么是数据冗余?
数据冗余是指数据之间的重复,也可以说是同一数据存储在不同数据文件中的现象。
举个例子
表 s (学号, 班级,姓名 ) c(课程名, 课程号 ) 表 cc(学号 课程号)
表 d(学号 班级 课程名)
学生选课关系 ,s表定义学生信息 ,c表定义课程信息 ,cc表定义选课信息
表 d则属于数据数据 , 因为表d可以用语句
select 学号 班级 课程名
from s,cc
where s.学号=cc.学号
来表示
关系数据库的数据冗余形成的原因
表的重复、属性的重复、元组的重复、属性值的重复。有的数据冗余用于数据间建立联系、数据安全或为了数据使用的便利,是必需的数据冗余,而其余的数据冗余为非必需的数据冗余应尽量予以消除。按属性值域集合基的特点将其分为有限类和无限类。无限类属性值偶尔重复不是数据冗余,有限类属性值的重复由一对多或多对多的关系所致,可相机处理之。
关系数据库中的数据冗余主要是指关系数据库中同一信息数据的重复存贮。
数据冗余浪费了宝贵的资源,应尽量减少。但关系数据库中为实现一些功能有些数据冗余是必需的。必需的数据冗余主要用于以下用途:
(1)数据间建立联系,如两表间通过共同属性建立联系;
(2)数据恢复,如建立备份文件以备正式文件被破坏时恢复;
(3)数据核查,如设立数据校验位可以检查数据在存贮、传输等过程中的改变;
(4)数据使用的便利,如为了查看数据的直观,使用数据的方便、高效。
(5)减少数据通讯开销,如分布式数据库在不同场地重复。
避免数据冗余-数据库三范式
-第一范式(1NF)
所有的域都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项,即没有重复域。
-第二范式(2NF)
在满足第一范式的基础上,要求数据库表中的每个实例或记录必须可以被唯一地区分。
-第三范式(3NF)
在满足第二范式的基础上,任何非主属性不依赖于其它非主属性。