当前位置:首页 » 操作系统 » 冗余数据库

冗余数据库

发布时间: 2022-05-23 09:59:07

❶ 什么是数据库中的数据冗余如何消除数据冗余

数据冗余指数据之间的重复,也可以说是同一数据存储在不同数据文件中的现象。可以说增加数据的独立性和减少数据冗余为企业范围信息资源管理和大规模信息系统获得成功的前提条件。

数据冗余会妨碍数据库中数据的完整性(integrality),也会造成存贮空间的浪费。尽可能地降低数据冗余度,是数据库设计的主要目标之一。关系模式的规范化理沦(以下称NF理论)的主要思想之一就是最小冗余原则,即规范化的关系模式在某种意义上应该冗余度最小。

但是,NF理论没有标准的概念可用,按等价原则,在有或没有泛关系假设(universal relation assumption)等不同前提下,冗余的定义可能有好几种。



数据的应用中为了某种目的采取数据冗余方式。

1、重复存储或传输数据以防止数据的丢失。

2、对数据进行冗余性的编码来防止数据的丢失、错误,并提供对错误数据进行反变换得到原始数据的功能。

3、为简化流程所造成额数据冗余。

4、为加快处理过程而将同一数据在不同地点存放。

5、为方便处理而使同一信息在不同地点有不同的表现形式。

6、大量数据的索引,一般在数据库中经常使用。

7、方法类的信息冗余。

8、为了完备性而配备的冗余数据。

9、规则性的冗余。根据法律、制度、规则等约束进行的。

10、为达到其他目的所进行的冗余。

❷ 什么是数据库冗余,如何避免数据库冗余

您好:
数据冗余或者信息冗余是生产、生活所必然存在的行为,没有好与不好的总体倾向。
一般设计数据库是都在达到3范式或更高,否则数据的冗余程度非常高。

通常在设计的时候,需要考虑扩展性,阅读性,响应时间和语句复杂程度等。
需要有一定的冗余来达到维护需要,这往往是经验丰富的开发人员和DBA来考虑的。

❸ 数据库冗余怎么办

它将冗余数据选择到一个游标中,并根据(LastName,FirstName)来分组(在我们这个方案中),然后打开游标然后循环地取出每一行,然后用与先前的取出的键值进行比较,如果这是第一次取出这个值,或者这个值不是冗余键,那么跳过这个记录然后取下一个,不然的话,这就是这个组中的冗余记录,所以删掉它.

让我们运行一下这个存储过程

BEGIN

DeleteDuplicates;

END;

/

SELECT LastName, FirstName, COUNT(*)

FROM Customers

GROUP BY LastName, FirstName

HAVING COUNT(*) > 1;

最后一个查询语句没有返回值,所以冗余数据没有了从表中取冗余数据的过程完全是由定义在csr_Duplicates 这个游标中的SQL语句来实现的,PL/SQl只是用来实现删除冗余数,那么能不能完全用SQL语句来实现呢?

二.SQL解决方案,使用RANK()删除冗余数据Oracle8i分析函数RANK()来枚举每一个组中的元素,在我们的方案中, 我们应用这个方案,我们使用这个函数动态的把冗余数据连续的排列起来加上编号,组由Partintion by 这个语句来分开,然后用Order by 进行分组SELECT ID, LastName, FirstName, RANK() OVER (PARTITION BY LastName,

FirstName ORDER BY ID) SeqNumber

FROM Customers

ORDER BY LastName, FirstName;

SQL

Listing 7. Output of single SQL statement that uses RANK()

显示的是根据记录的条数的个数来显示尤其对于冗余数据

ID LASTNAME FIRSTNAME SEQNUMBER

----- --------------- ---------- ----------

1018 Blake Becky 1

1013 Blue Don 1

1000 Bradley Tom 1

1002 Chang Jim 1

1008 Griffith David 1

1020 Hill Larry 1

