数据冗余的理解和相关概念

2012年6月22日有同学去完爱森哲面试回来说,有一问题是问如何消除数据冗余的,我一时也忘了数据冗余的相关概念,于是再复习了一遍:

数据冗余

关系数据库的数据冗余形成的原因:表的重复、属性的重复、元组的重复、属性值的重复。有的数据冗余用于数据间建立联系、数据安全或为了数据使用的便利,是必需的数据冗余,而其余的数据冗余为非必需的数据冗余应尽量予以消除。按属性值域集合基的特点将其分为有限类和无限类。无限类属性值偶尔重复不是数据冗余,有限类属性值的重复由一对多或多对多的关系所致,可相机处理之。

 

  1. 关系数据库中的数据冗余主要是指关系数据库中同一信息数据的重复存贮。
      数据冗余浪费了宝贵的资源,应尽量减少。但关系数据库中为实现一些功能有些数据冗余是必需的。必需的数据冗余主要用于以下用途:

(1)数据间建立联系,如两表间通过共同属性建立联系;

(2)数据恢复,如建立备份文件以备正式文件被破坏时恢复;
  (3)数据核查,如设立数据校验位可以检查数据在存贮、传输等过程中的改变;
  (4)数据使用的便利,如为了查看数据的直观,使用数据的方便、高效。
  (5)减少数据通讯开销,如分布式数据库在不同场地重复。

 

  1. 2.       数据冗余的成因

关系数据库由表及附属文件组成,其表由属性定义的结构和元组(记录)组成,其属性值域有多种类型,故关系数据库的数据冗余形成的原因有表的重复、属性的重复、元组的重复、属性值的重复4类。
2.1 表的重复
  为了数据安全的需要制作备份表,当主表被破坏时可用此恢复数据。分布式数据库为减少数据通讯开销也常重复放表,这种数据冗余在这里是必需数据冗余,不能删除。若是因其他原因产生的非必要的重复表则应予以删除。
2.2 属性重复
  有不同表的属性重复和同一表内属性重复2种情况:
  (1)  不同表中属性重复常用来建立表之间联系,这只需要一个公共属性,这是必需数据冗余,不能删除;各表间的多于一个的属性应当删除。如有以下3个表:

T1(A,B,C);T2(A,B,D);T3(A,C,D,E)。

其中属性A为三表所共有;属性B为T1,T2 两张表所共有,属性C为T1,T3 两张表所共有;属性D为T2,T3 二表所共有。如取A为公共属性则,T1,T2 两张表中只能保留一个B属性;T1,T3 两张表中只能保留一个C属性;T2,T3 两张表中只能保留一个D属性。
  (2)  同一表内有相同属性内容的多个属性,若非数据安全检查的需要,应删除之。
2.3 元组的重复
  表内不同记录内容有时会完全相同,若非必要,应予以删除。
2.4 属性值的重复
  按属性值域集合基的特点可以将其分为有限类和无限类。
  (1)  无限类属性值的重复。无限类属性值是指其属性值域集合的基为无限大或者数据库记录数为同一数量级的属性值,如实数、整数、日期、各种编号。
  无限类属性值偶尔也可能重复,但这只是巧合,而并非数据冗余。
  (2)  有限类属性值的重复。有限类属性值是指其属性值域集合的基小于数据库记录数至少一个数量级的属性值,如产品名,部门名,职称名,课程名。
  有限类属性值的重复实际上是由一对多或多对多的关系引起的,有时可作为必需冗余数据不予以处理,这时不需程序就有较好的查看效果和工作效率。但当重复量很大时,也应当设法对所引起的数据冗余进行压缩,这通常要建立新表和相应的程序。

2.5 不同成因的数据冗余用不同层次上的操作来消除。

                   (1)消除表的重复所引起的数据冗余为磁盘文件级的操作。

                   (2)属性的重复所引起的数据冗余的消除为对数据库结构修改的操作。
                   (3)元组的重复所引起的数据冗余的消除由记录级的操作完成。

3. 数据冗余的缺点:

a)   存储空间的浪费。

b)   数据交互和数据库访问执行效率降低。

  1. 代码的冗余  可以用存储过程来解决
  2. 删除冗余数据:用一个PL/SQL 方案(一个自定义的存储过程)或者一个SQL语句的解决方案(使用一个分析的函数RANK()和一个嵌套的子查询)来消除冗余数据然后控制应该保留的记录,详细见参考资料2
  3. 减少冗余数据:使用范式设计。
  4. 常见类型数据库设计技巧、模型,详见参考资料3

 

 

 

 

