提供关系数据的一致性层次抽象化的制作方法

文档序号:6428182阅读:194来源:国知局
专利名称:提供关系数据的一致性层次抽象化的制作方法
技术领域
本发明涉及在关系数据库中储存根据一定层次进行组织的信息,尤其涉及管理用于捕捉该层次的元数据的技术。
背景技术
人们倾向于按类别组织信息。在其中组织信息的类别是通常相对于彼此以某种形式的层次进行组织的类别本身。例如,个体的动物属于种,种属于属,属属于科,科属于目,目属于纲。
随着计算机系统的出现,储存电子信息的技术已经得到发展,很大程度上反映了人们对分层组织的需求。例如,通常采用基于分层组织原理实现传统计算机文件系统。具体地,通常的文件系统具有按层次设置的目录以及储存在目录中的文档(document)。理想地是,目录之间的层次关系反映了已经赋予目录的含义之间的某种直观关系。同样,理想地是,每个文档基于在文档的内容和用来储存该文件的目录被赋予的含义之间的某种直观关系被储存在目录中。
图1示出了典型的文件系统的实例。示出的文件系统包括按层次排列的多个目录。在目录中储存有两个文档118和122。特别地,文档118和122的名称都是“Example.doc”,分别储存在目录116和124中,这两个目录的名称分别为“Word”和“App4”。
在目录层次中,目录116是名称为“Windows”的目录114的子目录,目录114是目录110的子目录。类似地,目录124是名称为“VMS”的目录126的子目录,目录126是目录110的子目录。目录110被称之为“根”目录,原因在于,该目录是所有其他目录起源的目录。在很多系统中,符号“/”用来指示根目录。
当按层次组织电子信息时,根据通过分层结构到包含该数据项的实体的“路径”可以查找信息的每一数据项。在一个分层文件系统中,到数据项的路径由根目录开始,沿着目录的层次结构向下进行,最终到达包含感兴趣的数据项的目录。例如,到文档118的路径依次包括目录110、114、以及116。
分层存储系统通常允许不同的数据项具有相同的名称。例如,在图1所示的文件系统中,文档118和122的名称都是“Example.doc”。从而,为了明确地识别给定文档,除了文档名称之外还有其它要求。
一种用来识别和定位储存在分层存储系统中的信息的特定数据项的简便方法是通过使用“路径名称”。路径名称法是一种根据通过分层结构到数据项的路径来唯一识别数据项的简便方法。路径名称包括一序列名称。在文件系统的情况下,在该名称序列中的每个名称都是“文件名”。术语“文件名”指的是目录名称和文档的名称,原因在于,目录和文档均被当作“文件”。
在文件系统中,给定路径名中的文件名序列开始于根目录的名称,包括沿着从根目录到感兴趣的数据项的路径的所有目录的名称,结束于感兴趣的数据项的名称。通常,要遍历的目录列表使用某种分隔符号(例如,“/”、“\”、或“;”)连接起来,以产生路径名称。因此,文档118的路径名称是/Windows/Word/Example.doc,而文档122的路径名称是/VMS/App4/Example.doc。
目录(文件)及其所包含的内容之间的关系随着分层组织系统的类型的不同而显著变化。在多种实施方式(例如Windows和DOS文件系统)所采用的一种模式中,需要每个文件刚好具有一个父,形成树状结构。在更复杂的模式中(例如在使用硬连接的UNIX文件系统中),分层结构采用定向图的形式,文件能够具有多个父。
和用来组织电子信息的分层法相反,关系数据库将信息储存在由行和列组成的表中。通过唯一的RowID来识别每行。每列代表了记录的属性,每行代表了特定的记录。通过向管理数据库的数据库管理系统(DBMS)提交查询,从数据库中获取数据。查询必须遵循数据库管理系统支持的数据库语言。结构化查询语言(SQL)是很多现有数据库管理系统支持的数据库语言的例子。
每种储存系统都有优点和缺点。分层组织的储存系统简单、直观、易于实现,是多数应用程序使用的标准模式。不幸地是,简单的分层组织没有提供复杂数据检索操作所需要的支持。例如,必须检查每一目录的内容,从而检索某天创建的具有特定文件名的所有文档。由于必须搜索所有文件,分层组织不便于检索过程。
关系数据库系统非常适于储存大量的信息并以非常灵活的方式存取数据。相对于分层组织系统而言,即使符合复杂的搜索条件的数据也可容易并高效地从关系数据系统中检索到。然而,定制并向数据库服务器提交查询的进程却没有仅遍历分层目录直观,并且超出了很多计算机用户所掌握的技术程度。
过去,分层组织系统和关系组织系统以不同的相不兼容的方式实现。然而,通过一些额外程序,关系组织系统能够模拟分层组织系统。当需要关系系统的储存能力和灵活性,同时又需要分层系统的直观性和普遍性时,尤其需要这种模拟。