1004 King Chuck 1

1005 Krieger Jeff 1

1012 Krieger Jeff 2

1017 Krieger Jeff 3

1003 Loney Julie 1

1007 Lord Don 1

1015 Mason Paul 1

1006 Monroe John 1

1009 Simon Michael 1

1010 Simon Michael 2

1001 Stone Tony 1

1011 Stone Tony 2

1014 Stone Tony 3

1016 Stone Tony 4

1019 Stone Tony 5

我们可以看一到,SeqNumber这一列中的数值,冗余数据是根据ID号由小到大进行的排序,所有的冗余数据的SqlNumber都大于一,所有的非冗余数据都等于一,所以我们取自己所需,删除那么没用的SELECT ID, LastName, FirstName

FROM

(SELECT ID, LastName, FirstName, RANK() OVER (PARTITION BY LastName,

FirstName ORDER BY ID) AS SeqNumber

FROM Customers)

WHERE SeqNumber > 1;

SQL

Listing 8. 冗余键的键值

有七行必须被删除

ID LASTNAME FIRSTNAME

----- --------------- ----------

1012 Krieger Jeff

1017 Krieger Jeff

1010 Simon Michael

1011 Stone Tony

1014 Stone Tony

1016 Stone Tony

1019 Stone Tony

7 rows selected.这显示有七行需要删除,还是用上一个表我测试了一下这个代码,它用了77秒种就删除了所有的数据准备好了用Sql语句来删除冗余数据,版本一它执行了135秒

DELETE

FROM CUSTOMERS

WHERE ID IN

(SELECT ID

FROM

(SELECT ID, LastName, FirstName, RANK() OVER (PARTITION BY LastName,

FirstName ORDER BY ID) AS SeqNumber

FROM Customers)

WHERE SeqNumber > 1);

我们可以看到最后的两行语句对表中的数据进行了排序,这不是有效的,所以我们来优化一下最后一个查询语句,把Rank()函数应用到只含有冗余数据的组,而不是所有的列下面这个语句是比较有效率的,虽然它不像上一个查询那样精简SELECT ID, LastName, FirstName

FROM

(SELECT ID, LastName, FirstName, RANK() OVER (PARTITION BY LastName,

FirstName ORDER BY ID) AS SeqNumber

FROM

(SELECT ID, LastName, FirstName

FROM Customers

WHERE (LastName, FirstName) IN (SELECT LastName, FirstName

FROM Customers

GROUP BY LastName, FirstName

HAVING COUNT(*) > 1)))

WHERE SeqNumber > 1;

选择冗余数据只用了26秒钟,这样就提高了67%的性能,这样就提高了将这个作为子查询的删除查询的效率,

DELETE

FROM Customers

WHERE ID IN

(SELECT ID

FROM

(SELECT ID, LastName, FirstName, RANK() OVER (PARTITION BY LastName,

FirstName ORDER BY ID) AS SeqNumber

FROM

(SELECT ID, LastName, FirstName

FROM Customers

WHERE (LastName, FirstName) IN (SELECT LastName, FirstName

FROM Customers

GROUP BY LastName, FirstName

HAVING COUNT(*) > 1)))

WHERE SeqNumber > 1);

现在只用了47秒钟的就完成的上面的任务,比起上一个136秒,这是一个很大的进步,相比之下,存储过程用了56秒,这样存储过程有些慢了使用PL/SQL语句我们和我们以上的代码,会得到更好的更精确的代码,和提高你代码的执行效率,虽然对于从数据库中枚举数据PL/SQL对于Sql两者没有什么差别,但是对于数据的比较上,PL/SQL就比SQL要快很多,但是如果冗余数据量比较小的话,我们尽量使用SQL而不使用PL/SQL如果你的数据表没有主键的话,那么你可以参考其它技术
Rank()其它的方法