附:

  1. 1.       题外:数据库的最初雏形据说源自美国一个奶牛场的记账薄(纸质的,由此可见,数据库并不一定是存储在电脑里的数据^_^),里面记录的是该奶牛场的收支账目,程序员在将其整理、录入到电脑中时从中受到启发。当按照规定好的数据结构所采集到的数据量大到一定程度后,出于程序执行效率的考虑,程序员将其中的检索、更新维护等功能分离出来,做成单独调用的模块,这个模块后来就慢慢发展、演变成现在我们所接触到的数据库管理系统(DBMS)——程序开发中的一个重要分支。
  2. 2.       数据库范式设计:

数据库范式是数据库设计中必不可少的知识,没有对范式的理解,就无法设计出高效率、优雅的数据库,甚至设计出错误的数据库。

a)         第一范式(1NF):属性不可分

b)         第二范式(2NF):符合1NF,并且,非主属性完全依赖于码。

c)         第三范式(3NF):符合2NF,并且,消除传递依赖

d)         BC范式(BCNF):符合3NF,并且,主属性不依赖于主属性(如果关系模式属于第一范式,且每个属性都不传递依赖于键码,则R属于BC范式)。

 

参考资料:

  1. http://elec.wanfangdata.com.cn/qikan/periodical.articles/glgxy/glgx99/glgx9903/990313.htm  关系数据库的数据冗余
  2. http://www.bj-xinhua.com/001oldSite/News/2005101092017.html 如何删除数据库中的冗余数据(删除数据库冗余数据的几种具体方法参考)
  3. http://blog.csdn.net/zhuangzhineng/article/details/4029522  浅谈数据库设计技巧(实例一定的数据冗余) .

 

转载于:https://www.cnblogs.com/learningbird/archive/2012/07/19/2598609.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/475058.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

红米note3android版本,小米-红米note3-LOS-安卓9.0.0-稳定版Stable3.0-来去电归属-农历等-本地化增强适配...

制作者:MOS-Developer基于版本:LineageOS Android最新安卓9.0.0代码适合机型:小米红米note3高配/标配/低配/kenzo注意事项:为了能一直更新和维护,不付费不收费,请把预装的4个软件使用3-5天后再卸载&#xf…

LeetCode 305. 岛屿数量 II(并查集)

文章目录1. 题目2. 解题2.1 超时解2.1 改进计算方法1. 题目 假设你设计一个游戏,用一个 m 行 n 列的 2D 网格来存储你的游戏地图。 起始的时候,每个格子的地形都被默认标记为「水」。 我们可以通过使用 addLand 进行操作,将位置 (row, col)…

cygwin下的gcc-4.7.1编译心得

步骤: 1、先编译gmp mpfr mpc这几个库,注意configure时--prefix/usr/local/ 2、中间碰到过can not compute suffix的错误,在命令 export LD_LIBRARY_PATH/usr/local/:${LD_LIBRARY_PATH} export LD_RUN_PATH/usr/local/:${LD_RUN_PATH} 也不行…

鸿蒙系统怎么换windows,求助~鸿蒙系统windows环境搭建(hpm-cli安装失败)!

系统win10,执行命令“npm install -g ohos/hpm-cli”,报错如下:npm ERR! code EEXISTnpm ERR! path C:\Users\jay\AppData\Roaming\npm\node_modules\ohos\hpm-cli\bin\hpmnpm ERR! dest C:\Users\jay\AppData\Roaming\npm\hpmnpm ERR! EEXIS…

LeetCode 265. 粉刷房子 II(DP)

文章目录1. 题目2. 解题1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成 k 种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。 当然,因为市场上不同颜色油漆的价格不同,所以房子粉刷成…

string::size_type

重读c primier, 从这个文章开始做个记录,方便以后自己查阅。 1、string::size_type,string的size()方法返回的类型,可以保证string的任意长度。作为配套类型使得string类型的操作与机器无关。 2、操作时需加上作用于操作符&#x…

鸿蒙系统笔记本价格,鸿蒙系统手机华为P50将明年3月发售,华为P40价格骤降至冰点...

原标题:鸿蒙系统手机华为P50将明年3月发售,华为P40价格骤降至冰点鸿蒙系统手机华为P50将明年3月发售,华为P40价格骤降至冰点!每一代P系列产品都基于华为研发和业界合作伙伴的最前沿的能力,实现全新的突破,明…

