视图与相关子查询在清理重复数据中的应用

点赞:11982 浏览:47653 近期更新时间:2024-03-18 作者:网友分享原创网站原创

摘 要:在WEB+SQLSERVER应用程序中由于数据库设计不合理以及网络响应延时等问题可能造成数据表中大量存在重复数据.本文通过视图和相关子查询技术讨论了清理数据库中重复数据的方法.


关 键 词:SQLSERVER;数据库;视图;相关子查询

中图分类号:TP31.13文献标识码:A文章编号:1007-9599(2012)06-0000-02

一、引言

在WEB+SQLSERVER应用程序中进行数据库设计时,如果考虑不周有可能产生重复数据.比如,学生在填报报名信息时,如果主键使用了自动编号,却没有限制一个学生在一个考试批次中只能填报一次,就会导致同一个学生因为网络处理速度问题多次提交报名信息从而产生重复数据的问题.当然一开始应该考虑到产生这种问题的可能,通过技术手段避免类似问题的产生.但是一旦出现这种问题,必须对重复的报名数据进行清理,留下重复数据中的一条信息即可.本文以一个WEB系统为例,讨论数据库中出现重复数据的清理方法.

二、案例分析

在某个普通话报名测试系统的数据库中,设计了一个报名学生信息表(stuInfo),其部分列结构为:

id(序号列):intidentity(1,1)primarykeynotnull;

idCard(号列):char(18)notnull;

ExamNo(考试批次列):char(8)notnull.

从以上列结构的定义可以看出,实体完整性(主键)通过自动增长列id来标识.由于没有将idCard列和ExamNo列组合为主键,所以存在同一学生可反复报名参加同一批次考试的漏洞.经程序上线正式运行结果反馈,确实存在同一批次有大量重复的学生报名信息的现象.经调查访问,提交重复的报名信息是因为网络反应较慢、学生无意反复点击提交按钮所致.

(一)清理重复信息思路分析

由于idCard列和ExamNo列共同决定一个考生参加指定批次考试的报名信息,所以只要按照该两列分类汇总即可查询出有重复报名信息的记录.拒此,可确定到底是哪些idCard存在重复填报报名信息的情况.清理时只需要保证每组重复的信息中保留一条作为真正的报名信息即可,可采取保留重复数据中id最大或最小的那条记录的方法,其余全部删掉.

(二)解决方法

1.确定有重复报名情况的记录,将其创建为视图便于使用.

createviewstuReBaoMing

as

--查询并统计报名信息重复的号和填报次数,规则是同一号同一考试批次出现多于一次的统计结果

selectidcard,ExamNo,count(*)ascounts

fromstuInfo

groupbyidcard,ExamNo

hingcount(*)>1

2.创建视图,查询需要删除的重复数据记录,仅保留每个重复数据中的一条.

createviewstuReBaomingNeedDelete

as

--号包含在重复信息视图stuRebaoming的号集合中,且其id不是当前号所对应的重复记录中的最大值(即保留每组重复信息中的最大id号的记录)

select*fromstuInfo

whereidcardin(

selectidcardfromstuRebaoming

)

andid<>(selectmax(id)

fromstuInfobwhereidcard等于stuInfo.idcard

)

将2.2.1中查到的有重复报名情况的idcard带到2.2.2的查询结果,可以验证每组重复记录在清理时将会保留一条不被删除,以达到清理的目的.

3.从stuInfo表删除id包含在stuReBaomingNeedDelete视图中的记录,即删除应该被删除的的记录.

deletefromstuInfowhereidin(selectidfromstuRebaomingNeedDelete)

三、要点归纳

本例进行数据清理用到两个重要的数据库知识点:视图与相关子查询.

(一)视图.视图是一种查询,在实际查询中也以子查询方式运行,只是用了一个视图名代替子查询而已.视图使用比子查询更简洁、方便.

(二)相关子查询.相关子查询是一种特殊的子查询,子查询的查询条件通过外部查询获取值.相关子查询在复杂查询中使用很频繁,但在Update、Delete等数据操纵语言中同样可以使用.相关子查询不能与外部查询分开单独创建为视图.

四、总结

从本例可以看出,视图和相关子查询在数据库端配合使用可以完成很多复杂的运算,也从另一方面体现了SQLSERVER数据库较强的独立性;此外,相关子查询是数据库中一种非常有用的高级查询,不仅在数据查询语言中、更在数据操纵语言中发挥出更为强大的功能.熟练掌握并灵活应用SQLSERVER数据库端的各种命令,让数据库端能实现的功能尽量在数据库怎么写作器完成,既降低WEB怎么写作器端的运算压力,又减少数据在网络中的传送负荷,从而提高WEB+SQLSERVER应用程序的性能.

视图与相关子查询在清理重复数据中的应用参考属性评定
有关论文范文主题研究: 关于数据库的论文范本 大学生适用: 专科论文、本科毕业论文
相关参考文献下载数量: 84 写作解决问题: 怎么写
毕业论文开题报告: 论文模板、论文摘要 职称论文适用: 杂志投稿、职称评副高
所属大学生专业类别: 怎么写 论文题目推荐度: 经典题目