使用Rank()函数你可以对选择你所保留的数据,(或者是小ID的或者是大ID 的,就由RECDate这个列来决定这种情况下,你可以把REcdate加入到(Orderby )子句中,倒序或者正序

这是一种保留最大Id的一种解决方案

DELETE

FROM Customers

WHERE ID IN

(SELECT ID

FROM

(SELECT ID, LastName, FirstName, RANK() OVER (PARTITION BY LastName, FirstName ORDER BY RecDate DESC, ID) AS SeqNumber

FROM

(SELECT ID, LastName, FirstName, RecDate

FROM Customers

WHERE (LastName, FirstName) IN (SELECT LastName, FirstName

FROM Customers

GROUP BY LastName, FirstName

HAVING COUNT(*) > 1)))

WHERE SeqNumber > 1);

这种技术保证了你可以控制每一个表中的保留的组,假设你有一个数据库,有一个促销或者有一个折扣信息,比如一个团体可以使用这种促销5次,或者个人可以使用这个折扣三次,为了指出要保留的组的个数,你可以在where 和having子句中进行设置,那么你将删除所有大于你

设置有数的冗余组

DELETE

FROM Customers

WHERE ID IN

(SELECT ID

FROM

(SELECT ID, LastName, FirstName, RANK() OVER (PARTITION BY LastName,

FirstName ORDER BY ID) AS SeqNumber

FROM

(SELECT ID, LastName, FirstName

FROM Customers

WHERE (LastName, FirstName) IN (SELECT LastName, FirstName

FROM Customers

GROUP BY LastName, FirstName

HAVING COUNT(*) > 3)))

WHERE SeqNumber > 3);

As you can see, using the RANK() function allows you to eliminate plicates in a

single SQL statement and gives you more capabilities by extending the power of

your

queries.

正如你所见使用Rank()可以消除冗余数据而且能给你很大的可伸展性

❹ 什么是数据库冗余

数据库冗余
指的多余的相同数据
举个例子

s
(学号,
班级,姓名
)
c(课程名,
课程号
)

cc(学号
课程号)

d(学号
班级
课程名)
学生选课关系
,s表定义学生信息
,c表定义课程信息
,cc表定义选课信息

d则属于数据数据

因为表d可以用语句
select
学号
班级
课程名
from
s,cc
where
s.学号=cc.学号
来表示

❺ 什么是数据冗余数据库系统与文件系统相比怎样减少数据冗余

数据冗余是指数据之间的重复,也可以说是同一数据存储在不同数据文件中的现象。

❻ 关系数据库中冗余数据对数据库运行的影响与作用

作用:快速查询。很多冗余就是为了避免多表链查。
影响:
优点:快速查询。缺点:数据同步可能出现问题,从而引起数据不同步。

❼ 数据库中数据冗余,数据插入异常,数据删除异常, 修改异常,数据异常分别该怎么解释

楼主好,可以给您一个个解释:

数据冗余:数据冗余是指一个属性存放在多个表中,比如员工手机号,可能存在于销售人员的表中,也会存在考勤表中。这其实会影响数据的完整性和一致性。换句话说,也就是当有一个表有错误的时候,可能会导致整个功能的查询都有问题
数据插入异常:是指插入的数据违反了数据库对象的规定,而导致插入不正确的异常结果。打个比方,有一个表中有三列,分别标识三个属性,而你插入的时候写了四个属性,数据就会插入不进去,这就是个简单的插入异常。还或者某个字段要求的是非空,而你插入了一个空值,这也会导致插入错误。
数据删除异常:指的是当你需要删除的时候,数据不能被删除而导致的删除错误。比如当表中有外键限制的时候,删除数据就会出错。
修改异常:指的是当你更新数据的时候,数据不能被更新而导致的错误。比如你去更新一个自增列,数据库就会提示更新失败,这种就为修改异常
数据异常:数据异常则是指数据库中存在了不合逻辑的数据,或者无缘无故多出来的毫无关联的数据问题。举个例子,假设数据库有个产品表,里面有价格,还有个订单表,里面存放了产品对应的销售数量,还有一个订单金额表,里面存在订单金额,按常理逻辑计算,价格*产品数量=订单金额,但如果你发现了有数据不符合这个逻辑的,那么就出现了数据异常。数据异常通常与系统bug,或者数据库写的功能性东西有关。有些时候逻辑覆盖不严密,则会产生数据异常
以上就是楼主疑问的所有解释,请采纳

❽ 数据冗余度高是数据库最大的缺点,对还是错

数据库有一定的冗余度,但是冗余度并不一定高,范式就能解决一部分冗余度的问题,虽然现在的数据库还是有冗余度的问题,但是冗余度并不能说是高,而且冗余度高也是有好处的,并不全是坏处。

❾ 什么是数据冗余

数据冗余是指数据之间的重复,也可以说是同一数据存储在不同数据文件中的现象。可以说增加数据的独立性和减少数据冗余是企业范围信息资源管理和大规模信息系统获得成功的前提条件。

是传输消息所用数据位的数目与消息中所包含的实际信息的数据位的数目的差值。数据压缩是一种用来消除不需要的冗余的方法,校验和是在经过有限信道容量的噪声信道中通信,为了进行错误校正而增加冗余的方法。

❿ 数据库中数据冗余会产生什么问题

数据冗余的缺点:

1、存储空间的浪费。

2、数据交互和数据库访问执行效率降低。

但适当的数据冗余又能加快查询。数据冗余究竟是好是坏还是要根据自己所做的项目进行合理的取舍。

当同一数据块存储在两个或多个单独的位置时, 就会发生数据冗余。假设创建了一个数据库来存储销售记录, 并在每个销售的记录中输入客户地址。但是,有多个销售到同一客户,因此同一地址被多次输入。重复输入的地址是冗余数据。

(10)冗余数据库扩展阅读

一定的冗余可以提升性能

1、空间换时间

有一张字典表 city 其中有 id 和 cityName 两个字段,有一张业务表,其中有 id 、cityId、XXX、XXX…字段。如果查询业务表的话,就必须 join 一下 city 字典表,如果业务表很大很大,那么就会查询的很慢,这个时候我们就可以使用冗余来解决这个问题。

直接将业务表中的 cityId 更换成 cityName,这样我们在查询业务表的时候就不需要去 join 那一张 city 的字典表了。这样的方式显然是不符合我们数据库设计的范式的,但是这样的冗余或许很有必要。

2、查询某一个状态值数据

业务表中有一个字段 status 用来存储提交和未提交,假设这张表中未提交的数据相对于提交的数据是很少的,当用户查询所有未提交的数据的时候,就需要在全部的数据,然后筛选出未同意的数据。如果这张业务表非常的庞大,那么这样的查询的效率就非常的慢。

这个时候我们就可以把这张业务表中的未同意的数据冗余到一张新表中,这样用户查询未提交的数据的时候就可以直接在这张未提交的表中查询,查询速度提交很多。

热点内容
安卓手机高温降频怎么关闭 发布:2024-10-26 15:02:41 浏览:366
mysql查看数据库名 发布:2024-10-26 14:51:39 浏览:130
spg算法 发布:2024-10-26 14:44:50 浏览:414
oracle查看sql执行 发布:2024-10-26 14:44:04 浏览:860
标准配置什么意思 发布:2024-10-26 14:35:27 浏览:881
查看linux所有用户 发布:2024-10-26 14:11:15 浏览:16
useraddftp 发布:2024-10-26 13:59:21 浏览:622
安卓免费私密相册哪个好用 发布:2024-10-26 13:41:20 浏览:640
湛江移动服务器ip 发布:2024-10-26 13:12:17 浏览:634
找回dns服务器地址 发布:2024-10-26 12:48:23 浏览:240