LeetCode 272. 最接近的二叉搜索树值 II(栈+优先队列)

文章目录1. 题目2. 解题1. 题目 给定一个不为空的二叉搜索树和一个目标值 target,请在该二叉搜索树中找到最接近目标值 target 的 k 个值。 注意: 给定的目标值 target 是一个浮点数 你可以默认 k 值永远是有效的,即 k ≤ 总结点数 题目保证…

android p dp5,谷歌释出Android P第5个开发者预览版更新!

原标题:谷歌释出Android P第5个开发者预览版更新!【PConline资讯】今天凌晨,谷歌正式推出了AndroidP的第五个开发者预览版(DP5),这标志着AndroidP终于准备好在2018年第三季度来面对广大的Android用户了。具体来说,按照…

Sax解析Xml

程序1. package WildCat.Xml.Sax; import java.io.File; import java.util.Stack; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHa…

LeetCode 750. 角矩形的数量(DP)

文章目录1. 题目2. 解题1. 题目 给定一个只包含 0 和 1 的网格,找出其中角矩形的数量。 一个「角矩形」是由四个不同的在网格上的 1 形成的轴对称的矩形。 注意只有4角的位置才需要为 1。并且,4 个 1 需要是不同的。 示例 1: 输入&#xf…

android数据库给单选赋值,如何使用android studio将单选按钮的值保存到mysql数据库?...

我想创建一个投票应用程序,其中有不同的职位,其中有两个职位每个都有两个联系人。我希望当我选择一个人记录到数据库。 [职位的disgn与它的参赛者部] 下面是XML代码的一部分:如何使用android studio将单选按钮的值保存到mysql数据库&#xff…

LeetCode 267. 回文排列 II(回溯)

文章目录1. 题目2. 解题1. 题目 给定一个字符串 s ,返回其通过重新排列组合后所有可能的回文字符串,并去除重复的组合。 如不能形成任何回文排列时,则返回一个空列表。 示例 1: 输入: "aabb" 输出: ["abba"…

寒江独钓1

驱动模型区分:WDM 必须满足n种被要求的特性(如电源管理,即插即用);如果没有这些功能,则统一称为NT式驱动;如果调用了WDF的内核API,则称为WDF驱动。 本书关注于通用的内核程序开发&am…

html canvas直线进度条,js+HTML5 canvas 实现简单的加载条(进度条)功能示例

本文实例讲述了jsHTML5 canvas 实现简单的加载条(进度条)功能。分享给大家供大家参考,具体如下:www.jb51.net canvas实现加载条动画/** 获取canvas, canvas本身没有画图能力,相当于一个画布,提供绘制图形的地方* document.getElem…

android 打开移动开关,教你一个让安卓手机运行更流畅的小技巧:打开这个开关即可...

原标题:教你一个让安卓手机运行更流畅的小技巧:打开这个开关即可安卓用户对于“系统优化”这个词一定不会陌生,因为Android系统越用越卡的毛病难以解决,必须进行优化才能保持流畅。那么如何调教才能让爱机达到最快的运行速度呢&am…

matplotlib 绘制梯度下降求解过程

机器学习过程中经常需要可视化,有助于加强对模型和参数的理解。 下面对梯度下降过程进行动图演示,可以修改不同的学习率,观看效果。 import numpy as np import matplotlib.pyplot as plt from IPython import displayX 2*np.random.rand(…

android aop 权限检查,AOP简单拦截实现验证权限功能

普通的权限验证一般都是写一个方法,然后再执行方法之前检查一下权限这样做的坏处是每个地方都需要修改加权限验证而用AOP的方式来做的话就很方便网上找了一个例子,测试通过,感觉蛮好用的,记录一下[AttributeUsage(AttributeTargets.All, AllowMultiple false, Inherited true…

COJ 1081 集训队分组

http://acm.csu.edu.cn/OnlineJudge/problem.php?id1081 不是太会写拓扑排序&#xff0c;所以再写一遍。 /*Accepted 880 kb 268 ms C/ 1671 B 2012-07-29 17:08:30*/ #include<cstdio> #include<cstring> #include<cstdlib>const int MAXN …

LeetCode 132. 分割回文串 II(DP)

文章目录1. 题目2. 解题1. 题目 给定一个字符串 s&#xff0c;将 s 分割成一些子串&#xff0c;使每个子串都是回文串。 返回符合要求的最少分割次数。 示例: 输入: "aab" 输出: 1 解释: 进行一次分割就可将 s 分割成 ["aa","b"] 这样两个回文…