建立多个数据库表的共享索引的方法及装置转让专利

申请号 : CN201210424372.8

文献号 : CN103793401B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 孙建强王威郝大伟周宇辰

申请人 : 国际商业机器公司

摘要 :

本发明公开了一种建立用于主键表和至少一个外键表的共享索引的方法及装置。在该方法中,首先获取主键表的主键索引和至少一个外键表的每一个的外键索引,接着,在每一个外键表的外键索引中,确定至少一个非空的外键索引项。对于所确定的每一个非空的外键索引项,获取该外键索引项的外键值,并在主键索引中查找包括与该外键值相同的主键值的主键索引项,然后,将所查找到的主键索引项与该外键表的表标识符和该外键索引项的外键表数据记录标识符合并,以形成共享索引项。

权利要求 :

1.一种建立用于主键表和至少一个外键表的共享索引的方法,包括:获取所述主键表的主键索引和所述至少一个外键表的每一个的外键索引;

对于每一个所述外键表:

在该外键表的外键索引中,确定至少一个非空的外键索引项;

对于所确定的至少一个非空的外键索引项的每一个:

获取该外键索引项的外键值;

在所述主键索引中查找包括与该外键值相同的主键值的主键索引项;以及将所查找到的主键索引项与该外键表的表标识符和该外键索引项的外键表数据记录标识符合并,以形成所述共享索引的共享索引项。

2.根据权利要求1所述的方法,还包括:

监控所述至少一个外键表的外键索引中外键索引项的改变;以及在任意一个外键索引项发生改变时,更新相应的共享索引项。

3.根据权利要求2所述的方法,其中,所述外键索引项的改变包括以下改变的至少一个:外键索引项从空变为非空;外键索引项从非空变为空;和修改外键索引项的外键表数据记录标识符。

4.根据权利要求2所述的方法,其中,所述更新步骤包括:获取改变了的外键索引项所属的外键表的表标识符及其外键值;

在所述共享索引中查找包括与所获取的外键值相同的共享索引值的共享索引项;以及根据所述外键索引项的改变,对所查找的共享索引项进行更新。

5.根据权利要求4所述的方法,其中,当所述外键索引项的改变是外键索引项从空变为非空时,所述对所查找的共享索引项进行更新的步骤包括:在所述共享索引项中添加所获取的外键表的表标识符和改变了的外键索引项的外键表数据记录标识符。

6.根据权利要求4所述的方法,其中,当所述外键索引项的改变是外键索引项从非空变为空时,所述对所查找的共享索引项进行更新的步骤包括:从所述共享索引项中删除所获取的外键表的表标识符和改变了的外键索引项的外键表数据记录标识符。

7.根据权利要求4所述的方法,其中,当所述外键索引项的改变是修改外键索引项的外键表数据记录标识符时,所述对所查找的共享索引项进行更新的步骤包括:在所述共享索引项中用修改了的外键表数据记录标识符替换与所获取的外键表的表标识符对应的原外键表数据记录标识符。

8.根据权利要求1至7任意一项所述的方法,其中,所述共享索引项还包括主键表的表标识符。

9.一种用于在关系数据库中查询数据的方法,其中,所述关系数据库包括主键表和至少一个外键表,并且所述主键表和所述至少一个外键表具有按照权利要求1至8任意一项的方法建立的共享索引,其中,所述共享索引中的共享索引项包括主键索引项、外键表的表标识符和外键表数据记录标识符,所述方法包括:接收查询请求,所述查询请求包括索引值;

在所述共享索引中查找包括所述索引值的共享索引项;以及根据所述共享索引项中的至少一个表标识符和对应的数据记录标识符,从由所述至少一个表标识符标识的表中获取在由各自的数据记录标识符标识的位置处的数据。

10.一种建立用于主键表和至少一个外键表的共享索引的装置,包括:索引获取模块,其被配置为获取所述主键表的主键索引和所述至少一个外键表的每一个的外键索引;

索引项确定模块,其被配置为对于每一个所述外键表,在该外键表的外键索引中,确定至少一个非空的外键索引项;

获取模块,其被配置为对于所确定的至少一个非空的外键索引项的每一个,获取该外键索引项的外键值;

