发明内容
本发明的目的通过一种用于从被表达为记录阵列的表格格式数据中提取子集作为处理对象的数据处理方法来实现,每一个记录都包括项目和属于该项目的项目值,该数据处理方法包括下列步骤:
a)通过将表格格式数据划分为信息块来构造表格格式数据,每一个信息块都包括值列表和指针阵列,在所述值列表中,项目值以对应于属于特定项目的项目值的项目值号码的顺序存储,在所述指针阵列中,指出项目值号码的指针值以唯一记录号的顺序存储,
b)响应对作为记录的一部分的子集的选择,创建包含子集的记录号的有序集合阵列,
c)将在由有序集合的每一个记录号指出的位置上的指针阵列中的指针值对应于其中排列了记录号的位置排列到项目值号码阵列中,以及
d)通过引用项目值号码阵列中的值,创建存储位置元素的第二指针阵列和存储值元素的第二值列表,以及其中
通过由记录号指出的位置上的第二指针阵列中的元素和由第二指针阵列中的元素指出的位置上的第二值列表中的元素,根据有序集合阵列的记录号指定值列表中的值。
根据本发明,创建指出构成子集的与记录号相关的值列表的项目值的第二值列表,通过引用第二值列表,可以执行数据处理(稍后描述的检索、聚合、分类,以及联接处理)。相应地,由于可以使对其进行引用的数据量比较小,因此,可以缩短处理时间。此外,由于还可以使在数据处理时创建的阵列的大小与第二值列表或第二指针阵列相同,因此,也可以降低所需要的存储区。
在优选实施例中,创建第二指针阵列和第二值列表的步骤包括下列步骤:将项目值号码阵列中的元素分类,在重复值被排除的状态下创建阵列,并使其成为第二值列表,通过转换项目值号码阵列中的元素以反映分类和重复值的排除,创建第二指针阵列。
此外,在另一个优选实施例中,一种用于从被表达为记录阵列的表格格式数据中提取子集作为处理对象的数据处理方法,每一个记录都包括项目和属于该项目的项目值,包括下列步骤:
a)通过将表格格式数据划分为信息块来构造表格格式数据,每一个信息块都包括值列表和指针阵列,在所述值列表中,项目值以对应于属于特定项目的项目值的项目值号码的顺序存储,在所述指针阵列中,指出项目值号码的指针值以唯一记录号的顺序存储,
b)响应对作为记录的一部分的子集的选择,创建包含子集的记录号的有序集合阵列,
c)将在由有序集合的每一个记录号指出的位置上的指针阵列中的指针值对应于其中排列了记录号的位置排列到项目值号码阵列中,以及
e)使用项目值号码阵列作为第二值列表并使用原始值列表作为第二值列表,
其中,通过由记录号指出的位置上的第二指针阵列中的元素和由第二指针阵列中的元素指出的位置上的第二值列表中的元素,根据有序集合阵列的记录号指定值列表中的值。
在此实施例中,由于第二值列表为原始值列表,因此,其量不能被缩小。然而,与有序集合阵列具有一样大小的项目值号码阵列被用作第二指针阵列。相应地,与使用原始指针阵列和原始值列表的情况相比,可以使对其进行引用的数据量比较小,因此,可以缩短处理时间。
优选实施例进一步包括将有序集合阵列的大小与值列表的大小进行比较的步骤,作为比较的结果,在子集的大小按预先确定的比率小于值列表的大小的情况下,执行步骤c)和d)或步骤c)和e)。
这里,在甚至在考虑到第二指针阵列和第二值列表的创建的处理时间的情况下识别缩短处理时间的情况下,创建第二指针阵列和第二值列表,并执行使用这些东西的处理。例如,预先确定的速率通过(子集的大小,即,记录的数量)/(值列表的大小,即,记录的数量)=1/n(n是大于1的数字)。数字“n”可以通过由操作员输入的所希望的数字确定,或者可以预先确定为预先确定的数字。
此外,本发明的目的通过使用上面的数据处理方法创建的第二指针阵列和/或第二值列表的检索方法来实现,该方法的特征在于,包括下列步骤:在第二值列表中的元素中指定指出项目值的元素,作为检索对象,将指出一个标志在一个位置为on的值组成阵列,所述位置对应于与第二值列表具有同样大小的标志阵列中的指定元素的位置,指定由有序集合中的记录号指出的第二指针阵列的元素,引用由第二指针阵列的元素指出的位置处的标志阵列中的标志的状态,以及在标志的状态为on的情况下,连续地将记录号排列到新提供的用于输出的有序集合阵列中。
在另一个实施例中,使用上面的数据处理方法创建的第二指针阵列和/或第二值列表的聚合方法包括下列步骤:创建分类号阵列,在该阵列中,对应于第二值列表的元素,排列指出值的类别的分类号,指定对应于指定的分类号的有序集合阵列中的记录号,以及使用由指定的记录号指出的预先确定的值列表项目值执行聚合。
此外,在另一个实施例中,使用上面的数据处理方法创建的第二指针阵列和/或第二值列表的分类方法,包括下列步骤:作为第二值列表的每一个值的第二指针阵列指出的元素的数量,计算存在号码,基于存在号码,创建对应于第二值列表的值并且指出其中有序集合阵列中的记录号将被排列的头部位置的累计号码阵列,以及,引用累积阵列,并将有序集合阵列的记录号排列到用于输出的阵列,以便反映值列表中的项目值的分类顺序。
此外,在另一个实施例中,通过使用涉及由上面的数据处理方法创建的多个表格格式数据中的每一个数据的信息块中的第二指针阵列和/或第二值列表,联接表格格式数据的方法,包括下列步骤:查找要在多个表格格式数据中的每一个数据中共享的项目,使涉及项目的信息块的第二值列表中的项目值相等,以及,响应使项目值相等,随着项目值的配置中的变化,更新每一个信息块中的第二指针阵列中的元素。
此外,本发明的目的通过一种用于操作计算机以从被表达为记录阵列的表格格式数据中提取子集作为处理对象的数据处理程序来实现,每一个记录都包括项目和属于该项目的项目值,使计算机执行下列步骤:
a)通过将表格格式数据划分为信息块来构造表格格式数据,每一个信息块都包括值列表和指针阵列,在所述值列表中,项目值以对应于属于特定项目的项目值的项目值号码的顺序存储,在所述指针阵列中,指出项目值号码的指针值以唯一记录号的顺序存储,
b)响应对作为记录的一部分的子集的选择,创建包含子集的记录号的有序集合阵列,
c)将在由有序集合的每一个记录号指出的位置上的指针阵列中的指针值对应于其中排列了记录号的位置排列到项目值号码阵列中,以及
d)通过引用项目值号码阵列中的值,创建存储位置元素的第二指针阵列和存储值元素的第二值列表,以及其中
操作计算机,以便通过由记录号指出的位置上的第二指针阵列中的元素和由第二指针阵列中的元素指出的位置上的第二值列表中的元素,根据有序集合阵列的记录号指定值列表中的值。
在优选实施例中,在创建第二指针阵列和第二值列表的步骤中,使计算机执行下列步骤:将项目值号码阵列中的元素分类,在重复值被排除的状态下创建阵列,并使其成为第二值列表;以及通过转换项目值号码阵列中的元素以反映分类和重复值的排除,创建第二指针阵列。此外,在另一个优选实施例中,一种用于操作计算机以从被表达为记录阵列的表格格式数据中提取子集作为处理对象的数据处理程序,每一个记录都包括项目和属于该项目的项目值,使计算机执行下列步骤:
a)通过将表格格式数据划分为信息块来构造表格格式数据,每一个信息块都包括值列表和指针阵列,在所述值列表中,项目值以对应于属于特定项目的项目值的项目值号码的顺序存储,在所述指针阵列中,指出项目值号码的指针值以唯一记录号的顺序存储,
b)响应对作为记录的一部分的子集的选择,创建包含子集的记录号的有序集合阵列,
c)将在由有序集合的每一个记录号指出的位置上的指针阵列中的指针值对应于其中排列了记录号的位置排列到项目值号码阵列中,以及
e)使用项目值号码阵列作为第二值列表并使用原始值列表作为第二值列表,
以及使计算机被操作,以便通过由记录号指出的位置上的第二指针阵列中的元素和由第二指针阵列中的元素指出的位置上的第二值列表中的元素,根据有序集合阵列的记录号指定值列表中的值。
优选情况下,使计算机进一步执行将有序集合阵列的大小与值列表的大小进行比较的步骤,作为比较的结果,在子集的大小按预先确定的比率小于值列表的大小的情况下,使计算机执行步骤c)和d)或步骤c)和e)。
顺便说一句,在本说明书中,虽然各种阵列中包含的数值被称为“元素”或“值”,但是,它们只是表示方式的不同,而没有本质的区别。例如,“值列表”中包含的东西被表达为“项目值”,显然,这也是值列表中的“元素”。
具体实施方式
下面将参考附图描述本发明的实施例。图3是显示计算机系统的硬件结构的方框图,该计算机系统用于实现根据本发明的实施例的作为表格格式数据中的处理对象为子集创建转换阵列的过程,以及检索、聚合、分类和联接的过程。在此实施例中,在检索、聚合、分类并联接的过程之前,参考如图2(a)到2(c)所示的信息块,创建只包括值列表的记录和元素的阵列,该阵列成为处理对象。此过程被称为“初步处理”。接下来,使由初步处理创建的阵列成为工作区,执行检索、聚合等等各种过程。
如图3所示,此计算机系统10与普通计算机系统具有相同结构,并包括CPU 12,用于通过程序来控制整个系统和单个结构部分,RAM(随机存取存储器)14,用于存储工作数据等等,ROM(只读存储器)16,用于存储程序等等,诸如硬盘之类的固定存储介质18,CD-ROM驱动器20,用于访问CD-ROM 19,在CD-ROM驱动器20和连接到外部网络(未显示)的外部终端之间提供的接口(I/F)22,包括键盘和鼠标的输入设备24,以及CRT显示设备26。CPU 12、RAM 14、ROM 16、外部存储介质18、I/F 22、输入设备24,以及显示设备26通过总线28相互连接。
根据实施例的检索、聚合、分类、联接等等的预处理程序以及程序包含在CD-ROM 19中,并可以由CD-ROM驱动器20读取,或者可以预先存储在ROM 16中。此外,曾经从CD-ROM 19中读出的内容可以存储在外部存储介质18的预先确定的区域。或者,程序可以通过网络(未显示)、外部终端和I/F 22从外部提供。
此外,在实施例中,为了实现高速度的检索、聚合、分类和联接的预处理,以及处理,必须创建图2(a)到2(c)所示的数据格式的信息块。信息块创建程序也可以包含在CD-ROM 19中,存储在ROM16中,或存储在外部存储介质18中。或者,不用说,这些程序也可以通过网络(未显示)从外部提供。此外,在实施例中,由信息块创建程序创建的数据(信息块)存储在RAM 14中,或存储在外部存储介质18的预先确定的区域中。
接下来,将描述由计算机系统10执行的处理的概述。如图4所示,在实施例中,根据检索、聚合或分类的过程(其中,所有记录或其组成部分是处理对象),限制性较强地选择记录(步骤401)。此外,使具有所选择的记录的集合成为处理对象,当开始检索、聚合、分类或联接的过程时(步骤402),在明确的条件下,执行初步处理(步骤404)。此初步处理在某些情况下被称为“范围”的设置过程,在执行了初步处理之后要执行的检索等等的过程被称为“使用范围”的检索等等的过程(步骤405)。
顺便说一句,具有所选择的记录的集合被称为“有序集合”。在有序集合的阵列中,所选择的记录号以指定的顺序来排列(例如,升序)。在初步处理中,创建第二指针阵列(PV2)和第二值列表(VL2),它们用于检索等等的后处理。稍后将描述此创建过程。第二指针阵列包含等于有序集合的元素数量的元素,并指出对应于有序集合的阵列中的元素的第二值列表中的元素。第二值列表包含值列表(VL)的存储位置号码。第二值列表的元素数量不大于有序集合的阵列中的元素数量。即,只有在对应于有序集合的阵列中的元素(所选择的记录)的所有项目值彼此不同的情况下,这些元素的数量彼此一致。相应地,有序集合的阵列中的元素数量成为第二值列表的元素数量可以采取的最大值。
然后,在此实施例中,在原始值列表(VL)的元素数量(大小)充分大于有序集合的阵列中的元素数量(大小)的情况下(参见步骤403),执行使用此实施例中的第二指针阵列和第二VL的过程,即,使用范围的检索等等的过程(步骤405)。例如,使有序集合的大小不大于VL的大小的1/n(n:不小于1的集合值)。此值“n”可以根据记录数量、处理器的处理能力等等来进行设置。
由于下列原因而执行如上所述的判断。在使用范围的过程中,需要初步处理(步骤404),其执行需要花费一些时间。如此,只有在有序集合的大小(实际上,第二值列表的大小)充分小于VL的大小的情况下,可以想象,甚至在初步处理的执行时间增大的情况下,与正常的处理(步骤406)的执行相比,可以缩短整个处理时间,即,只有在可以缩短处理时间的情况下,与正常的处理相比,通过使用初步处理和范围执行检索等等的过程,应该执行步骤404和步骤405的处理。
相应地,陈述“充分小”意味着,其小的程度致使,即使执行初步处理,并且绝对数的大小没有定义,也可以缩短处理时间。
接下来,将描述实施例的初步处理。图5是显示此实施例的初步处理的流程图。如图5所示,在初始化指定有序集合的阵列中的位置(存储位置号码)的参数之后(步骤501),指定由参数指出的有序集合的阵列中的元素(步骤502)。最初,在图6中,指定有序集合的阵列601中的存储位置号码“0”中的元素“0”。
接下来,通过引用由有序集合的阵列中的元素指出的指针阵列中的元素,指定由元素指出的位置上的项目值的号码(项目值号码)(步骤503)。在初始状态的示例中,指定由有序集合的阵列中的元素“0”指出的指针阵列中的元素“2”。由于此元素表示指出值列表中的相关元素(项目值)的位置的号码,因此,这被称为“项目值号码”。
此项目值号码位于由单独提供的项目值号码阵列中的参数指出的位置(步骤504)。在初始状态的示例中,指针阵列212中的元素(项目值号码)“2”存储在由项目值号码阵列611中的参数“0”指出的位置。顺便说一句,项目值号码阵列包含其数量等于有序集合的阵列的数量的元素。
通过重复如上所述的过程(参见步骤505和506),可以创建包含有序集合中的每一个元素(所选择的记录号)的对应的项目值号码的项目值号码阵列(参见图6中的附图标记611)。
当创建项目值号码阵列的过程完成时,执行编译过程(步骤507)。在此实施例中,在记录的子集是处理对象的情况下,只对与子集相关的值列表中的项目值进行参考。相应地,由于作为处理对象的范围是有限的,因此,在本说明书中,它也被称为“范围”。
为了实现该范围,需要值列表的子集(部分集合中的元素要引用该子集)以及记录的子集中的元素(记录号)的转换阵列和值列表的子集。前者是第二值列表(VL2),而后者是第二指针阵列(PV2)。创建第二值列表和第二指针阵列的过程被称为编译过程。
图7是显示编译过程的示例的流程图。在此示例的编译过程中,首先,创建项目值号码的副本(步骤701)。在涉及如图6所示的信息块201和有序集合的阵列601作为记录的子集的示例中,如图8(a)所示,创建包括与项目值号码阵列(原始阵列)相同元素的副本阵列。
接下来,在对副本阵列进行分类之后(参见步骤702和图8(b)),排除经过分类的副本阵列中的重复值,并浓缩阵列(参见步骤703和图8(c))。如此,其中元素被分类并且重复值被排除的阵列成为第二值列表(VL2)。然后,指定项目值号码阵列(原始阵列)中的每一个元素在第二值列表中的位置,并将指出指定的位置的值作为原始阵列的存储位置号码的元素存储到新准备的阵列中(参见步骤704和图8(d))中。其中在步骤704中存储元素的阵列成为第二指针阵列(PV2)。
可以想象,在项目值号码阵列中,值的组件和位置的组件是混合的。然后,在步骤701到703的过程中,只提取值的组件,并创建只包括被提取的值的组件的第二值列表(VL2)。此外,在随后的步骤704中,提取位置的组件,并创建只包括位置的组件的第二指针阵列(PV2)。
使用编译过程如此创建的第二值列表和第二指针阵列作为信息块的一部分,用于稍后描述的检索、聚合、分类、联接等等的过程。
接下来,将描述使用第二值列表和第二指针阵列(使用范围)的检索过程。图9是显示根据此实施例的使用范围的检索过程的流程图。在此过程中,首先,确保与第二值列表(VL2)具有一样大小的标志阵列区域(步骤901)。在此标志阵列中,“1”与位置(存储位置)位于相同的位置,在该位置中,存储值列表的元素(项目值)之中将成为检索对象的元素,而“0”位于另一个位置。相应地,在下一个步骤中,“1”或“0”的值位于标志阵列中。
图10显示了一个示例,在该示例中,对于所选择的记录(有序集合)的项目“fan”,检索具有项目值“T-team”的记录。这里,指定了第二值列表(VL2)的元素,判断由该元素指出的值列表(VL)中的元素(项目值)是否为检索对象。当项目值是检索对象时,在标志阵列中,“1”位于对应于第二值列表(VL2)的元素的存储位置的位置。在图10的示例中,由于项目值“T-team”是检索对象,值“1”位于标志阵列中的指出第二值列表(VL2)中的值列表(VL)的项目值“T-team”的元素的存储位置(存储位置号码“1”)。
如此,当值位于标志阵列中时,在初始化指出有序集合的阵列中的位置(存储位置号码)的参数之后(步骤903),指定由参数指出的有序集合的阵列中的元素(步骤904)。在图11的示例中,最初,在有序集合的阵列中,指定位于存储位置号码“0”的元素“0”。接下来,指定由元素指出的第二指针阵列(PV2)中的元素,然后,指定由PV2中的元素指出的标志阵列中的值(步骤905)。在初始状态的示例中,指定,位于由第二指针阵列(PV2)元素“0”指出的位置的标志阵列的值为“0”。
接下来,判断指定的标志值是否为“1”(步骤906)。当标志值为“1”(在步骤906中为“是”),有序集合的阵列的元素位于提供的用于输出的阵列中(步骤907)。在图11的示例中,在有序集合的阵列中,对于存储位置号码“1”的元素“2”,通过PV2和标志配置,标志阵列中的标志值成为“1”。相应地,有序集合的阵列的元素“2”存储在用于输出的阵列中。
对于有序集合的存储位置号码的所有参数,执行如上所述的过程(参见步骤908和909)。在用于输出的阵列中获得的元素分别成为通过检索提取的记录号。
如上所述,根据此实施例,指出值列表中的元素的信息(值列表的存储位置号码)(使该信息对应于作为记录的子集的有序集合中的元素)存储在第二值列表(VL2)。在检索过程中,创建与此大小具有相同大小的标志阵列,参考标志阵列中的值,并就它是否为检索对象的记录作出判断。由于标志阵列的大小等于第二值列表的大小,与涉及所有记录的值列表的大小相比,它足够小。相应地,创建标志阵列以及对值进行参考所需的时间可以缩短,由于此,可以足够地缩短检索过程的处理时间。
接下来,将描述使用范围的聚合过程。聚合过程用于计算具有一个或多个特殊条款值的记录数量。在此实施例中,提供了与第二值列表具有一样大小的存在号码阵列,与第二值列表(VL2)中的项目值相关的记录数量存储在存在号码阵列,提取存在号码阵列中的元素,以便可以立刻实现聚合。
图12是显示了涉及项目“fan”的信息块中的第二指针阵列(PV2)、第二值列表(VL2)和存在号码阵列的视图。在PV2中,存储位置号码“0”和“2”中的两个元素与VL2的存储位置号码“0”一致。相应地,在存在号码阵列中,位于存储位置号码“0”的元素成为“2”。另一方面,在PV2中,位于存储位置号码“1”的一个(单个)元素与VL2的存储位置号码“1”一致。相应地,在存在号码阵列中,位于存储位置号码“1”的元素成为“1”。顺便说一句,在接下来描述的分类过程中将详细描述了创建存在号码阵列的过程。
根据此实施例,也是聚合过程中,可以使要使用的存在号码阵列的大小与第二值列表一样大小,该列表充分小于原始值列表。相应地,可以缩短创建存在号码阵列所需的时间,由于此,可以缩短整个处理时间。
接下来,将描述使用范围的分类过程。图13和14是显示使用范围的分类过程的流程图。如图13所示,首先,创建初始存在号码阵列,该阵列与第二值列表(VL2)具有一样大小,其中,排列了初始值“0”(步骤1301)。接下来,在初始化指定第二指针阵列(PV2)的位置(存储位置号码)的参数之后(步骤1302),在有序集合的阵列中,指定了由参数指出的位置上的元素,接下来,在存在号码阵列中,增大由元素指出的位置的值(步骤1303)。重复步骤1303,直到最后的参数(参见步骤1304和1305)。到在步骤1305中的判断为“是”的阶段,完成存在号码阵列。
图15和16是显示了稍后描述的涉及项目“fan”和累计号码阵列的存在号码阵列的创建过程的示例的视图。如图15(a)所示,最初,指定位于参数“0”的位置处的PV2的元素“0”,在存在号码阵列中,将位于由PV2的元素指出的位置处的值从“0”增大到“1”。接下来,如图15(b)所示,指定位于参数“1”的位置处的PV2的元素“1”,在存在号码阵列中,将位于由PV2的元素指出的位置处的值从“0”增大到“1”。然后,如图16(a)所示,指定位于参数“2”的位置处的PV2的元素“0”,在存在号码阵列中,将位于由PV2的元素指出的位置处的值从“1”增大到“2”。
当完成存在号码阵列时,基于存在号码阵列,创建存储累计号码(其中累积了元素)的累计号码阵列(步骤1306)。累计号码阵列指出对于在某些存储位置号码之前的存储位置号码总共存在多少元素。在图16(b)的示例中,在累计号码阵列1612中,位于存储位置号码“0”的元素成为“0”,由于没有较小的存储位置号码。位于存储位置号码“1”的元素等于小于此号码的存储位置号码“0”的(存在号码阵列1611中的元素)的存在号码,并成为“2”。此外,在此累计号码阵列中,作为另一个元素(位于存储位置号码“2”的元素),可以提供小于存储位置号码“2”的存储位置号码的存在号码的总和“3”(参见附图标记1612的括号)。
当如此创建累计号码阵列时,通过使用累计号码阵列,在新确保的用于输出的阵列中排列记录号。如图14所示,首先,在初始化指出有序集合的阵列中的位置(存储位置号码)的参数之后(步骤1401),指定由参数指出的有序集合的阵列中的元素,接下来,在第二指针阵列(PV2)中,指定了由指定的元素指出的位置处的元素(步骤1402)。
接下来,在累计号码阵列中,指定由第二指针阵列(PV2)中的指定元素指出的位置(步骤1403)。然后,在单独提供的用于输出的阵列中在步骤1403中指定的累计号码指出的位置,排列由参数指出的有序集合的阵列中的元素(步骤1404)。此后,在累计号码阵列中,增大在步骤1403中指定的累计号码(步骤1405)。
在步骤1403中指定的累计号码指出作为指定累计号码的来源的有序集合的阵列中的元素,即,记录号存储在用于输出的阵列中的位置。相应地,在排列了某一记录号之后,接下来指定同一个累计号码,以便在步骤1405中将记录号存储在用于输出的阵列中,增大累计号码。此外,由于存储有序集合的阵列中的元素,用于输出的阵列与有序集合的阵列具有一样的大小。
重复如上所述的过程,直到最后的参数(参见步骤1406和1407)。在如此获得的用于输出的阵列中,对于作为键的项目,指出分类的记录号。
图17到19是显示分类过程中的阵列的状态的视图,此时,使项目“fan”成为键。在图17中,最初,指定由参数“0”指出的有序集合阵列的元素(记录号)“0”。相应地,通过PV2指定由PV2中的相关元素指出的位置上的累计号码阵列的值(累计号码)。相应地,有序集合的阵列的元素“0”存储在用于输出的阵列中的由累计号码指出的存储位置号码“0”的位置,然后,累计号码从“0”增大到“1”。
也是在图18中,同样,由参数“1”指出的有序集合的阵列的值“2”存储在用于输出的阵列中的通过PV2获得的累计号码阵列中的对应于累计号码“2”的位置,然后,累计号码阵列中的累计号码从“2”增大到“3”。此外,也是在图19中,同样,由参数“2”指出的有序集合的阵列的值“9”存储在用于输出的阵列中的通过PV2获得的累计号码阵列中的对应于累计号码“1”的位置,然后,累计号码阵列中的累计号码从“1”增大到“2”。
如上所述,根据此实施例,也是在分类的过程中,可以使用于该过程的累计号码阵列与第二值列表具有一样的大小,由于此,可以缩短处理时间。
接下来,将描述使用范围的联接过程。联接过程是指,从多个表格中,预先确定的项目被用作键,并提供多个表格之间的共同性,以联接它们。例如,考虑这样的情况:从图20(a)所示的棒球爱好者俱乐部成员的源表(原始表)2001,提取项目“区域”的值为“Tokyo”的记录,并准备表格(棒球爱好者俱乐部成员表格),如图20(b)所示,从棒球比赛时间表的原始表2011中,提取项目“棒球场”的值为“东京”的记录,并准备表格(比赛时间表)2012。在联接过程中,棒球爱好者俱乐部成员表格2011中的项目“区域”和比赛时间表2012的项目“棒球场”被用作键,创建其中键项目被联接的表,如图21所示。这里,反映(保留)了分类顺序的表格2101被称为主端表格,而另一个表格2111被称为从端表格。
在联接过程中,在主端和从端,通过使用项目作为键,提取具有预先确定的值的记录,并创建表格。相应地,当提取记录时,在原始值列表的元素的数量(大小)充分大于大于有序集合的阵列中的元素的数量(大小)的情况下,执行使用范围的联接过程。
根据此实施例,比赛时间表原始表具有如图22所示的结构。即,对于项目“棒球队”、“比赛日期”和“棒球场”中的每一个项目,提供包括值列表的指针阵列(PV)和值列表(VL)的信息块。此外,如上所述,“棒球场”的值为“Tokyo”的记录具有记录号“0”、“4”、“9”和“10”。相应地,其中上面的记录号按照升序排序的阵列成为有序集合的阵列。
图23是用于说明涉及项目“棒球队”的信息块的初步处理(参见图5)的过程的视图。通过图5中的步骤501到505的处理,创建项目值号码阵列,然后,通过编译过程(参见图5和图7的步骤507),创建第二值列表(VL2)和第二指针阵列(PV2)。
图24是显示使用第二值列表和第二指针阵列的联接过程(即,使用范围的联接过程)的流程图。在联接过程中,首先,作为键共享项目的值列表(步骤2401)。图25是比较详细地显示值列表共享过程的流程图。在值列表共享过程中,首先,将主端值列表中的值与从端值列表中的值进行比较,并判断哪个值比较小(例如,在字母表中,哪一个位于前面)(步骤2501)。
图26是显示了在编译之后构成主端表格的项目“fan”的信息块和构成从端表格的项目“棒球队”的信息块的初始状态的视图。如图26所示,对于每一个信息块,提供共享之后的值列表(NewVL)的指示值的新的第二值列表(新的VL2),在第二值列表中,排列指出元素的位置作为处理对象(即,将提供值的位置)的指针(PUT指针)。由此指针指出的位置被称为“PUT位置”。同样,也准备指出在共享之后值位于值列表中的位置的指针(PUT指针)。
最初,将主端第二值列表(VL2)的头元素“2”指出的主端值列表(VL)的值“G-team”与由从端第二值列表(VL2)的头元素“2”指出的从端值列表(VL)的值“D-team”进行比较,并判断是否以字母顺序建立了“D-team<G-team”(参见图27)。
接下来,从比较的结果被判断为小的值(在图27中,“D-team”)存储在共享之后的值列表(newVL)中的“PUT指针”指出的位置(PUT位置)。接下来,在新的第二值列表(在图27中,从端“新的VL2”)(在步骤2502中将值存储在共享之后的值列表中),共享之后的值列表(newVL)的“PUT位置”(在图27中,“0”)存储在由“PUT指针”指出的位置(PUT位置)(步骤2503)。由于此,其中存储“PUT位置”的新的第二值列表(新的VL2)指出共享之后的值列表(newVL)的对应的元素。
接下来,其中存储“PUT位置”的第二值列表(在图27中,从端VL2)和共享之后的值列表(newVL)的“PUT位置”增大(步骤2504)。
重复如上所述的过程,直到主端第二值列表(VL2)的末尾和从端第二值列表(VL2)的末尾(参见步骤2505和步骤2506)。在图27的示例之后,如图28所示,提取主端值列表(VL2)的头元素“2”指出的值列表“VL”的元素“G-team”,另一方面,提取从端第二值列表(VL2)的第二元素“3”指出的值列表“VL”的元素“G-team”。当将两者彼此进行比较时,由于“G-team=G-team”,“G-team”存储在共享之后的值列表(newVL)的“PUT位置”,共享之后的值列表(newVL)的“PUT位置”存储在主端和从端的新的第二值列表(新的VL2)的“PUT位置”。此后,共享之后的每一个值列表(新的VL2、newVL)中的每一个值列表的“PUT位置”增大。
此后,如图29所示,提取主端第二值列表(VL2)的第二元素“3”指出的值列表“VL”的元素“T-team”,另一方面,提取从端第二值列表(VL2)的第三元素“5”指出的值列表“VL”的元素“T-team”。这里,由于“T-team=T-team”,“T-team”存储在共享之后的值列表(newVL)的“PUT位置”,共享之后的值列表(newVL)的“PUT位置”存储在主端和从端的新的第二值列表(新的VL2)的“PUT位置”。此后,每一个阵列(新的VL2、newVL)中的每一个阵列的“PUT位置”增大。如此,主端和从端新的第二值列表(新的VL2)和共享之后的值列表(NewVL)完成。
顺便说一句,在实践中,新的第二值列表(新的VL2)区域不是单独创建的,但是,第二值列表VL2可以在处理的过程中被覆盖。此外,为便于说明,确保共享之后的值列表(newVL)的区域,并排列值,然而,这不是不可缺少,如果只获取共享之后的值列表的大小并存储在存储器等等中,就足够了。
当结束值列表的共享时,连续地创建从端存在号码阵列、主端累计号码阵列,以及从端累计号码阵列(步骤2403)。下面将参考图31到34比较详细地描述此处理。首先,指定由从从端第二指针阵列(PV2)提取的元素指出的第二值列表(新的VL2)中的值。接下来,由存在号码阵列中的第二值列表(newVL2)的值指出的位置上的值增大。
在图31(a)中,指定“PV2”的头元素“2”指出的“新的VL2”的值“2”,接下来,在存在号码阵列中,存储位置号码“2”中的值从“0”增大到“1”。同样,对于“PV2”的第二元素“1”,在存在号码阵列中,存储位置号码“1”中的值从“0”增大到“1”(参见图31(b))。对于“PV2”的第三元素“0”,在存在号码阵列中,存储位置号码“0”中的值从“0”增大到“1”(参见图32(a))。对于“PV2”的第四元素“1”,在存在号码阵列中,存储位置号码“1”中的值从“1”增大到“2”(参见图32(b))。如此,可以获得从端存在号码阵列的最终形式(参见附图标记3211)。
接下来,通过使用从端存在号码阵列,创建主端存在号码阵列,以及累计号码阵列(其中,累积存在号码阵列中的元素(存在号码))。主端存在号码阵列的元素(存在号码)指出由主端第二指针阵列指定的值列表中的多少值存在于从属阵列中。
如图33所示,由主端第二指针阵列(PV2)的头元素“0”指定的新的第二值列表(新的VL2)的值为“1”。通过使用此,当对从端存在号码阵列进行参考时,由值“1”指出的位置处的元素变成“2”。相应地,“2”作为存在号码阵列的头元素来排列。此外,由主端第二指针阵列(PV2)的第二元素“1”指定的新的第二值列表(新的VL2)的值为“2”。当通过使用此对从端存在号码阵列进行参考时,由值“2”指出的位置处的元素变成“1”。相应地,“1”作为存在号码阵列的第二元素来排列。同样,由主端第二指针阵列(PV2)的第三元素“0”指定的新的第二值列表(新的VL2)的值为“1”。当通过使用此对从端存在号码阵列进行参考时,由值“1”指出的位置处的元素变成“2”。相应地,“2”作为存在号码阵列的第三元素来排列。
接下来,基于主端存在号码阵列,创建累计号码阵列。主端累计号码阵列在某些情况下被称为“投影阵列(1)”。在第四位置中排列的值“5”指出联接的表格中的所有记录的数量。此外,如图34所示,基于从端存在号码阵列,创建累计号码阵列。从端累计号码阵列在某些情况下被称为“投影阵列(3)”。此外,主端有序集合在某些情况下被称为“投影阵列(2)”。
如上所述,在创建各种存在号码阵列和累计号码阵列之后,对其中排列了从端记录号的有序集合(步骤2403)。将参考图35和36比较详细地描述有序集合的分类。从从端有序集合(即,具有从端记录号的集合)提取元素(即,记录号),随后,指定由元素(在图35(a)中,“0”)指出的第二指针阵列(PV2)的元素(在图35(a),“2”)。此外,指定由PV2的元素指出的新的第二值列表(新的VL2)的值(在图35(a)中,“2”)。接下来,在累计号码阵列中,提取由新的VL2的值指出的位置处的值(累计号码)(在图35(a),“3”),在由累计号码指出的位置处的分类之后,在有序集合的阵列中提供了有序集合的元素(记录号)。此后,累计号码增大(例如,在图35(a)中,从“3”到“4”)。
如图35(b)所示,也对于有序集合的阵列的第二元素“4”,同样,在累计号码阵列中通过第二指针阵列(PV2)和新的第二值列表(新的VL2)指定第二(存储位置号码“1”)元素(累计号码)“1”。相应地,在分类之后的有序集合的阵列中,在由累计号码“1”指出的位置排列原始有序集合的阵列的元素“4”。此后,累计号码从“1”增大到“2”。
同样,如图36(a)所示,对于有序集合的阵列的第三元素“9”,在累计号码阵列中通过第二指针阵列(PV2)和新的第二值列表(新的VL2)指定第一(存储位置号码“0”)元素(累计号码)“0”。相应地,在分类之后的有序集合的阵列中,在由累计号码“0”指出的位置排列原始有序集合的阵列的元素“9”,然后,累计号码从“0”增大到“1”。此外,如图36(b)所示,对于有序集合的阵列的第四元素“10”,在累计号码阵列中通过第二指针阵列(PV2)和新的第二值列表(新的VL2)指定第二(存储位置号码“1”)元素(累计号码)“2”。相应地,在分类之后的有序集合的阵列中,在由累计号码“2”指出的位置排列原始有序集合的阵列的元素“10”,然后,累计号码从“2”增大“3”。如此,完成从端记录号的分类。
接下来,计算主端表格的记录号和对应于联接的表格的记录号的从端表格。联接的表格的记录号的总数(记录数目)与在主端累计号码阵列(投影阵列(1))结尾处排列的值一致。相应地,在参考图31到36中说明的示例中,记录的数量变成“5”。
图37和38是显示从联接的表格的记录号计算对应的主端和从端记录号的过程(记录号计算过程)的流程图。此外,图39是显示通过对于图33到36所示的示例执行图37和38所示的过程获得的主端记录号阵列和从端记录号阵列的视图。
下面,使用在图33到36中获得的投影阵列并使用获取图39所示的记录号的阵列的情况作为示例,详细描述记录号计算过程。
首先,提取联接的表格的记录号(步骤3701)。此记录号在记录号计算过程中被称为“值A”。最初,如图40所示,从联接的表格的记录号阵列中提取头元素“0”。
接下来,在主端累计号码阵列(投影阵列(1))中,指定在步骤3701中提取的不大于元素(记录号)的最大值以及其存储位置(步骤3702)。此最大值在记录号计算过程中被称为“值B”。在图40的示例中,在投影阵列(1)中,由于不大于记录号“0”的最大值为“0”,则“值B”为“0”,指定其存储位置为“0”。
此后,在主端有序集合阵列(投影阵列(2))中,指定存储位置的元素(主端记录号),在主端记录号阵列中的对应于联接表格中的存储位置的位置排列此元素(记录号)(步骤3703)。在图40的示例中,在投影阵列(2)中,提取存储位置“0”处的值“0”,即,头值,并且这将作为如图39所示的主端记录号阵列的头元素来存储(参见附图标记3901)。如此,计算对应于联接表格的记录号的主端记录号。
接下来,取“值A”和“值B”之间的差(步骤3704)。在记录号计算过程中,此差值被称为“值C”。在图40的示例中,“值C=0”(参见4010)。
此外,在主端第二值列表(PV2)中,指定在步骤3702中指定的存储位置处的元素,此外,指定由VL2的元素指出的位置处的新的第二值列表(新的VL2)中的值(步骤3706)。在图40的示例中,在PV2中,指定存储位置“0”处的元素“0”,接下来,在新的VL2中,提取存储位置“0”处的值“1”。
此外,在从端累计号码阵列(投影阵列(3))中,指定由新的第二值列表(新的VL2)指出的位置处的元素(步骤3801)。此元素在记录号计算过程中被称为“值D”。在图40的示例中,在投影阵列(3)中,指定新的VL2的值“1”指出的位置处的元素(累计号码)“1”作为值D。
此后,将“值C”和“值D”相加(步骤3802)。在记录号计算过程中,相加的值被称为“值E”。在图40的示例中,“E=0+1=1”。
接下来,在从端有序集合阵列(投影阵列(4))中,指定由“值E”指出的位置处的元素(从端记录号),在从端记录号阵列中对应于联接表格中的存储位置处排列此元素(记录号)(步骤3803)。在图40的示例中,提取投影阵列(4)的对应于“1”的位置处的值“4”,并且这将作为图39所示的从端记录号阵列的头元素来存储(参见步骤3911)。
对联接表格的每一个记录号连续地执行步骤3701到步骤3803的过程(参见步骤3804和3805),以便计算对应于联接表格的相应的记录号的主端和从端记录号,并在记录号阵列的对应的位置排列相应的记录号。
图41到44是分别说明计算从联接表格的记录号阵列中的第二(存储位置号码“1”)到第五(存储位置号码“4”)记录号的主端和从端记录号的过程的视图。
在图41中,联接表格的记录号阵列的元素(记录号)为“1”,而在投影阵列(1)中,指定不大于“1”的最大值“0”以及其存储位置“0”(步骤3701和3702)。在投影阵列(2)中,由存储位置“0”指出的位置处的元素“0”变成主端记录号,并存储在主端记录号阵列中的对应的位置(参见步骤3703和3902)。此外,计算“值C=1-0=1”(步骤3704)。
另一方面,指定主端PV2中的存储位置“0”处的元素“0”,以及由PV2的元素“0”指出的位置处的新的VL2中的值“1”。此外,在投影阵列(3)中,指定由新的VL2的值“1”指出的元素3(累计号码)“1”(步骤3705、3706和3801)。接下来,计算“值E=1+1=2”(步骤3802),并在投影阵列(2)中,提取存储位置“2”中的元素(记录号)“10”,并存储在从端记录号阵列中的对应的位置(参见步骤3803和附图标记3912)。
在图42中,联接表格的记录号阵列的元素(记录号)为“2”,而在投影阵列(1)中,指定不大于“2”的最大值“2”以及其存储位置“1”(步骤3701和3702)。在投影阵列(2)中,由存储位置“1”指出的位置处的元素“2”变成主端记录号,并存储在主端记录号阵列中的对应的位置(参见步骤3703和附图标记3903)。此外,计算“值C=2-2=0”(步骤3724)。
另一方面,指定主端PV2中的存储位置“1”中的元素“1”,PV2的元素“1”指出的位置上的新的VL2中的值“2”。此外,在投影阵列(3)中,指定由新的VL2的值“2”指出的元素(累计号码)(步骤3705、3706和3801)。接下来,计算“值E=0+3=3”(步骤3802),并在投影阵列(3)中,提取存储位置“3”中的元素(记录号)“0”,并存储在从端记录号阵列中的对应的位置(参见步骤3803和附图标记3913)。
同样,在图43中,联接表格的记录号阵列的元素(记录号)为“3”,并在投影阵列(1)中,指定不大于“3”的最大值“3”以及其存储位置“2”(步骤3701和3702)。在投影阵列(2)中,由存储位置“2”指出的位置处的元素“9”变成主端记录号,并存储在主端记录号阵列中的对应的位置(参见步骤3703和附图标记3904)。此外,计算“值C=3-3=0”(步骤3704)。
另一方面,指定主端PV2中的存储位置“2”中的元素“0”,PV2的元素“0”指出的位置上的新的VL2中的值“1”,然后,在投影阵列(3)中,指定由新的VL2的值“1”指出的元素(累计号码)“1”(步骤3705、3706和3801)。接下来,计算“值E=0+1=1”(步骤3802),并在投影阵列(2)中,提取存储位置“1”中的元素(记录号)“4”,并存储在从端记录号阵列中的对应的位置(参见步骤3803和附图标记3914)。
此外,在图44中,联接表格的记录号阵列的元素(记录号)为“4”,并在投影阵列(1)中,指定不大于“4”的最大值“4”以及其存储位置“2”(步骤3701和3702)。在投影阵列(2)中,由存储位置“2”指出的位置处的元素“9”变成主端记录号,并存储在主端记录号阵列中的对应的位置(参见步骤3703和附图标记3905)。此外,计算“值C=4-3=1”(步骤3704)。
另一方面,指定主端PV2中的存储位置“2”处的元素“0”,以及由PV2的元素“0”指出的位置处的新的VL2中的值“1”,然后,在投影阵列(3)中,指定由新的VL2的值“1”指出的元素(累计号码)“1”(步骤3705、3706和3801)。接下来,计算“值E=1+1=2”(步骤3802),并在投影阵列(2)中,提取存储位置“2”中的元素(记录号)“10”,并存储在从端记录号阵列中的对应的位置(参见步骤3803和附图标记3915)。
图45是显示主端表格的记录号阵列和作为处理的结果获得的从端表格的记录号阵列的视图,以及联接的视图等等。根据主端表格的记录号阵列3900(其记录号),从主动原始表格(棒球爱好者俱乐部成员原始表4501)提取记录,以便获得其中保留了原始表的顺序的表格(棒球爱好者俱乐部成员表格4521)。另一方面,根据从端表格的记录号阵列3910(其记录号),从从端原始表(比赛时间表原始表4511)提取记录,以便可以获得表格(比赛时间表4531)(使该表格对应于主端记录)。
如上所述,根据此实施例,也是在联接的过程中,可以使每一个投影阵列与第二值列表相同。此外,共享值列表(共享新的值列表)至多只限于通过将主端第二值列表和从端第二值列表相加所获得的大小。相应地,当指定投影阵列中的元素或指定了第二值列表的值时,可以缩短处理时间。
本发明不仅限于上述实施例,在权利要求书中列举的本发明的范围内可以作出各种修改,毫无疑问,它们也包括在本发明的范围内。
例如,在实施例中,作为聚合过程,虽然描述了创建存在号码阵列,以及提取存在号码阵列中的元素的情况,但是,本发明不仅限于此。一般而言,聚合基本上被分成“0或大于0的多个维”和“0或1的度量”。例如,当考虑“性别x每一个重量的重量的平均值”,维度是“二维”(“性别”和“重量”),度量是“重量”。在度量为“0”的情况下,元素的数量变成通过聚合获得的值(聚合值)。在此情况下,存在号码阵列中的元素变成聚合值。此外,还可以将总和、最大值、最小值、平均值等等作为度量。
作为维,可以有各种类别。例如,在年龄中,可以使0到9岁小于10岁,并可以使其成为一个类别。这里,准备与值列表具有相同元素数量的分类号阵列,在分类号阵列中,将“0”作为对应于值列表的值(年龄)“0”到“9”的位置处的元素排列,“1”作为另一个元素排列。当然,基本上,可以将一个类别指定到可以被区别的每一个值。即,在年龄中,在分类号阵列中,例如,值“0”、“1”、“2”...可以按顺序排列。在聚合中,获取具有与某一分类号相关的记录号的集合,对于从记录号指定的值,执行预先确定的操作。由于此,可以获取诸如总和、最大值和最小值之类的各种聚合值。也是在此实施例中,提供与第二值列表具有一样大小的分类号阵列,当指定了对应于类别的值时,可以获取各种聚合值。此外,在实施例中,创建了第二指针阵列和第二值列表,以便压缩用于检索、聚合、分类、联接等等的阵列的量,由于此,所需的存储区缩小,并且处理时间缩短。然而,对此没有限制,可以使用在创建了第二指针阵列并且第二值列表的中间阶段创建的项目值号码阵列。在此情况下,代替第二指针阵列(PV2),可以使用项目值号码阵列,代替第二值列表(VL2),可以使用原始值列表(VL)。即,在上述实施例中,例如,为了指定值列表中的项目值,按照有序集合阵列中的元素、第二指针阵列中的元素、第二值列表中的元素,以及值列表中的元素(项目值)的顺序指定元素。另一方面,在修改的示例中,可以按照有序集合阵列中的元素、项目值号码阵列中的元素,以及值列表中的元素(项目值)的顺序来指定元素。
此外,也是在检索、聚合、分类、联接等等的过程中,作为其中可以对值进行参考的阵列,代替第二指针阵列,可以使用项目值号码阵列,代替第二值列表,可以使用原始值列表。
此外,在上述实施例中,将预先确定的程序读取到通用计算机系统10中,并执行程序,以便实现多个表格格式数据的联接和涉及联接的表格格式数据的过程。然而,本发明不仅限于此,毫无疑问,可以采用一种结构,以便专用于数据库处理的单板计算机连接到诸如个人计算机之类的通用计算机系统,并且单板计算机可以执行该过程。相应地,在本说明书中,装置不一定表示物理装置,而包括通过软件和/或硬件实现相应的装置的功能的情况。此外,一个装置的功能可以通过两个或更多物理装置来实现,或者两个或更多装置的功能可以通过一个物理装置来实现。
根据本发明,可以提供这样的方法,其中,使阵列与子集的大小或根据此受限的值列表的子集的大小一致,实现对应于子集的大小的处理时间的缩短。