通过实例说明本发明,并非用于限制本发明,在附图中,相同的标号代表相同的部件,其中图1示出分层文件系统的框图;图2示出和源相关联的节点层次的框图;图3是根据本发明的实施例的能够被用来捕捉图2中示出的层次的关系表的框图;图4示出根据本发明的实施例的分层结构和内容结构的框图;图5是关系表的框图,其中通过储存在相应于叶节点的行中的值示出信息层次的非叶结点;图6是储存在图5的表中的数据隐含的层次的框图;以及图7是可以实施本发明的实施例的系统的框图。
具体实施例方式
本发明描述了用于在关系数据库系统的结构中储存属于信息层次的源的方法和系统。在以下的描述中,出于说明目的,为了提供对本发明的透彻理解而阐明了许多具体细节。然而,很显然,即使没有这些特定细节,本发明也能实施。在其它实例中,为了避免对本发明不必要的模糊,以方框图示出已知结构和装置。
功能概述本发明提供了多种便于在关系数据库系统中管理分层数据的技术。根据一个实施例,将用来储存属于层次的源的存储结构(“内容结构(content structure)”)与用来储存捕捉关于层次的数据的存储结构(“分层结构(hierarchy structure)”)分开。
在一些情况下,在分层结构之外维持的现有数据中已经明确地和隐含地反映了层次。这样的层次被称作“先有层次”。在这些情况下,需要在分层结构中捕捉先有层次,以便分层结构可以被用作到源的可选访问路径。例如,根据路径信息,可用分层结构访问源。而且,即使当通过直接向内容结构发出查询来访问源时,访问操作也能获得所有特征的益处,并访问和分层结构相关的结构,例如,任何安全机制和任何索引,安全机制内建在分层结构中,索引被建立以增强根据源在层次中的位置来访问源的操作性能。
每个先有层次都与以下数据关联,(1)存在于分层结构之外的数据,以及(2)反映了先有层次的数据。这里将这样的数据称作“外部层次定义”。为了在分层结构中捕捉先有层次,必须根据外部层次定义将数据(此处指的是“内部层次定义”)添加到分层结构中。
已经捕捉先有层次后,还存在两组反映层次的独立数据外部层次定义和内部层次定义。改变任一种定义都改变了层次。由此,为了维持层次的一致性反映,响应于对外部层次定义做出的改变,必须改变内部层次定义。此处描述了用于维持两种层次定义之间的一致性的多项技术。
在关系数据库系统中储存分层数据图2示出实例中使用的层次200的框图,此处给出的实例是为了便于理解对本发明实施例。层次200包括八个节点。在该层次中最高等级的节点被称作“根”节点。每个分支的末端的节点是“叶”节点。根节点和叶结点之间的节点是“中间”节点。在示意性层次中,节点1、2、以及3是中间节点,节点4、5、6、以及7是叶节点。
在信息层次中,节点对应于信息。通常,和每个节点相关联的信息项将有某种形式的名称和某种类型的内容。例如,在相应于分层文件系统的层次中,节点通常相应于文件(这里,“文件夹”或“目录”是文件的一种类型)。每个这样的文件将具有名称 以及某种形式的内容。
在很多情况下,在层次中和节点相关的名称不必是唯一的。在图2示出的实例中,节点1和节点7都具有名称“a”。尽管它们的名称相同,但它们却是分别的不同的节点,在层次中占有不同的位置,与完全不同的内容相关联。
一种规格适用全部(ONE-SIZE-FITS-ALL)图3是可用来代表关系数据库系统中的层次200的两张表(源表302和链接表350)的框图。源表302包括用于层次中的每个节点的行。用于给定结点的行包括与给定节点关联的名称以及和给定节点关联的数据。例如,行304相应于节点1,包含和节点1关联的名称“a”和数据306。源表302是一种规格适用全部的方法的实例,其中,在层次中用于所有数据源的数据被储存在相同的结构中,而不考虑这些源的数据类型。在源表302的实例中,用来储存源数据内容的数据结构是单列308。用于该列的数据可以是例如LOB(Large Object,大对象)型的,诸如二进制LOB(BLOB)或字符LOB(CLOB)。
链接表350包括用于层次200中的每对父-子关系的一行。父列378持有表示父-子关系的父的值,子列380持有表示父-子关系的子的值。例如,行352表示根节点是节点1的父。同样,行354和行356分别表示节点1是节点2和节点3的父。
将分层结构与内容结构分开表302和350以关系格式捕捉层次200的所有信息。但是,如果与层次200关联的源数据的内容使用由源表302代表的一种规格适用全部的方法储存,则不可能完全利用关系数据库系统的能力。特别地,源表302包括用于将和节点关联的资源内容储存在层次200中的单列。当和节点关联的源数据是简单的数据类型(例如,字符串或整型)时,这样的储存格式是足够用的。但是,在很多情况下,在层次中和节点关联的源数据是复杂的数据类型,例如,复杂记录或XML文档。在这样的情况下,源数据在单列中储存制约了用户对内容进行复杂搜索的能力。即使当该数据库系统提供了对在单列中搜索复杂的源数据分量的支持时,这样的搜索性能也会受到损害。
根据本发明的一个实施例,通过将和节点相关联的源内容和捕捉分层信息的表分开储存,克服了与储存和搜索属于信息层次的复杂源数据相关的问题。
例如,图4示出了与源表302类似的源表402。然而,源表402和源表302的不同之处在于源表402不再在每个源数据的行中储存该源数据的内容。当然,源表302中的DATA列被源表402中的DATA TYPE列以及DATA REF列这两列代替。
对于源表402中的每行,DATA TYPE列储存指示和在行中识别的节点相关联的源类型的数据。例如,行404相应于层次200的节点1。行404的DATA TYPE列示出和节点1关联的源的类型为T1。同样,行406相应于节点3,且行406的DATA TYPE列指示和节点3相关联的源的类型为T5。
对于源表402的每行,DATA REF列储存着和在行中识别的节点相关联的源的参考信息。如此处使用的,术语“参考”通常指在数据系统中用来定位其他数据的任何数据。例如,DATA REF列能够储存指针、或更复杂的信息,诸如Oracle数据库系统支持的“ref”数据类型。本发明并不限于用于定位和层次中的节点相关联的源的任何特定类型的数据。
与分层结构分开储存源内容有很多益处,分层结构用来捕捉并反映源数据之间的层次关系。例如,由于源数据与源表402分开储存,所以可以根据源数据的属性定义其中储存有源数据的内容结构。例如,和节点1关联的源数据是雇员记录,该源数据被储存在具有用于每一雇员记录字段的列的表450中。另一方面,和节点3关联的源数据是公司记录,该源数据被储存在具有用于每一公司记录字段的列的表456中。
另外,因为分层结构(例如,表402和350)和内容结构(例如,表450和456)分开,所以可以为现有的关系数据建立分层体系,对数据容量的影响很小,并且不需要改变用于访问该数据的现有询问。例如,员工表450可以在决定将信息安排进层次200很早之前就已经存在。同样,在决定之前,可以已经为访问表450已经定义了很多询问和视图。因为能够创建表350和402而不影响表450的现有结构,可以建立用于层次200的含有储存在表450中的资源的分层结构,而不需要访问表450或用于改变表450现存查询和视图。
根据一个实施例,可以以使用用于一些资源的一种规格适用全部的方法来实现资源表402,资源表402还包括对其他资源内容的参考。例如,虽然和节点1关联的资源内容可以被储存在表450中,但是,和节点2关联的资源内容可以继续储存在表402的单个的LOB列中。资源的数据类型,如在DATA TYPE列中示出的,可以被数据库服务器用作确定是否在资源表402的LOB列或一个或多个分离的表中储存资源内容的一个因素。
先前存在的层次表450最初就可以完全孤立于分层结构存在,诸如资源表402和链接表350。因此,分层结构最初没有捕捉关于表450中的数据可以属于的任何数据结构的任何信息。然而,储存在这样的分层结构外部的信息可以明确地或隐含地在表450的各行之间建立层次。
在表450的情况下,通过包含在EMD_ID和MANAGER列中的信息隐含地建立这样的层次。特别地,表450的EMD_ID和MANAGER列中的数据建立一隐含的“管理层次”,其中和emp_id1关联的员工直接在和emp_id 3关联的员工之下;和emp_id 2关联的员工直接在和emp_id 1关联的员工之下;以及和emp_id 3关联的员工没有任何管理者(从而是管理层次的根节点)。
在现在的实例中,管理层次是先前存在的层次且储存在EMD_ID和MANAGER列中的数据包括外部层次定义。根据管理层次,使用分层结构访问表450中的数据,必须在分层表中捕捉关于管理层次的信息。用于捕捉关于先前存在的数据结构的信息的多种技术将在此后作详细描述。
捕捉先前存在的层次根据一个实施例,捕捉先前存在的层次信息涉及(1)在源表中储存一列用于先前存在的层次中的每个节点,以及(2)在分层结构(例如,分层索引)中储存捕捉先前存在的层次的节点之间的父-子关系的信息。另外,如果先前存在的层次被嫁接进已经在分层结构中反映的较大的层次中,那么,必须将元数据增加到分层结构中,以将先前存在的层次的根节点建立为较大数据结构中的节点的子。
执行以下任务的操作是相当直接的(1)在资源表中储存用于先前存在的层次中的每个节点的行,以及(2)将用于嫁接先前存在的层次的节点的元数据增加给较大的层次。另一方面,根据外部层次定义的属性,可以改变用于捕捉先前存在的层次的节点之间的父-子关系的技术。例如,如果SQL关系定义父-子关系,那么,采用使用合适的connect-by子句的SQL命令可以捕捉父-子信息。作为选择,如果根据层次相关的字段,父-子关系是隐含的,那么,采用列举法可以捕捉父-子信息。将在下面详细描述connect-by和列举法。
先前存在的层次的自动捕捉根据一个实施例,数据库被配置,以响应于接收关于先前存在的层次的某种信息,自动执行先前存在层次捕捉操作。具体而言,根据一个实施例,数据库被配置,以响应于接收(1)用于识别和先前存在的层次关联的内容结构的信息和(2)用于指示在特定内容结构中包含的资源之间建立父-子关系的标准的连接标准,自动地执行先前存在的层次捕捉操作。
出于说明目的,假定希望捕捉和表450关联的管理层次。在这种情况下,响应于接收(1)识别表450的数据和(2)指示表450的给定行是EMD_ID等同于在给定行中规定的MANAGER的行的子,能够执行自动捕捉操作。可以根据这一信息用来自动捕捉先前存在的层次的技术将在下面描述。
使用CONNET BY捕捉父-子关系如前边所提到的,一些先前存在的层次的父-子关系由SQL关系示出。例如,通过包含在表450的MANAGER列中的数据建立表450中的记录的管理层次。在这种情况下,先前存在的层次的父-子关系可以通过使用采用合适的CONNECT BY子句的数据库命令来捕捉。
例如,管理层次的自动捕捉操作通过以下动作执行(1)在资源表402中创建行,以代表对应于表450中的行的节点;以及(2)通过执行包括CONNECT BY子句的SQL语句产生关于那些节点之间的分层关系的元数据。资源表402中代表用于表450的特定行的节点的每行都具有对该特定行的参考。例如,资源表402的行404代表用于表450的行420的节点,从而包括对行420的参考。
关于生成和先前存在的层次相关联的路径信息,假设表450被命名为‘EMP’并被定义以包括下述列(emp_id integer,first_namevarchar2(80),last_name varchar2(80),age integer,manager integer)。在这些情况下,使用CONNECT BY关系(例如,‘START WITHmanager IS NULL CONNECT BY PRIOR manager=emp_id’)生成条目树(根据数据,可变深度)。在这种情况下,用户通常也能够指定列值以用作路径元素的名称(即‘first_name’)。
使用列举法捕捉先前存在的层次在一些情况下,可以通过相互具有层次关系的字段隐含定义先前存在的层次。例如,考虑包含一个许诺销售的产品列表的关系表。例如,这样的关系表可以如下定义CREATE TABLE PRODUCT_INFO(manufacturer VARCHAR2(128)product_type VARCHAR2(48)product_name VARCHAR2(80)sku NUMBER);这样的表可被填充,例如,如图5中的表500所示出的。在该实例中,层次被隐含在MANUFACTURER、PRODUCT_TYPE、PRODUCT_NAME、以及SKU字段之间的分层关系中。特别地,每个SKU值是和特定的PRODUCT_NAME值关联的很多潜在的SKU值中的一个。每个PRODUCT_NAME值是和特定的PRODUCT_TYPE值关联的很多潜在的PRODUCT_NAME值中的一个。每个PRODUCT_TYPE值是和特定的MANUFACTURER值关联的很多潜在的PRODUCT_TYPE值中的一个。
在表500包含的值中隐含的“产品目录层次”由图6说明。参看图6,表500的四个分层相关字段中的每个都对应于分层等级,其中,MANUFACTURER字段是最高等级(仅在根节点之下),SKU字段是最低等级(代表“叶”节点)。
当以这种方式定义先前存在的层次时,可以使用列举法来捕捉父-子关系。特别地,包含卷入层次中的列举值的一列或多列被用来生成“资源集节点(collection node)”。每列的每个值都是在层次的某一深度的新“资源集”,每列都被用于层次的新等级。最后给出的列被当作文件,而非资源集。
特别地,通过对包含在MANUFACTURER列中的值执行DISTINCT操作,可以建立层次的第一等级中的节点。通过连接用于所有行的MANUFACTURER和PRODUCT_TYPE值,并对连接后的产生的值执行DISTINCT操作,可以建立层次的第二等级中的节点。同样,通过连接用于所有行的MANUFACTURER、PRODUCT_TYPE、以及PRODUCT_NAME值,并对连接后的产生的值执行DISTINCT操作,可以建立层次的第三等级中的节点。最后,通过连接用于所有行的MANUFACTURER、PRODUCT_TYPE、PRODUCT_NAME、以及SKU值,并对连接后的产生的值执行DISTINCT操作,可以建立层次的叶等级。
假设给定等级的节点的名称并不是唯一的,执行上述的连接操作。例如,假设PRODUCT_TYPE值PD1的产品能够具有和PRODUCT_TYPE值PD2的产品相同的名称。然而,如果PRODUCT_NAME列的名称被要求是唯一的,那么,可以通过对PRODUCT_NAME列的值简单地执行DISTINCT操作,获得在层次的PRODUCT_NAME级的节点。
应当注意,通过储存在容纳用于节点的资源的关系表行中的值代表每个叶节点的相关路径名称。例如,行502(图5)容纳用于节点602(图6)的资源和对应于相关路径/MF1/PD2/PN3/SKU3的行502的列中的值。因此,当寻找特定节点(例如MF1/FD2)的子时,用于该节点的列被隐含地用来选择子(因此,用来寻找MF1/PD2的子的SQL将是‘SELECT FROM PRODUCT_INFO WHEREmanufacture=‘MF1’and‘product_type’=‘PD2”)。
维持一致性如上所述,在先前存在的层次已经被捕捉后,存在反映该层次的两组独立数据外部层次定义和内部层次定义。为了维持层次的一致性反映,响应于对外部层次做出的改变,必须修改内部层次定义。
例如,一旦捕捉,和表450关联的管理层次反映在(1)储存在分层结构的数据和(2)表450的EMP_ID列中的数据和表450的MANAGER列中的数据之间的关系中。因此,对管理层次的改变可以通过以下方式完成(1)改变表450的EMP_ID或MANAGER列中的值或(2)改变分层结构中的值。为了维持分层结构中的数据和EMP_ID或MANAGER列中的数据的一致性,需要建立机制,使得对一组数据的改变会自动引起对另一组数据的相应修改。
根据一个实施例,改变表450,以做出作为对资源表402的巡视的一部分的某些检查(例如,安全性检查),也可以做出这些检查用于遍历表450。在表450上创建数据操纵语言(Data ManipulationLanguage,DML)触发器,以便对表450进行的插入、更新、或删除操作在分层结构的数据中反映。例如,如果需要删除表450中的行,则检查确保将被删除的行不会引起任何“悬空行(danglingrows)”。例如,在管理层次中,和行420关联的节点是和行422关联的节点的父。因此,删除行420将使行422和管理层次分开,从而造成行422“悬空”。因为悬空的行不再是层次的一部分,删除行422将导致从分层结构中删除和行420及行422相关的数据。
同样,当将行插入表450时,分层结构的信息将被更新从而为创建的新路径增加一个条目。注意,当插入新行时,则可能允许访问此前不能访问的子树。例如,假设删除行420后,再次插入行420。通过插入行420,行422被隐含地嫁接回管理层次。因此,行420的插入导致分层结构中的数据被更新,以包含用于行420和行422的节点和路径。
为维持内部层次定义和外部层次定义之间的一致性,需要执行精确的操作,这些精确的操作随多种因素而变化。必须做出什么行动的影响以维持一致性的一种因素是外部层次定义的属性。例如,根据SQL关系对表450应用管理层次,而根据列举对表500应用管理层次。当删除和管理层次中的叶节点关联的行时,通常,相应于该节点的资源表中的行也将被删除。然而,如果删除和产品目录层次的叶节点关联的行,则(1)删除资源表中相应于该节点的行,以及(2)确定被删除的叶节点的父是否有任何剩余的子。如果被删除的叶节点的父没有任何剩余的子。则删除资源表中相应于该节点的行。如果删除相应于父节点的行,则确定该父节点的父是否有任何剩余的子。如果该父节点的父没有任何剩余的子,则同样删除资源表的和父节点的父相关联的行。重复这一过程,删除所有无子非叶节点。
同样,对于涉及删除表中的所有行的丢弃和截尾操作,执行类似于上述用于删除操作的用于维持一致性的操作。
在上述实例中,DML触发器根据在内容结构上执行的插入、更新、以及删除操作执行对分层结构中的数据的更改。可以实现例如“INSTEAD OF”触发器的DML触发器。然而,为了保证一致性,同样必须创建触发器以保证对层次中的数据进行的插入、更新、以及删除操作导致对内容结构中的数据进行相应的操作。
硬件概述图7是一个描述了实现本发明的具体实施例的计算机系统700的框图。计算机系统700包括总线702或其它用于传送信息的通信装置,以及与总线702连接用于处理信息的处理器704。计算机系统700还包括一个主存储器706,例如随机存取存储器(RAM)或其它动态存储设备,与总线702连接,用于储存信息和将被处理器704执行的指令。主存储器706也可以被用来储存临时变量或在处理器704执行指令的过程中产生的中间变量。计算机系统700还包括和总线702相连的只读存储器(ROM)708或者其它静态存储设备,用于储存静态信息和用于处理器704的指令。提供了存储设备710,例如磁盘或光盘,连接至总线702,用于储存信息和指令。
计算机系统700可以通过总线702连接至显示器712(例如阴极射线管(CRT)),用于显示信息给计算机用户。一包括字母和数字以及其它键的输入装置714,连接至总线702,用于将信息和指令选择传送给处理器704。另一种类型的用户输入装置是光标控制器716,例如鼠标、轨迹球、或者光标方向键,用于传送方向信息和命令选择给处理器704,并用于控制光标在显示器712上的移动。输入装置通常具有两个轴的两个自由度,一个是第一轴(例如x),一个是第二轴(例如y),这就允许该装置在平面上确定位置。
本发明涉及计算机系统700的应用,用于实施此处所描述的技术。根据本发明的一个实施例,响应于执行包含在主存储器706中的一个或多个序列的一个或多个指令的处理器704,可以通过计算机系统700实现这些技术。这些指令可以从另一计算机可读介质(例如存储装置710)读到主存储器706中。执行包含在主存储器706中的指令序列,使处理器704执行此处描述的处理步骤。在可选实施例中,硬件连接电路可以被用来代替或与软件指令结合来实现该发明。因此,本发明的实施例不被限制在任何特定的硬件电路与软件的结合中。
在这里用到的术语“计算机可读介质”指的是参与提供指令给处理器704用于执行的任何介质。这样的介质可能有多种形式,包括但不限于非易失性介质、易失性介质、传输介质等。非易失性介质举例来说包括光盘或磁盘,如存储设备710。易失性介质举例来说包括动态存储器,例如主存储器706。传输介质包括同轴电缆、铜线、或光纤,也包括构成总线702的布线。传输介质也可以采用声波或光波的形式,例如无线电波中产生的声波和红外数据通信中的光波。
计算机可读介质的通常形式举例来说包括软盘、软磁盘、硬盘、磁带、或其它任何磁性介质、CD-ROM、其它任何光学介质、穿孔卡片、纸带、其它任何具有孔图案的物理介质、只读存储器(RAM)、可编程只读存储器(PROM)、以及可擦写可编程只读存储器(EPROM)、闪存(FLASH-EPROM)、任何其它记忆芯片或卡式磁带、下文所述的载波信号、或者其它任何计算机可以读取的介质。
各种形式的计算机可读介质都可以被用来将一个或多个序列的一个或多个指令传送给处理器704用于执行。例如,指令首先装载到远端计算机的磁盘上。这台远端计算机可能把这些指令加载到其动态存储器中,通过调制解调器在电话线上传送指令。计算机系统700本地的调制解调器能够通过电话线接收数据,并使用红外发射器把数据转换成红外信号。红外探测器可以接收红外信号中携带的数据,合适的电路可以把数据传到总线702上去。总线702把数据加载到主存储器706中,处理器704再从主存储器中取回数据并执行指令。主存储器706接收到的指令可以在处理器704执行前或执行后有选择地储存在存储设备710上。
计算机系统700还包括一个与总线702相连的通信接口718。通信接口718提供了一种与连接到局域网络722的网络链路720的双向数据通信。例如,通信接口718可以是综合服务数字网(ISDN)卡,或者是调制解调器,向相应类型的电话线提供数据通信连接。作为另一实例,通信接口718可以是局域网(LAN)卡,提供到兼容的局域网的数据通信连接。也可以实现无线连接。在任何实现方式中,通信接口718都能够发送和接收电信号,电磁信号、或光信号,这些信号承载着代表各种信息的数字数据流。
网络链路720一般通过一个或多个网络向其它数据设备提供数据通信。例如,网络链路720可以提供通过局域网722至主机724或由互联网服务提供商(ISP)726操作的数据装置的连接。ISP 726反过来又通过万维分组数据通信网络,现在通常称为“互联网”728,提供数据通信服务。局域网722和互联网728都使用承载数字数据流的电信号、电磁信号、或光学信号。经过各种网络的信号、网络链路720上的信号、以及经过通信接口718的信号,承载着送到和来自计算机系统700的数字数据,是传输信息的载波的示范形式。
计算机系统700可以通过网络、网络链路720、以及通信接口718发送消息和接收数据,包括程序代码。在互联网实例中,服务器730可以通过互联网728、ISP 726、局域网722、和通信接口718传送被请求的应用程序代码。
当接收到代码后,接收到的代码可以由处理器704执行,或储存在存储装置710或其他非易失性存储器中用于随后执行。以这种方式,计算机系统700可以获得载波形式的应用代码。
在上述说明书中,已经参考具体实施例说明了本发明。然而,显然可以对其做出各种变化和改变,而不背离本发明宽广的精神和范围。因此,说明书和附图仅用来说明而非限定本发明。
权利要求
1.一种用于管理数据库系统中的数据的方法,包括以下步骤接收用于识别储存有属于信息层次的资源的一个或多个关系表的数据,其中所述一个或多个关系表中的某种数据起到在所述资源之间建立层次关系的外部层次定义的作用;通过执行以下步骤,捕捉所述层次中的层次关系执行相对于所述一个或多个关系表的一个或多个查询,以检索所述某种数据;以及根据所述某种数据,在从所述一个或多个关系表中分离出来的一个或多个层次结构中储存作为内部层次定义的用于捕捉所述信息层次的信息。
2.根据权利要求1所述的方法,其中,所述储存用于捕捉所述信息层次的信息的步骤包括在资源表中储存用于所述信息层次中的每个节点的行。
3.根据权利要求1所述的方法,其中,所述储存用于捕捉所述信息层次的信息的步骤包括在一个或多个层次结构中储存表示所述资源之间的父-子关系的信息。
4.根据权利要求1所述的方法,其中所述信息层次中的资源相应于关系表中的行;以及用储存在所述关系表的两个或更多个列中的值表示所述资源之间的父-子关系。
5.根据权利要求4所述的方法,其中,所述执行一个或多个查询的步骤包括执行用于指定所述两个或更多个列之间的CONNECT BY关系的查询。
6.根据权利要求5所述的方法,其中所述两个或更多个列包括含有用于表示关系中的子的数据的第一列和含有用于表示所述关系中的父的数据的第二列;以及所述执行查询的步骤包括执行包含如下表述形式的查询START WITH x IS NULL CONNECT BY PRIOR x=y;其中,x代表所述第二列,y代表所述第一列。
7.根据权利要求1所述的方法,其中和所述信息层次中的叶节点关联的资源相应于关系表的行;以及将在所述信息层次中与位于给定叶节点之上的非叶节点相关联的值储存在相应于所述给定叶节点的行中。
8.根据权利要求7所述的方法,其中将所述和非叶节点关联的值储存在所述关系表的一个或多个列中;以及所述储存用于捕捉所述信息层次的信息的步骤包括在资源表中将来自相应于所述信息层次的叶节点的行的用于每个不同值的行储存到所述一个或多个列中。
9.根据权利要求1所述的方法,还包括以下步骤建立触发器,以响应于对构成所述外部层次定义的数据做出的改变,更新构成所述内部层次定义的数据。
10.根据权利要求1所述的方法,还包括以下步骤建立触发器,以响应于对构成所述内部层次定义的数据做出的改变,更新构成所述外部层次定义的数据。
11.根据权利要求1所述的方法,还包括自动维持所述外部层次定义和所述内部层次定义之间的一致性的步骤。
12.根据权利要求11所述的方法,其中所述自动维持一致性的步骤包括以下步骤检测对所述一个或多个表的操作何时删除和所述信息层次中的节点关联的资源;响应于检测所述操作,自动执行以下步骤在资源表中删除相应于所述节点的行;确定从所述信息层次中除去所述节点是否导致一个或多个其他节点悬空;以及如果从所述信息层次中除去所述节点导致一个或多个其他节点悬空,那么,在所述资源表中删除相应于所述一个或多个其他节点的行。
13.根据权利要求11所述的方法,其中所述自动维持一致性的步骤包括以下步骤检测对所述一个或多个表的操作何时删除和所述信息层次中的叶节点关联的资源;响应于检测所述操作,自动执行以下步骤在资源表中删除相应于所述节点的行;确定从所述信息层次中除去所述叶节点是否使所述叶节点的父节点没有剩余的子节点;以及如果从所述信息层次中除去所述叶节点使所述叶节点的父节点没有剩余的子节点,那么,在所述资源表中删除相应于所述父节点的行。
14.根据权利要求11所述的方法,其中所述自动维持一致性的步骤包括以下步骤检测对所述一个或多个表的操作何时插入与所述信息层次中的节点关联的资源;响应于检测所述操作,自动执行以下步骤在资源表中插入相应于所述节点的行;确定来自所述信息层次的所述节点的增加是否导致将所述节点的一个或多个子节点增加给所述信息层次;以及如果来自所述信息层次的所述节点的增加导致将所述节点的一个或多个子节点增加给所述信息层次,那么在所述资源表中插入相应于所述一个或多个子节点的行。
15.一种承载用于管理数据库系统中的数据的指令的计算机可读介质,所述指令包括用于执行以下步骤的指令接收用于识别储存属于信息层次的资源的一个或多个关系表的数据,其中所述一个或多个关系表中的某种数据起到用于在所述资源之间建立层次关系的外部层次定义的作用;通过执行以下步骤捕捉所述层次中的层次关系执行相对于所述一个或多个关系表的一个或多个查询,以检索所述某种数据;以及根据所述某种数据,在从所述一个或多个关系表分离出来的一个或多个层次结构中储存作为内部层次定义的用于捕捉所述信息层次的信息。
16.根据权利要求15所述的计算机可读介质,其中储存用于捕捉所述信息层次的信息的步骤包括在资源表中储存用于所述信息层次中的每个节点的行。
17.根据权利要求15所述的计算机可读介质,其中储存用于捕捉所述信息层次的信息的步骤包括在一个或多个层次结构中储存表示所述资源之间的父-子关系的信息。
18.根据权利要求15所述的计算机可读介质,其中所述信息层次中的资源相应于关系表中的行;以及用储存在所述关系表中的两个或更多个列中的值表示所述资源之间的父-子关系。
19.根据权利要求18所述的计算机可读介质,其中,执行一个或多个查询的步骤包括执行指定所述两个或更多个列之间的CONNECT BY关系的查询。
20.根据权利要求19所述的计算机可读介质,其中所述两个或更多个列包括含有表示关系中的子的数据的第一列和含有表示所述关系中的父的数据的第二列;以及所述执行查询的步骤包括执行含有如下表述形式的查询START WITH x IS NULL CONNECT BY PRIOR x=y;其中,x代表所述第二列,y代表所述第一列。
21.根据权利要求15所述的计算机可读介质,其中和所述信息层次中的叶节点关联的所述资源相应于关系表的行;以及和所述信息层次中位于给定叶节点之上的非叶节点关联的值被储存在相应于所述给定叶节点的行中。
22.根据权利要求21所述的计算机可读介质,其中所述和非叶节点关联的值被储存在所述关系表中的一个或多个列中;以及储存用于捕捉所述信息层次的信息的步骤包括在资源表中将来自相应于所述信息层次中的叶节点的行的用于每个不同值的行储存到所述一个或多个列中。
23.根据权利要求15所述的计算机可读介质,还包括用于执行以下步骤的指令建立触发器,以响应于对构成所述外部层次定义的数据做出的改变,更新构成所述内部层次定义的数据。
24.根据权利要求15所述的计算机可读介质,还包括用于执行以下步骤的指令建立触发器,以响应于对构成所述内部层次定义的数据做出的改变,更新构成所述外部层次定义的数据。
25.根据权利要求15所述的计算机可读介质,还包括用于执行自动维持所述外部层次定义和所述内部层次定义之间的一致性的步骤的指令。
26.根据权利要求25所述的计算机可读介质,其中所述自动维持一致性的步骤包括以下步骤检测对所述一个或多个表的操作何时删除和所述信息层次中的节点关联的资源;响应于检测所述操作,自动执行以下步骤在资源表中删除相应于所述节点的行;确定从所述信息层次中除去所述节点是否导致一个或多个其他节点悬空;以及如果从所述信息层次中除去所述节点导致一个或多个其他节点悬空,那么,在所述资源表中删除相应于所述一个或多个其他节点的行。
27.根据权利要求25所述的计算机可读介质,其中所述自动维持一致性的步骤包括以下步骤检测对所述一个或多个表的操作何时删除和所述信息层次中的叶节点关联的资源;响应于检测所述操作,自动执行以下步骤在资源表中删除相应于所述节点的行;确定从所述信息层次中除去所述叶节点是否使所述叶节点的父节点没有剩余的子节点;以及如果从所述信息层次中除去所述叶节点使所述叶节点的父节点没有剩余的子节点,那么,在所述资源表中删除相应于所述父节点的行。
28.根据权利要求25所述的计算机可读介质,其中所述自动维持一致性的步骤包括以下步骤检测对所述一个或多个表的操作何时插入与所述信息层次中的节点关联的资源;响应于检测所述操作,自动执行以下步骤在资源表中插入相应于所述节点的行;确定来自所述信息层次的所述节点的增加是否导致将所述节点的一个或多个子节点增加给所述信息层次;以及如果来自所述信息层次的所述节点的增加导致将所述节点的一个或多个子节点增加给所述信息层次,那么在所述资源表中插入相应于所述一个或多个子节点的行。
全文摘要
本发明提供了数据的一致性层次抽象化。层次可以在层次结构之外维持的现有数据中明显或隐含地反映。这样的层次称之为“先前存在的层次”。此处描述的技术用于在分层结构中捕捉先前存在的层次。在先前存在的层次已经被捕捉后,存在两组反映该层次的独立数据外部层次定义和内部层次定义。改变每个层次定义都会改变层次。因此,为了维持层次的一致性反映,响应于对外部层次定义做出的改变,必须更改内部层次定义,响应于对内部层次定义做出的改变,必须更改外部层次定义。所描述的各种技术用于维持两个层次定义之间的一致性。
文档编号G06F7/00GK1561497SQ02819169
公开日2005年1月5日 申请日期2002年9月27日 优先权日2001年9月28日
发明者尼普恩·阿加瓦尔, 埃里克·塞德拉, 拉维·默西, 纳米特·贾殷 申请人:甲骨文国际公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1