查找模块,其被配置为在所述主键索引中查找包括与该外键值相同的主键值的主键索引项;以及合并模块,其被配置为将所查找到的主键索引项与该外键表的表标识符和该外键索引项的外键表数据记录标识符合并,以形成所述共享索引的共享索引项。

11.根据权利要求10所述的装置,还包括:

监控模块,其被配置为监控所述至少一个外键表的外键索引中外键索引项的改变;以及更新模块,其被配置为在任意一个外键索引项发生改变时,更新相应的共享索引项。

12.根据权利要求11所述的装置,其中,所述外键索引项的改变包括以下改变的至少一个:外键索引项从空变为非空;外键索引项从非空变为空;和修改外键索引项的外键表数据记录标识符。

13.根据权利要求11所述的装置,其中,所述更新模块包括:获取单元,其被配置为获取改变了的外键索引项所属的外键表的表标识符及其外键值;

查找单元,其被配置为在所述共享索引中查找包括与所获取的外键值相同的共享索引值的共享索引项;以及更新单元,其被配置为根据所述外键索引项的改变,对所查找的共享索引项进行更新。

14.根据权利要求13所述的装置,其中,当所述外键索引项的改变是外键索引项从空变为非空时,所述更新单元包括:添加单元,其被配置为在所述共享索引项中添加所获取的外键表的表标识符和改变了的外键索引项的外键表数据记录标识符。

15.根据权利要求13所述的装置,其中,当所述外键索引项的改变是外键索引项从非空变为空时,所述更新单元包括:删除单元,其被配置为从所述共享索引项中删除所获取的外键表的表标识符和改变了的外键索引项的外键表数据记录标识符。

16.根据权利要求13所述的装置,其中,当所述外键索引项的改变是修改外键索引项的外键表数据记录标识符时,所述更新单元包括:替换单元,其被配置为在所述共享索引项中用修改了的外键表数据记录标识符替换与所获取的外键表的表标识符对应的原外键表数据记录标识符。

17.根据权利要求10至16任意一项所述的装置,其中,所述共享索引项还包括主键表的表标识符。

18.一种用于在关系数据库中查询数据的装置,其中,所述关系数据库包括主键表和至少一个外键表,并且所述主键表和所述至少一个外键表具有按照权利要求1至8任意一项的方法建立的共享索引,其中,所述共享索引中的共享索引项包括主键索引项、外键表的表标识符和外键表数据记录标识符,所述装置包括:请求接收模块,其被配置为接收查询请求,所述查询请求包括索引值;

索引项查找模块,其被配置为在所述共享索引中查找包括所述索引值的共享索引项;

以及

数据获取模块,其被配置为根据所述共享索引项中的至少一个表标识符和数据记录标识符,从由所述至少一个表标识符标识的表中获取在由各自的数据记录标识符标识的位置处的数据。

说明书 :

建立多个数据库表的共享索引的方法及装置

技术领域

[0001] 本发明涉及关系数据库的管理技术,更具体地,涉及建立具有主键-外键约束的多个数据库表的共享索引的方法和装置以及在包括具有主键-外键约束的多个数据库表的关系数据库中查询数据的方法和装置。

背景技术

