如何删除数据库中的冗余数据(翻译)

2016-01-29 16:27 27 1 收藏

如何删除数据库中的冗余数据(翻译),如何删除数据库中的冗余数据(翻译)

【 tulaoshi.com - SQLServer 】

 

作为数据库的开发者,我们经常面临着要找出及删除数据库中冗余数据的任务,如果数据库中有大量的冗余数据(占总数的百分比太多),数据的精确性和可靠性将受到影响,同时也影响着数据库的性能,那么如何解决这个问题呢?下面我将探讨关于这个问题的这个解决方案,oracle也为我们提供了一个解决方案,但是Oracle提供的解决方案不够完美,遇到大批量数据那个解决方案工作起来很慢

应该怎么删除冗余数据呢?
在这里我们应用一个PL/SQl方案(一个自定义的存储过程)或者一个SQL语句的解决方案(使用一个分析的函数RANK()和一个嵌套的子查询)来消除冗余数据然后控制应该保留的记录

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/sqlserver/)


什么是冗余数据?
冗余数据就是一个数据表中,这个表中的行包含了一些相同的值,这些值理论上来说应该是唯一的(这些值一般来说能确定一条记录)例如,像社会保险号,姓与名的集合.那么我们把这么含有相同信息的行中包含的数据叫做冗余数据,现在所有的数据库表中都有主键约束,主键中记录了一行记录中的唯一值,从数据库的角度来看,每一行都是唯一的,但是从我们用户角度看来,这些记录都是相同的记录,因为它们都包含相同的键值(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;

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/sqlserver/)

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),
   RecDate DATE,
   CONSTRAINT Customers_PK
   PRIMARY KEY (ID))
   TABLESPACE TALLYDATA;


INSERT INTO Customers
   VALUES (1000, 'Bradley', 'Tom', '2450 3rd Str. #12',
           'San Francisco', 'CA', '94114', '4156679230',
           TO_DATE('01-JAN-2000', 'DD-MON-YYYY'));

INSERT INTO Customers
   VALUES (1001, 'Stone', 'Tony', '12 Main St. Apt. 3',
           'Oakland', 'CA', '94342', '5104562881',
           TO_DATE('12-MAR-2001', 'DD-MON-YYYY'));

INSERT INTO Customers
   VALUES (1002, 'Chang', 'Jim', '425 26th Ave.',
           'Seattle', 'WA', '98103', '8182454400',
           TO_DATE('15-JUN-2000', 'DD-MON-YYYY'));

INSERT INTO Customers
   VALUES (1003, 'Loney', 'Julie', '12 Keith St.',
           'Castro Valley', 'CA', '94546', '5103300721',
           TO_DATE('22-NOV-2000', 'DD-MON-YYYY'));

INSERT INTO Customers
   VALUES (1004, 'King', 'Chuck', '100 Broadway St.',
   &nb

来源:https://www.tulaoshi.com/n/20160129/1498654.html

延伸阅读
SQL Server中误删除数据的恢复本来不是件难事,从事务日志恢复即可。但是,这个恢复需要有两个前提条件: 1. 至少有一个误删除之前的数据库完全备份。 2. 数据库的恢复模式(Recovery mode)是“完全(Full)”。 针对这两个前提条件,会有三种情况: 情况一、 如果这两个前提条件都存在,通过SQL语句只需三步就能恢复(参考文章),...
完整性约束 完整性约束用于增强数据的完整性,Oracle提供了5种完整性约束: Check NOT NULL Unique Primary Foreign key 完整性约束是一种规则,不占用任何数据库空间。完整性约束存在数据字典中,在执行SQL或PL/SQL期间使用。用户可以指明约束是启用的还是禁用的,当约束启用时,他增强了...
使用命令可以删除数据,使用命令可以删除整表数据但保留结构。 4.7.1 删除记录 在输入delete from scott.test where empno=7500 and empno=8000;,然后单击按钮,出现如图4.47所示的结果。 :\第4章\4.7\471.sql。 删除记录的语法:delete from 数据表 where 条件。 4.7.2 整表数据删除 在输入truncate ta...
那么我们如何从数据库表中检索数据呢?      1、从数据库表中检索信息     实际上,前面我们已经用到了SELECT语句,它用来从数据库表中检索信息。     select语句格式一般为:     SELECT 检索关键词 FROM 被检索的表 WHERE ...
标签: 办公软件
Word共享Access数据最简单的方法是复制、粘贴,你只需打开Access数据库中的表,就可以像复制Excel数据那样复制Access数据然后粘贴到Word中。另外,Word还可以使用插入记录的方法共享Access、SQL数据。 1、插入全部记录 右键单击Word工具栏,选择“数据库”命令,打开“数据库”工具栏,单击“插入数据库”按钮,在打开的“数据库”...

经验教程

732

收藏

60
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部