此文出处:http://database.ctocio.com.cn/205/9276705.shtml
作为数据库的开发者,我们经常面临着要找出及删除数据库中冗余数据的任务,如果数据库中有大量的冗余数据(占总数的百分比太多),数据的精确性和可靠性将受到影响,同时也影响着数据库的性能,那么如何解决这个问题呢?下面我将探讨关于这个问题的这个解决方案,oracle也为我们提供了一个解决方案,但是Oracle提供的解决方案不够完美,遇到大批量数据那个解决方案工作起来很慢应该怎么删除冗余数据呢?
在这里我们应用一个PL/SQl方案(一个自定义的存储过程)或者一个SQL语句的解决方案(使用一个分析的函数RANK()和一个嵌套的子查询)来消除冗余数据然后控制应该保留的记录
什么是冗余数据?
冗余数据就是一个数据表中,这个表中的行包含了一些相同的值,这些值理论上来说应该是唯一的(这些值一般来说能确定一条记录)例如,像社会保险号,姓与名的集合.那么我们把这么含有相同信息的行中包含的数据叫做冗余数据,现在所有的数据库表中都有主键约束,主键中记录了一行记录中的唯一值,从数据库的角度来看,每一行都是唯一的,但是从我们用户角度看来,这些记录都是相同的记录,因为它们都包含相同的键值(First Name + Last Name),即使他们有不同的主键
ID Last Name First Name City Phone
---- --------------- ---------- --------------- ----------
1005 Krieger Jeff San Ramon 9252997100
1012 Krieger Jeff San Ramon 9252997100
1017 Krieger Jeff San Ramon 9252997100
那么这些冗余数据是怎么出现的那?通常有两种情况:1.从不同的表中加载或者合并数据通过图形化的用户接口来输入数据,然后由计算机来生成一个唯一的键,并做为这一条记录的主键那么怎样找到冗余数据呢?让我们来创建一个叫作Customer 的表并向其中加入冗余数据,看表1,正如你所看到的,我们并没有在这个表上做什么限制来防止冗余数据,下面这么代码创建了一个唯一约束,来防止冗余数据的生成
SQL
Listing 1. 创建Customer表
这个表中我们故意加入了冗余数据
DROP TABLE Customers CASCADE CONSTRAINTS;
CREATE TABLE Customers(
Id INTEGER NOT NULL, LastName VARCHAR2(15) NOT NULL, FirstName VARCHAR2(10), Address VARCHAR2(20), City VARCHAR2(15), State CHAR(2), Zip VARCHAR2(10),
Phone VARCHAR2(10)
CONSTRAINT Customers_PK
PRIMARY KEY (ID))
TABLESPACE TALLYDATA;
COMMIT;
看下面的代码我在姓,和名这两个字段上加上唯一约束,(当然你可以在创建表的时候加上这一约束,来防止冗余数据)
ALTER TABLE Customers
ADD CONSTRAINT Customers_LastFirst
UNIQUE (LastName, FirstName);
Customer表中的冗余键是LastName和FirstName的集合,我们把含
有冗余键的数据进行分组并进行统计.
SELECT LastName, FirstName, COUNT(*) FROM Customers GROUP BY LastName, FirstName ORDER BY LastName, FirstName;
Listing 2显示了这条语句的输出,我们可以看到有三行的输出大于1,这也就意味
着表中含有3组冗余数据.
Listing 2. 找出冗余
LASTNAME FIRSTNAME COUNT(*)
--------------- ---------- ----------
Blake Becky 1
Blue Don 1
Bradley Tom 1
Chang Jim 1
Griffith David 1
Hill Larry 1
King Chuck 1
Krieger Jeff 3
Loney Julie 1
Lord Don 1
Mason Paul 1
Monroe John 1
Simon Michael 2
Stone Tony 5
14 rows selected.
我们在语句中加入Having()语句来过滤出非冗余数据.
SELECT LastName, FirstName, COUNT(*)
FROM Customers
GROUP BY LastName, FirstName
HAVING COUNT(*) > 1;
SQL
分享到:
相关推荐
基于SQL数据库实现冗余数据的查询与删除.pdf
sqlite数据库文件经多次添加删除操作后 文件占用磁盘空间过大 c++压缩文件代码 sqlite数据库文件经多次添加删除操作后 文件占用磁盘空间过大 c++压缩文件代码 测试调用TestFunction.h文件 bool commit_vacuum...
关系数据库的数据冗余.pdf
这两个字段是重复的,这就是数据冗余,我们设计数据库是不要出现冗余信息,为啥我们用冗余呢。 主要是为了出于对查询性能的考虑。 我们在这里做了数据冗余,我们就可以减少对图片表的查询,加速查询速度! 不过推荐...
本文主要介绍了wordpress数据库优化和清理冗余数据的方法,大家参考使用吧
都会产生相关的日志以记录此次操作,这些数据大多数情况下对于博主来说并没有什么用,持续的增加,反而加大了数据库的容量,进而加长了前台文章的查询时间,所以,删除冗余的数据、优化数据库,就变得尤为重要。...
效地减少数据库中的数据冗余,并为实现灵活的数据安全机制提供了基础。 • 支持存储过程 使用数据库创建应用程序时,过程语言是应用程序和数据库之间的主要编程接口。神通数据库中所提 供的过程语言是 plOSCAR。在...
2. 数据冗余度小:数据库系统的数据冗余度小,减少了数据的存储空间,防止了数据统计错误。 3. 数据和程序之间具有较高的独立性:数据库管理系统通过DBMS对数据的安全性和完整性的控制,提高了数据的安全性。 ...
这些复杂的数据虽然利用关系数据库也可以进行管 理,但是这样会带来大量的冗余。互联网上的数据与传统的事务数据库与数据仓库都不同,其特点可以表现为模式不明显, 经常有缺失信息,对象结构比较复杂。现代信息集成...
数据库系统由于能减少数据冗余,提高数据独立性,并集中检查▁▁▁▁,由此获得广泛的应用。数据库提供给用户的接口是▁▁▁▁,它具有数据定义、数据操作和数据检查功能,可独立使用,也可嵌入宿主语言使用。▁▁▁...
**数据库中的数据按⼀定的数据模型组织、描述和 储存,具有较⼩的冗余度、较⾼的数据独⽴性和易扩展性,并可为各种⽤户共享。 概括的讲,数据库数据具有永久存储、有组织和可共享三个基本特点。 3、数据库管理系统 ...
数据库设计是尽量避免冗余,一般采用符合范式的规则来设计,数据仓库在设计是有意引入冗余,采用反范式的方式来设计。数据库是为捕获数据而设计,数据仓库是为分析数据而设计,它的两个基本的元素是维表和事实表。维...
12. 在数据库中,产生数据不一致的根本原因是数据冗余。 知识点:数据不一致;数据冗余 13. 数据库管理系统(DBMS)是系统软件。 知识点:数据库管理系统类型;系统软件 14. 数据库管理系统(DBMS)的主要功能是定义...
* 数据库设计的目的在于提高数据存储和检索的效率、减少数据冗余、提高数据的一致性和完整性。 二、数据完整性 * 数据完整性是指数据库中数据的正确性、完整性和一致性。 * 数据完整性包括实体完整性、域完整性、...
7. 数据库的特点:数据库避免了一切数据的重复、系统可确保更新时的一致性、数据库中的数据可以共享,但数据库不能减少数据冗余。 知识点:数据库特点、数据重复、系统一致性、数据共享、数据冗余 8. 数据库的定义...
数据库是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合,可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、查询、更新、删除等操作
* 数据独立性是指数据库系统中数据的独立性,解决数据冗余与数据独立性问题。 * 数据独立性可以提高数据库系统的性能和安全性。 十、数据冗余 * 数据冗余存在于文件系统与数据库系统中。 * 数据冗余可以解决数据...
12. 数据库管理系统能实现对数据库中数据的查询、插入、修改和删除等操作,这种功能称为数据操纵功能。 知识点:数据库管理系统的功能,数据操纵功能。 13. 数据库管理系统是在操作系统支持下的系统软件。 知识点...
* 数据库 normalize 是指将数据库中的数据按照一定的规则和格式组织和存储,以提高数据的存取效率和减少数据冗余。 * 数据库 normalize 的目的是为了提高数据库的性能、安全性和可扩展性。 四、数据库备份和恢复 *...
19. 在数据库中,产生数据不一致的根本原因是数据冗余。数据冗余是产生数据不一致的根本原因,使得数据不一致。 20. 如果事务 T 对数据对象 R 实现 X 封锁,则 T 对 R 既能读又可写。X 封锁可以使事务 T 对数据对象...