频道栏目
首页 > 资讯 > Sybase > 正文

数据库数据处理故事多

15-06-01        来源:[db:作者]  
收藏   我要投稿

每年评教都会遇到数据导入的一系列问题。从中收获颇丰。

这两天别人总在问我,你们基础出了什么问题,为什么总在导数据。数据没问题,为了做足准备,我们需要将8期版的最全的数据整理到10期数据库中。

背景介绍:问题在于从8期版基础系统到10期版基础系统在数据库设计方面有了很大的变化,例如10期学生表中存放着班级外键,而8期表中是用第三张表来维护关系的。10期的‘上课班’ 中需要课程和老师的关系,而再8期表中需要多个表才能将其关联起来。 20来张表,各种外键关联,最多的一个表存50多万条数据,怎么做,怎么做快 是摆在我们面前一个迫切需要解决的问题。

故事一:

由于8期表间都是通过第三张表联系起来的。而像1:n的关系10期表基本都是外键之间关联的。

例如,我想在10期表添加学生信息(包括学号,姓名,班级外键等)。我需要先从8期学生表中导出学生信息(不含班级外键)再从班级和学生的第三张表中导出学生和班级的关系,然后一一对比将两个表整合到一张表上去。

这样做是我们最初最天然的想法,当然效率低而且人工核对出错率极高。于是我们改用PlanB。在数据库中建立学生和第三张表的视图,然后将视图导出到excel。

故事二:

建立视图的时候,我们又遇到另一个问题。将两个表联合起来,发现学生总共为22052行,而视图总数为22191 行。如果数据没问题的话,这是不应该出现的。因为按道理来说,学生和班级两个表的n:1关系, 而且表数据无冗余。应该无论做链接还是右链接数据都是一样的。


于是我们用了一个查询语句 select ClassID from BasicClassEntities where ClassID not in(select ClassID from BasicStudentEntities) 先原谅我用了这样一条效率低的查询语句。我们查出来有正好139个班级里面没有学生。后来再研究发现原来这里面有100多虚拟行政班( 是为考试留的),也真的有三个班是由于人为失误没有加上关联。利用表和表之间的关系查询,是真的可以检查错误的,此处就不一一列举了。

故事三:

我想到了之前的一道面试题。于是自己建表实践了一下。如题是:A表有5条数据,B表有8条数据。如果两个表有3条公共数据,那么分别用交叉连接,左右连接能得到多少条数据。

实验一:如图

student 表里的数据。 teacher表里的数据


通过学生表和教师表分别进行右左连接,如图所示。

实验二:如图 在此基础上,将3条公共数据 改为不是一一对应,现在是有两个ID一样都和学生同一ID一致。

显示结果如下。


看!显示内容如下


故事四:

第一次将整理好的数据excel 复制到数据库中的时候,我们采取的方法是将excel字段和数据库字段设置成一致的然后之间 ctrl+c 再ctrl +v 。结果2万多学生需要10多分钟才能导入进去。于是我们利用数据库自带的导入excel功能,发现即便是50万数据也能瞬间搞定。只是导入后会新生成这样一个表。


然后从表数据到另一个表上 使用语句 insert into BasicStudentEntities select * from BasicStudentEntities$ 也是秒秒钟的事。

好玩的故事很多,下节继续~


相关TAG标签
上一篇:有了SQLService的基础,轻松学习Oracle
下一篇:Oracle学习(7):集合运算
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站