CN101162463B - 一种数据库中主从表数据获取的方法 - Google Patents
一种数据库中主从表数据获取的方法 Download PDFInfo
- Publication number
- CN101162463B CN101162463B CN200610149686A CN200610149686A CN101162463B CN 101162463 B CN101162463 B CN 101162463B CN 200610149686 A CN200610149686 A CN 200610149686A CN 200610149686 A CN200610149686 A CN 200610149686A CN 101162463 B CN101162463 B CN 101162463B
- Authority
- CN
- China
- Prior art keywords
- master
- current record
- record
- master meter
- salve
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据库中主从表数据获取方法,包括,针对主从表关系字段,遵照相同的排序准则打开主表和所有从表;主表提取当前记录;在从表中寻找与主表当前记录匹配的记录;按照与前述步骤相同的方式依次访问其它从表,获取与主表当前记录匹配的记录,所有从表得到的记录与主表当前记录共同组成一条完整的数据;主表当前访问位置下挪一次,直到主表检索出的所有记录提取完毕时结束;关闭处于打开状态的表。本发明所述方法,所有主、从表只打开一次,克服了现有方案多次打开同一张表的缺点;降低了整个过程的比较次数,克服了现有方案反复匹配、交叉匹配的缺点;提高了获取数据的效率。
Description
技术领域
本发明涉及软件开发领域,使用关系数据库(Relatinal-Database)作为数据存储介质,具体涉及一种提高数据库主从表数据获取效率的方法。
背景技术
关系数据库在软件开发领域应用非常广泛。在关系数据模型中,实际对象以表(Table)的形式存在,而表之间任意种类的依赖联系即称关系。主从表(又称父从表)是一种常见的关系,它由一个主表和多个从表组成。一般情况下,在主表定义主键,从表定义相同意义字段为外键,依靠主外键约束将它们组织起来共同表示完整的信息模型。
以电信光传输网管***为例,围绕路径所定义的几个表如下:
路径:Trail(Trail_ID,UserLabel,State,Direction......)
路径端点:TrailEnds(Trail_ID,EndA,EndZ,......)
路径路由分段基本信息:TrailRoute(Trail_ID,SegmentNo,LayerRate,......)
主表为Trail,从表为TrailEnds和TrailRoute。它们依靠Trail_ID字段建立对应关系,共同记录路径概念的完整信息。
由于实体之间联系的复杂性,主从表存储模式在现实中大量应用,因而该模式下的数据获取也就成为经常面对的频繁操作。此时如果需要从数据库中获取完整信息,必须访问所涉及的主表和所有从表,将各部分信息依靠主外键字段进行匹配,以组装正确结果。而一旦表的记录较多,加上从表往往不止一个,这种匹配将导致字段比较次数急剧增加,可能极大加重数据库***负担。综上所述,主从表数据的获取成为基于关系数据库的软件性能的一个重要影响因素。
以下将从表记录之间用以建立关系的字段定义为主从表关系字段,例如上述Trail_ID。
目前主从表获取方案主要有两种:
1、游标方式:
使用游标打开主表;每次通过游标下移从主表中提取出一条记录,就根据主从表关系字段值,去从表1中检索相应记录获得子信息1;去从表2检索子信息2;......当所有从表检索完毕,将获得一条完整的信息;如此往复,直到游标移动到终点,得到包含所有完整信息的正确结果RObject。
2、内存匹配方式:
将主表对应记录检索出来填写到结果对象RObject;将从表1对应记录检索出来,按照主从表关系字段值,依次在第一步得到的结果对象RObject中寻找正确位置并填写进去;在从表1所有记录处理完毕后,按类似方式依次处理从表2、从表3......,直到所有从表处理完毕,得到包含全部完整信息的正确结果RObject。
对于方案1,缺点是对主表的每一条记录,都会在从表打开一次结果集并进行全表扫描匹配,当表的规模达到一定程度时,这个过程非常费时。
对于方案2,缺点是应用程序内存中需要执行的匹配过多,从表的每一条记录都需要到RObject中寻找对应的位置。
从效率角度考虑,上述方案1和2都存在不足,尤其是当从表个数较多,主表、从表记录数目均较大时,它们在效率上的缺陷将成为程序的瓶颈。
发明内容
本发明的目的是克服上述现有主从表数据获取方法的缺点,而提供的一种清晰的、高效率的方法。
本发明具有以下特点:1)主从表检索结果按照相同准则排序;2)主从表当前记录同步推进,匹配次数降低到最少;3)所有涉及到的表只打开一次。
一种数据库中主从表数据获取方法,包括如下步骤:
步骤1、针对主从表的一个关系字段,遵照相同的排序准则打开主表和所有从表内的记录;
步骤2、提取主表当前记录;
步骤3、从从表当前记录开始往后搜索与主表的当前记录匹配的记录;
步骤4、按照和步骤3相同的方式逐个访问其它从表,获取与主表当前记录匹配的记录,所有从表得到的记录与主表当前记录共同组成一条完整的数据;
步骤5、主表当前访问位置下挪一次,回到步骤2继续执行,直到主表检索出的所有记录提取完毕时结束;
步骤6、关闭处于打开状态的表。
本发明所述方法,主从表记录按照相同排序准则检索,使得从表的每条记录只会与相邻区段的主表记录匹配,将整个过程的比较次数降低到最低,克服了现有方案反复匹配、交叉匹配的缺点;
主、从表只打开一次,当前访问位置一直保持向前移动,只遍历一趟而没有往复,克服了现有方案多次打开同一张表的缺点;
本发明所述方法应用于光传输网管***获取路径路由信息实例时,与普通的游标获取方式相对比,效率提高约80倍,取得良好效果。
附图说明
图1为光传输网管***路径路由实体关系图;
图2为主从表数据提取流程图。
具体实施方式
下面结合附图对本发明所述方法进行详细说明。
本发明所述主从表数据获取方法,包括如下步骤:
步骤1、针对主从表的一个关系字段,遵照相同的排序准则打开主表和所有从表内的记录;
步骤2、提取主表当前记录;
步骤3、从从表1当前记录开始往后搜索与主表的当前记录匹配的记录;
步骤4、按照和步骤3相同的方式逐个访问其它从表,获取与主表当前记录匹配的记录,所有从表得到的记录与主表当前记录共同组成一条完整的数据;
步骤5、主表当前访问位置下挪一次,回到步骤2继续执行;
步骤6、重复上述步骤直到主表检索出的所有记录提取完毕时结束;
步骤7、关闭处于打开状态的表。
所述主从表数据获取方法,其中步骤3中寻找从表1与主表当前记录匹配数据的处理包含以下步骤:
(1)比较从表1当前记录与主表当前记录的主从表关系字段值:
情况1:如果相等,说明从表1的当前记录与主表当前记录对应,将其信息提取完毕后,从表1的当前访问位置向下挪一位,回到步骤(1)继续执行;
情况2:如果不等,按照排序准则,如果从表的当前记录的关系字段值大于主表的当前记录的关系字段值,说明前者应该在后者之后,则从表1当前记录的数据不处理,访问位置不变,等待下一次与主表记录的匹配机会;
情况3:如果不等,按照排序准则,如果从表的当前记录的关系字段值大于主表的当前记录的关系字段值,说明前者应该在后者之前,则忽略从表1的当前记录,其访问位置下挪一位,回到步骤(1)继续执行;
情况4:如果发现从表1检索到的所有记录提取完毕,则关闭该表,后继过程不再对该表进行访问;
(2)发生以上情况2、4,从表1针对主表当前记录的匹配操作结束,过程返回。
所述步骤1,打开主表和从表时,记录必须按照主从表关系字段大小排序返回,并且排序的方式对所有表都一致。
主从表关系字段并不局限于由一个字段组成,若为多个字段,则设定第一排序参照列,第二排序参照列......。
下面以光传输网络层网管***中的常见对象——路径路由为例,详细说明本发明所述主从表数据获取过程。
先简要说明相关概念:所谓路径,描述的是通讯网端到端的数据传送业务。而一条完整的路径由若干分段组成,每个分段都有端点、工作拓扑、工作通道等属性,这些信息合在一起称为路径路由。
路径路由与所包含信息实体的关系如图1所示,为了便于理解将路径也包括在内,以虚线表示。
如果需要从数据库提取路径路由的完整信息,要求包含分段端点、工作拓扑、工作通道等属性。利用本发明所述的数据获取方法,可以很好地满足这个需求。
数据存储方法:
图1中的模型在数据库中分4张表存储,如表1所示:
TrailRoute路由分段信息表 | (Trail_ID,SegmentNo,LayerRate,……)路径ID,分段号,速率,…… |
TrailRouteAZEnd路由分段端点信息表 | (Trail_ID,SegmentNo,EndA,EndZ……)路径ID,分段号,分段端点A,分段端点Z…… |
TrailRouteWorkTopo路由工作拓扑表 | (Trail_ID,SegmentNo,TopoID,……)路径ID,分段号,分段工作拓扑ID,…… |
TrailRouteWorkPath路由工作通道表 | (Trail_ID,SegmentNo,Path,……)路径ID,分段号,分段工作通道,…… |
表1
这几张表属于典型的主从表存储模式,其中主表为railRoute,主从表关系字段为Trail_ID和SegmentNo。于是在这两个字段上定义聚簇索引,之所以在主键建立聚簇索引,是为了加快select语句排序检索的执行速度。
数据提取方法:
1、按照记录检索方式4个表的记录返回必须依照一致准则排序。这点由聚簇索引保证,不需要添加额外的order by子句;
2、本例中主从表关系字段为各个表的Trail_ID和SegmentNo字段;
3、具体的提取步骤为:
1)使用4个sql语句打开4个结果集:
select*from TrailRoute where condition_sentence
select*from TrailRouteAZEnd where condition_sentence
select*from TrailRouteWorkTopo where condition_sentence
select*from TrailRouteWorkPath where condition_sentence
因为聚簇索引的原因,所有结果集默认按Trail_ID、SegmentNo升序排列;
2)从TrailRoute结果集提取一条记录,获得其主从表关系字段值为TrailID_main和SegmentNo_main,将这两个值的组合命名为Key_main;
3)从TrailRouteAZEnd结果集提取一条记录,获得其主从表关系字段值为TrailID_1和SegmentNo_1,将这两个值的组合命名为Key_1。比较Key_1、Key_main的大小:
(1)如果Key_1=Key_main,则TrailRouteAZEnd当前记录与TrailRoute当前记录对应,将数据填写到缓存对象,然后TrailRouteAZEnd结果集执行NextRow操作;
(2)如果Key_1>Key_main,说明TrailRoute当前记录在TrailRouteAZEnd表中缺少对应记录,不填写任何数据,TrailRouteAZEnd结果集不执行NextRow操作,等待TrailRoute下一条记录,尝试与其匹配;
(3)如果Key_1<Key_main,说明TrailRouteAZEnd当前记录已经失去与TrailRoute记录匹配的机会(因为往后Key_main会越来越大),不填写任何数据,TrailRouteAZEnd当前记录当前记录略过,其结果集执行NextRow操作,回到步骤3)继续执行。
(4)如果发现TrailRouteAZEnd结果集所有记录已经读取完毕,则关闭该结果集,后继操作不再访问TrailRouteAZEnd表。
4)对TrailRouteAZEnd的本次访问结束;
5)按照步骤3)一样的方式访问TrailRouteWorkTopo、TrailRouteWorkPath。至此TrailRoute当前记录的属性全部获取完毕。
6)TrailRoute结果集执行NextRow操作,回到步骤2)继续执行,直到TrailRoute结果集提取完毕。
对主从表关系字段值的大小比较,需要进行说明的是:
1、比较准则与检索所用的排序准则一致,关系字段为一个或多个均如此。
2、在本例中,Key_main和Key_1大小比较方式为:
(1)如果TrailID_main=TrailID_1,并且SegmentNo_main=SegmentNo_1,则认为二者相等。
(2)如果TrailID_main>TrailID_1,或TrailID_main=TrailID_1但SegmentNo_main>SegmentNo_1,则认为Key_main>Key_1。
(3)如果TrailID_main<TrailID_1,或TrailID_main=TrailID_1但SegmentNo_main<SegmentNo_1,则认为Key_main<Key_1。
整个过程的流程如图2所示。
应当理解的是,对本领域普通技术人员来说,可以根据本发明的技术方案的说明和具体实施方式做出各种可能的改变或替换,所有这些改变或替换都属于本发明的权利要求的保护范围。
Claims (4)
1.一种数据库中主从表数据获取方法,其特征在于,包括如下步骤:
步骤1、针对主从表的一个关系字段,遵照相同的排序准则打开主表和所有从表内的记录;
步骤2、提取主表当前记录;
步骤3、从任一从表的当前记录开始往后搜索与主表的当前记录匹配的记录;
步骤4、按照和步骤3相同的方式逐个访问其它从表,获取与主表当前记录匹配的记录,所有从表得到的记录与主表当前记录共同组成一条完整的数据;
步骤5、主表当前访问位置下挪一次,回到步骤2继续执行,直到主表检索出的所有记录提取完毕时结束;
步骤6、关闭处于打开状态的表。
2.如权利要求1所述的数据库中主从表数据获取方法,其特征在于:
所述主从表关系字段并不局限于由一个字段组成,若为多个字段,则设定若干排序参照列。
3.如权利要求1所述的数据库中主从表数据获取方法,其特征在于:
所述打开主表和所有从表,记录必须按照主从表关系字段大小排序返回,并且排序的方式对所有表都一致。
4.如权利要求1所述的数据库中主从表数据获取方法,其特征在于:
所述步骤3在从表中寻找与主表当前记录匹配的记录是指,比较从表当前记录与主表当前记录的主从表关系字段值:
(1)如果从表的当前记录与主表当前记录对应,则将信息提取,然后从表的当前访问位置向下挪一位,继续比较从表当前记录与主表当前记录的主从表关系字段值;
(2)按照升序排序准则,如果从表的当前记录的关系字段值大于主表的当前记录的关系字段值,说明从表的当前记录在主表的当前记录之后,则不处理从表当前记录的数据,访问位置不变,等待下一次与主表记录的匹配机会,从表针对当前记录的匹配操作结束;
(3)按照升序排序准则,如果从表的当前记录的关系字段值小于主表的当前记录的关系字段值,说明从表的当前记录在主表的当前记录之前,则忽略从表的当前记录,其访问位置下挪一位,继续比较从表当前记录与主表当前记录的主从表关系字段值;
(4)如果发现从表检索到的所有记录提取完毕,则关闭该表,后继过程不再对该表进行访问,从表针对当前记录的匹配操作结束。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200610149686A CN101162463B (zh) | 2006-10-13 | 2006-10-13 | 一种数据库中主从表数据获取的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200610149686A CN101162463B (zh) | 2006-10-13 | 2006-10-13 | 一种数据库中主从表数据获取的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101162463A CN101162463A (zh) | 2008-04-16 |
CN101162463B true CN101162463B (zh) | 2010-05-19 |
Family
ID=39297388
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200610149686A Active CN101162463B (zh) | 2006-10-13 | 2006-10-13 | 一种数据库中主从表数据获取的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101162463B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101996218B (zh) * | 2009-08-21 | 2013-07-24 | 上海博科资讯股份有限公司 | 一种实现数据访问权限控制的方法 |
CN106775959B (zh) * | 2016-12-06 | 2017-12-22 | 上海壹账通金融科技有限公司 | 分布式事务处理方法和*** |
CN109299098B (zh) * | 2018-09-29 | 2022-04-12 | 北京理工大学 | 一种多个多层表头的表格在数据库中的存储及其访问方法 |
CN114547314B (zh) * | 2022-04-25 | 2022-07-05 | 北京安华金和科技有限公司 | 一种基于主从表的数据分类分级方法和*** |
-
2006
- 2006-10-13 CN CN200610149686A patent/CN101162463B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN101162463A (zh) | 2008-04-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Xia et al. | Refreshing the sky: the compressed skycube with efficient support for frequent updates | |
CN1552032B (zh) | 数据库 | |
CN102521405B (zh) | 支持高速加载的海量结构化数据存储、查询方法和*** | |
US20070260639A1 (en) | Method for the reduction of image content redundancy in large image libraries | |
US20060242190A1 (en) | Latent semantic taxonomy generation | |
CN101542475A (zh) | 用于对具有象形表意内容的数据进行搜索和匹配的***和方法 | |
US20090234802A1 (en) | Coupled node tree splitting/conjoining method and program | |
CN101162463B (zh) | 一种数据库中主从表数据获取的方法 | |
CN104769585A (zh) | 递归地遍历因特网和其他源以识别、收集、管理、评判和鉴定企业身份及相关数据的***和方法 | |
CN105528411A (zh) | 船舶装备交互式电子技术手册全文检索装置及方法 | |
CN108694191A (zh) | 在bim模型中快速检索构件信息的方法 | |
CA2815815A1 (en) | Anonymizer device | |
CN106484815B (zh) | 一种基于海量数据类sql检索场景的自动识别优化方法 | |
CN102375827A (zh) | 一种对版本化的电网模型数据库进行快速加载的方法 | |
CN103425740A (zh) | 一种面向物联网的基于语义聚类的物资信息检索方法 | |
CN101501687B (zh) | 控制关系数据库***的方法 | |
CN115983250A (zh) | 基于知识图谱的电力异常数据根源定位方法及*** | |
CN106126634A (zh) | 一种基于直播行业的主数据去重处理方法及*** | |
CN103678513A (zh) | 一种交互式的检索式生成方法及*** | |
Bleifuß et al. | Structured object matching across web page revisions | |
CN103365960A (zh) | 电力多级调度管理结构化数据的离线搜索方法 | |
CN101609461B (zh) | 一种基于用户特征的个人核心数据空间查询***和方法 | |
Perner | Case-base maintenance by conceptual clustering of graphs | |
CN111782663A (zh) | 一种提升聚合查询效率的聚合索引结构及聚合索引方法 | |
CN110263108A (zh) | 一种基于道路网的关键词Skyline模糊查询方法及*** |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
EE01 | Entry into force of recordation of patent licensing contract |
Application publication date: 20080416 Assignee: SHENZHEN ZTE MICROELECTRONICS TECHNOLOGY CO., LTD. Assignor: ZTE Corporation Contract record no.: 2017440020015 Denomination of invention: Master-salve table data acquiring method in data-base Granted publication date: 20100519 License type: Common License Record date: 20170310 |
|
EE01 | Entry into force of recordation of patent licensing contract |