[0002] 一般地,对于数据库表,可确定该数据库表的数据记录中的某个属性作为主键,其可唯一地标识数据库表中的一个数据记录。主键用于保证数据库表的实体完整性。一个数据库表只有一个主键,并且主键的值不能为空值(Null)。
[0003] 在关系数据库中,可以使用主键和外键将多个数据库表关联在一起,这样的多个数据库表可被认为具有主键-外键约束。一般地,如果数据库表1的主键在数据库表2中出现,则该主键是数据库表2的外键。在这种情况下,数据库表1被称为主键表,而数据库表2被称为外键表。外键可表示两个数据库表之间的关系,并可用于保持数据的一致性。
[0004] 通常,主键和/或外键可在创建数据库表时定义。如果定义了外键,则进一步定义外键的关联表和更新的关联。外键表成为引用表,而主键表成为被引用的表。更新的关联包括级联删除和级联更新。如果删除或更改主键表中的某个数据记录,则所有外键表中与该数据记录有关的数据记录都将被删除或更改。
[0005] 为了方便对数据库表中的数据记录的查询,还可以对数据库表建立索引。索引可以通过对数据库表中的某一列的值进行排序而建立。在关系数据库系统中,通常使用B树结构表示数据库表的索引。图2示出了传统的使用B树结构的索引的示意图。如图2所示,B树索引包括根节点、中间节点和叶节点。在根节点处存储的索引项可用于指示各个中间节点所对应的索引值的范围,在中间节点处存储的索引项可用于指示各个叶节点所对应的索引值。在叶节点处存储的索引项可用于指示与索引值对应的数据记录的信息,其可包括索引值(Key)和数据记录标识符(ROWID)。数据记录标识符可唯一地标识数据库表中的数据记录的物理位置,通常包括指示数据库表的页的页信息(Page)和指示页中的行的行信息(Slot)。
[0006] 对主键表和外键表分别建立主键索引和外键索引。主键索引是对主键表中主键的值进行排序的结构,此时,索引值是主键的值。外键索引是对外键表中外键的值进行排序的结构,此时,索引值是外键的值。在对主键表和外键表分别建立了主键索引和外键索引的情况下,当由于对主键表中的某个数据记录进行更改或删除而导致与该数据记录有关的所有外键表中的数据记录将被更改或删除时,首先对所有外键表的外键索引进行遍历,根据被更改或删除的主键表的数据记录所对应的主键值,查找各个外键索引中对应的外键索引项,然后根据所查找的外键索引项,获得对应的外键表的数据记录,以进行更改或删除操作。因此,无论在外键表中是否实际存在与被更改或删除的主键表的数据记录有关的数据记录,都将遍历所有外键表的外键索引。
[0007] 然而,当前存在与主键表关联的外键表的数量日益增多的趋势。如果一个主键表关联了大量的外键表,则在进行级联删除或级联更新操作时,对所有外键表的外键索引的遍历会花费大量的时间,导致工作效率降低。
[0008] 此外,当在包括主键表和多个外键表的关系数据库中进行数据查询时也存在这样的问题。在对每一个主键值查询对应的数据记录时,都需要对多个外键表的外键索引进行遍历。在存在大量的外键表时,会增加查询时间,导致较差的用户体验。

发明内容

[0009] 根据本发明的一个方面,提供了一种建立用于主键表和至少一个外键表的共享索引的方法,包括:获取所述主键表的主键索引和所述至少一个外键表的每一个的外键索引;对于每一个所述外键表,在该外键表的外键索引中,确定至少一个非空的外键索引项;对于所确定的至少一个非空的外键索引项的每一个,获取该外键索引项的外键值;在所述主键索引中查找包括与该外键值相同的主键值的主键索引项;以及将所查找到的主键索引项与该外键表的表标识符和该外键索引项的外键表数据记录标识符合并,以形成所述共享索引的共享索引项。
[0010] 根据本发明的另一个方面,提供了一种用于在关系数据库中查询数据的方法,其中,所述关系数据库包括主键表和至少一个外键表,并且所述主键表和所述至少一个外键表具有共享索引,其中,所述共享索引中的共享索引项包括主键索引项、外键表的表标识符和外键表数据记录标识符,所述方法包括:接收查询请求,所述查询请求包括索引值;在所述共享索引中查找包括所述索引值的共享索引项;以及根据所述共享索引项中的至少一个表标识符和对应的数据记录标识符,从由所述至少一个表标识符标识的表中获取在由各自的数据记录标识符标识的位置处的数据。
[0011] 根据本发明的再一个方面,提供了一种建立用于主键表和至少一个外键表的共享索引的装置,包括:索引获取模块,其被配置为获取所述主键表的主键索引和所述至少一个外键表的每一个的外键索引;索引项确定模块,其被配置为对于每一个所述外键表,在该外键表的外键索引中,确定至少一个非空的外键索引项;获取模块,其被配置为对于所确定的至少一个非空的外键索引项的每一个,获取该外键索引项的外键值;查找模块,其被配置为在所述主键索引中查找包括与该外键值相同的主键值的主键索引项;以及合并模块,其被配置为将所查找到的主键索引项与该外键表的表标识符和该外键索引项的外键表数据记录标识符合并,以形成所述共享索引的共享索引项。
[0012] 根据本发明的再一个方面,提供了一种用于在关系数据库中查询数据的装置,其中,所述关系数据库包括主键表和至少一个外键表,并且所述主键表和所述至少一个外键表具有共享索引,其中,所述共享索引中的共享索引项包括主键索引项、外键表的表标识符和外键表数据记录标识符,所述装置包括:请求接收模块,其被配置为接收查询请求,所述查询请求包括索引值;索引项查找模块,其被配置为在所述共享索引中查找包括所述索引值的共享索引项;以及数据获取模块,其被配置为根据所述共享索引项中的至少一个表标识符和数据记录标识符,从由所述至少一个表标识符标识的表中获取在由各自的数据记录标识符标识的位置处的数据。

附图说明

[0013] 通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。
[0014] 图1示出了适于用来实现本发明实施方式的示例性计算机系统/服务器12的框图;
[0015] 图2示出了传统的使用B树结构的索引的示意图;
[0016] 图3示意性地示出了根据本发明的一个实施例的建立用于主键表和至少一个外键表的共享索引的方法的流程图;
[0017] 图4示出了根据图3所示的方法而建立的共享索引的示意图;
[0018] 图5示意性地示出了根据本发明的另一个实施例的建立用于主键表和至少一个外键表的共享索引的方法的流程图;
[0019] 图6示意性地示出了根据本发明的一个实施例的用于在关系数据库中查询数据的方法的流程图;
[0020] 图7示出了根据本发明的一个实施例的建立用于主键表和至少一个外键表的共享索引的装置的示意性框图;
[0021] 图8示出了根据本发明的另一个实施例的建立用于主键表和至少一个外键表的共享索引的装置的示意性框图;
[0022] 图9示出了根据本发明的另一个实施例的用于在关系数据库中查询数据的装置的示意性框图。

具体实施方式

[0023] 下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
[0024] 所属技术领域的技术人员知道,本发明可以实现为系统、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:可以是完全的硬件、也可以是完全的软件(包括固件、驻留软件、微代码等),还可以是硬件和软件结合的形式,本文一般称为“电路”、“模块”或“系统”。此外,在一些实施例中,本发明还可以实现为在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。
[0025] 可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
[0026] 计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
[0027] 计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、电线、光缆、RF等等,或者上述的任意合适的组合。
[0028] 可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如”C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
[0029] 下面将参照本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,这些计算机程序指令通过计算机或其它可编程数据处理装置执行,产生了实现流程图和/或框图中的方框中规定的功能/操作的装置。
[0030] 也可以把这些计算机程序指令存储在能使得计算机或其它可编程数据处理装置以特定方式工作的计算机可读介质中,这样,存储在计算机可读介质中的指令就产生出一个包括实现流程图和/或框图中的方框中规定的功能/操作的指令装置(instruction means)的制造品(manufacture)。
[0031] 也可以把计算机程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机或其它可编程装置上执行的指令能够提供实现流程图和/或框图中的方框中规定的功能/操作的过程。
[0032] 图1示出了适于用来实现本发明实施方式的示例性计算机系统/服务器12的框图。图1显示的计算机系统/服务器12仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
[0033] 如图1所示,计算机系统/服务器12以通用计算设备的形式表现。计算机系统/服务器12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,系统存储器28,连接不同系统组件(包括系统存储器28和处理单元16)的总线18。
[0034] 总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
[0035] 计算机系统/服务器12典型地包括多种计算机系统可读介质。这些介质可以是任何能够被计算机系统/服务器12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
[0036] 系统存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)30和/或高速缓存存储器32。计算机系统/服务器12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图1未显示,通常称为“硬盘驱动器”)。尽管图1中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。
[0037] 具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在例如存储器28中,这样的程序模块42包括——但不限于——操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本发明所描述的实施例中的功能和/或方法。
[0038] 计算机系统/服务器12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该计算机系统/服务器12交互的设备通信,和/或与使得该计算机系统/服务器12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口22进行。并且,计算机系统/服务器12还可以通过网络适配器20与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与计算机系统/服务器12的其它模块通信。应当明白,尽管图中未示出,可以结合计算机系统/服务器12使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
[0039] 图3示意性地示出了根据本发明的一个实施例的建立用于主键表和至少一个外键表的共享索引的方法的流程图。下面结合附图,对本实施例进行详细描述。
[0040] 本实施例的方法可以应用于包括主键表和至少一个外键表的关系数据库。
[0041] 如图3所示,在步骤S310,获取主键表的主键索引,以及至少一个外键表的每一个的外键索引。索引可以在创建主键表和外键表时建立,也可以在创建了主键表和外键表之后建立。所建立的主键索引和外键索引可以如图2所示。在主键索引的叶节点上存储的主键索引项包括主键值和主键表数据记录标识符,其中主键表数据记录标识符唯一地标识了主键表中的数据记录的物理位置。在外键索引的叶节点上存储的外键索引项包括外键值和外键表数据记录标识符,其中外键表数据记录标识符唯一地标识了外键表中的数据记录的物理位置。主键值和外键值具有相同的取值范围。
[0042] 接着,对于每一个外键表,执行以下的操作。在步骤S320,在外键表的外键索引中确定至少一个非空的外键索引项。在此,非空的外键索引项是指外键值和外键表数据记录标识符都是非空值的索引项。如果外键索引项为空,则表示在外键表中没有相应的数据记录。该步骤可通过对外键索引的外键索引项进行遍历来执行。
[0043] 然后,对于每一个非空的外键索引项,进行以下操作。在步骤S330,获取外键索引项的外键值,并在步骤S340,在主键索引中查找包括与外键值相同的主键值的主键索引项。然后,在步骤S350,将所查找到的主键索引项与外键表的表标识符和外键索引项的外键表数据记录标识符进行合并,以形成共享索引项。这样,所形成的共享索引项可包括主键值、主键表数据记录标识符、外键表的表标识符和外键表数据记录标识符。可选地,所形成的共享索引还可包括主键表的表标识符。表标识符可以是表的名称。
[0044] 在对所有非空的外键索引项进行了上述步骤S330至S350的操作后,形成了用于主键表和单个外键表的共享索引。
[0045] 在对所有外键表进行了上述步骤S320至S350的操作后,可以将所有的用于主键表和单个外键表的共享索引中具有相同主键值的共享索引项合并成一个共享索引项,从而形成用于主键表和至少一个外键表的共享索引。
[0046] 通过以上描述可以看出,本实施例的方法能够将一个主键索引与至少一个外键索引合并成一个共享索引,从而通过只访问一个共享索引项就能够实现主键表与至少一个外键表之间的引用操作。另外,在进行级联更新或级联删除时,能够快速地确定将被更新或删除的外键表的数据记录,而无需对所有外键表的外键索引进行遍历,从而大大节约了操作时间,提高了效率。
[0047] 图4示出了根据图3所示的方法而建立的共享索引的示意图。如图4所示,共享索引也使用B树结构,其包括根节点、中间节点和叶节点。在根节点和中间节点处存储的共享索引项可与在主键索引的对应节点处存储的主键索引项相同,而在叶节点处存储的共享索引项包括主键值(Key)、主键表数据记录标识符(ROWID=(Page,Slot))、至少一个外键表的表标识符(Foreign Key Table ID)和至少一个外键表数据记录标识符(ROWID=(Page,Slot))。当然,共享索引项也可包括主键表的表标识符(Primary Key Table ID)。
[0048] 图5示意性地示出了根据本发明的另一个实施例的建立用于主键表和至少一个外键表的共享索引的方法的流程图。下面结合附图,对本实施例进行详细描述,其中对于与前面实施例相同的部分,付与相同的附图标记,并适当省略其说明。
[0049] 图5所示的实施例的方法是在图3所示的实施例的方法的基础上增加了与共享索引项的更新有关的操作。
[0050] 如图5所示,在建立了共享索引之后,在步骤S510,监控至少一个外键表的外键索引中外键索引项的改变。在本实施例中,外键索引项的改变包括以下的至少一个:外键索引项从空变为非空;外键索引项从非空变为空;和修改外键索引项的外键表数据记录标识符。
[0051] 当在外键表中添加了新的数据记录时,对应的外键索引项将从空变为非空。在这种情况下,外键索引项中的外键值和外键表数据记录标识符为非空值。
[0052] 当在外键表中删除了某个数据记录时,对应的外键索引项将从非空变为空。在这种情况下,外键索引项中的外键值和外键表数据记录标识符为空值。
[0053] 当某个数据记录在外键表中的物理位置发生变化时,对应的外键索引项中的外键表数据记录标识符将被修改以反映该数据记录的新的物理位置。
[0054] 然后,在任意一个外键索引项发生改变时,在步骤S520,更新相应的共享索引项。在该更新步骤中,首先,获取改变了的外键索引项所属的外键表的表标识符及其外键值,接着,在共享索引中查找包括与所获取的外键值相同的共享索引值的共享索引项,并根据该外键索引项的改变,对所查找到的共享索引项进行更新。具体地,当外键索引项的改变是外键索引项从空变为非空时,在对应的共享索引项中添加所获取的外键表的表标识符和改变了的外键索引项的外键表数据记录标识符。当外键索引项的改变是外键索引项从非空变为空时,从对应的共享索引项中删除所获取的外键表的表标识符和改变了的外键索引项的外键表数据记录标识符。当外键索引项的改变是修改外键索引项的外键表数据记录标识符时,在对应的共享索引项中用修改了的外键表数据记录标识符替换与所获取的外键表的表标识符对应的原外键表数据记录标识符。
[0055] 通过以上描述可以看出,本实施例的方法能够进一步动态地维持共享索引,以保证共享索引与数据记录的一致性。
[0056] 图6示意性地示出了根据本发明的一个实施例的用于在关系数据库中查询数据的方法的流程图。在本实施例中,关系数据库可包括主键表和至少一个外键表,其中对于主键表和至少一个外键表建立共享索引,其中共享索引中的共享索引项可包括主键索引项、外键表的表标识符和外键表数据记录标识符。共享索引可使用图3或图5所示的实施例的方法来建立。
[0057] 如图6所示,在步骤S610,接收查询请求,该查询请求可包括索引值。在本实施例中,索引值的范围与主键值的范围相同。接着,在步骤S620,根据查询请求中的索引值,在共享索引中查找包括该索引值的共享索引项。在找到了所需的共享索引项后,在步骤S630,根据该共享索引项所包含的至少一个表标识符和对应的数据记录标识符,从由表标识符标识的表中获取在由对应的数据记录标识符标识的位置处的数据。
[0058] 在本实施例中,至少一个表标识符至少包括主键表的表标识符。如果共享索引项只包括主键表的表标识符和主键表数据记录标识符,则从主键表中主键表数据记录标识符所标识的位置处取得数据记录,并返回该取得的数据记录。如果共享索引项包括主键表的表标识符、主键表数据记录标识符、至少一个外键表的表标识符和外键表数据记录标识符,则从主键表中获取在由主键表数据记录标识符标识的位置处的数据记录,并从每一个所标识的外键表中获取由各自的外键表数据记录标识符标识的位置处的数据记录,然后将这些数据记录组合在一起,并返回组合后的数据记录。
[0059] 通过以上描述可以看出,本实施例的方法能够只根据一个共享索引项,实现对包括主键表和至少一个外键表的关系数据库的数据查询。
[0060] 图7示出了根据本发明的一个实施例的建立用于主键表和至少一个外键表的共享索引的装置的示意性框图。下面根据附图,对本实施例进行详细描述,其中对于与前面实施例相同的部分,适当省略其说明。
[0061] 如图7所示,本实施例的建立用于主键表和至少一个外键表的共享索引的装置700可包括索引获取模块701、索引项确定模块702、获取模块703、查找模块704和合并模块705。
[0062] 在本实施例的装置700中,索引获取模块701配置为获取主键表的主键索引,以及每一个外键表的外键索引。然后,索引项确定模块702在每一个外键表的外键索引中,确定至少一个非空的外键索引项。如前所述,非空的外键索引项是指外键值和外键表数据记录标识符都为非空值的索引项。在对每一个外键索引确定了非空的外键索引项之后,对于每一个非空的外键索引项,获取模块703获取该外键索引项的外键值。根据由获取模块703获得的外键值,查找模块704在由索引获取模块701获取的主键索引中查找包括与该外键值相同的主键值的主键索引项。然后,合并模块705将所查找到的主键索引项与外键表的表标识符和外键索引项的外键表数据记录标识符合并,以形成共享索引项。因此,共享索引项可包括主键值、主键表数据记录标识符、外键表的表标识符和外键表数据记录标识符。可选地,共享索引项还可包括主键表的表标识符。
[0063] 图8示出了根据本发明的另一个实施例的建立用于主键表和至少一个外键表的共享索引的装置800的示意性框图。
[0064] 如图8所示,本实施例的装置800除了包括索引获取模块701、索引项确定模块702、获取模块703、查找模块704和合并模块705之外,还可包括监控模块801和更新模块802。
[0065] 在图8所示的装置800中,监控模块801监控至少一个外键表的外键索引中外键索引项的改变。在本实施例中,外键索引项的改变包括以下的至少一个:外键索引项从空变为非空;外键索引项从非空变为空;和修改外键索引项的外键表数据记录标识符。
[0066] 当监控模块801监控到任意一个外键索引项发生改变时,更新模块802更新相应的共享索引项。在更新模块802中,获取单元8021获取改变了的外键索引项所属的外键表的表标识符及其外键值,并由查找单元8022在共享索引中查找包括与所获取的外键值相同的共享索引值的共享索引项。然后,更新单元8023根据所监控的外键索引项的改变,对由查找单元8022查找到的共享索引项进行更新。
[0067] 具体地,更新单元8023可包括添加单元,其在监控模块801监控到外键索引项的改变是外键索引项从空变为非空时,在共享索引项中添加所获取的外键表的表标识符和改变了的外键索引项的外键表数据记录标识符。
[0068] 更新单元8023还可包括删除单元,其在监控模块801监控到外键索引项的改变是外键索引项从非空变为空时,从共享索引项中删除所获取的外键表的表标识符和改变了的外键索引项的外键表数据记录标识符。
[0069] 更新单元8023还可包括替换单元,其在监控模块801监控到外键索引项的改变是修改外键索引项的外键表数据记录标识符时,在共享索引项中用修改了的外键表数据记录标识符替换与所获取的外键表的表标识符对应的原外键表数据记录标识符。
[0070] 本领域的普通技术人员能够理解,图7和图8所示的实施例的装置700、800可包括在关系数据库管理系统中。
[0071] 图9示出了根据本发明的另一个实施例的用于在关系数据库中查询数据的装置900的示意性框图。下面结合附图,对本实施例进行详细描述。
[0072] 在本实施例中,关系数据库包括主键表和至少一个外键表,并且对于主键表和至少一个外键表建立共享索引,其中共享索引中的共享索引项可包括主键索引项、外键表的表标识符和外键表数据记录标识符。主键表和至少一个外键表的共享索引可由图7或图8所示的建立用于主键表和至少一个外键表的共享索引的装置700、800建立,并在关系数据库中维持。
[0073] 如图9所示,本实施例的装置900可包括请求接收模块901、索引项查找模块902和数据获取模块903。
[0074] 在本实施例的装置900中,请求接收模块901接收包括索引值的查询请求。索引值的范围与主键值的范围相同。然后,索引项查找模块902在共享索引中查找包括该索引值的共享索引项,并由数据获取模块903根据所查找到的共享索引项中的至少一个表标识符和数据记录标识符,从由所标识的表中获取在由各自的数据记录标识符标识的位置处的数据。
[0075] 本领域的普通技术人员能够理解,图9所示的实施例的装置900可包括在关系数据库管理系统中。此外,图9所示的实施例的装置900可与图7和图8所示的实施例的装置700、800相组合。
[0076] 附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0077] 以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。