面向对象索引(数据库)
时间:2022-11-03 12:30:02 | 来源:信息时代
时间:2022-11-03 12:30:02 来源:信息时代
面向对象索引 : 在面向对象数据库(OODB)中所建立的索引。与传统的关系数据库在一个属性或一组属性上建立一个索引有所不同,OODB引入新的索引: 类层次索引和嵌套属性索引等。
类层次索引(class level index): 类C的属性A的类层次索引,是以C为根的类层次上所有类的属性A的一个单一索引。索引属性是建立在其上的属性,而索引类是建立在这些类属性上的类层次的根。例如,可以在图1的车辆类及其重量属性上建立一个类层次索引,则重量是该索引的索引属性,而车辆是索引类。在面向对象数据模型下,一个类既可能是一个类层次的根,也可能是一个类复合层次的根。一个类从它的超类继承属性,它的所有直接和间接的子类共享相同的属性。
图1 类层次和类复合层次
类层次索引和单一类索引的实现采用B
+-树。在这两种索引文件中,内结点的格式是相同的。每个索引项由键的长度、键、指向下一层结点的指针组成,如图2(a)所示。类层次索引的叶结点格式和单一类索引的叶结点格式分别如图2(b)和图2(c)所示。
对于类层次索引,其存储要求索引页可以足够地保留以索引类为根的类的所有实例对象的oids;而在相应类层次上每个类的单一类索引集合的存储要求,是每个单一类索引的索引页总数之和。
嵌套属性索引(nested-attribute index):在面向对象数据模型中,允许一个对象的属性值是一个对象或一组对象,构成嵌套对象。尽管一个查询返回一个目标类的实例对象集合,但查找谓词可以指定在该类的任意嵌套属性上。一个类的嵌套属性上的索引称为嵌套属性索引。在类的嵌套属性索引中,对属性的索引是间接的,是针对类的嵌套属性的。换句话说,对属性的索引并不针对索引类的属性。嵌套属性索引使我们能够通过遍历一个单一索引来计算复杂的对象查询。嵌套属性索引特别适合于嵌套查询类型,这类查询包含了关于索引类的多重嵌套属性的谓词。
图2 结点格式
给定一个类复合层次C
1,C
2,…,C
n。A
1,A
2,…,A
n(n≥1)作为复合层次上的路径,提供了对象数据库的一种查找能力。这里C
1是类复合层次上的类,A
1是类C
1的属性,A
i是类复合层次上类C
i的属性,C
i是类C
i-1的属性A
i-1的值域,1<i≤n。合成路径上类的个数等于路径长度。可以看出,必须遍历包括C
1在内的n个类才能到达嵌套属性A
n。这里,除了路径中最后一个属性的值域可以是原子类或非原子类,路径上其他所有的类必须是非原子类。
将一条合成路径表示成n+1个对象组成的一个序列:O
1,O
2,…,O
n,O
n+1。这里,O
1是类C
1的实例对象,O
i是对象O
i-1的属性A
i-1的值,1<i≤n+1。对象O
i是类C
i的实例。在图3中,O
1,O
2,…,O
n,O
n+1表示一条合成路径。正向遍历路径表示从O
i开始,沿路径依次访问对象O
i+1,O
i+2,…,O
n-1,O
n,O
i通过复合属性A
i引用O
i+1,O
n-1通过复合属性A
n-1引用O
n。路径上的对象也可以反向遍历,但路径上的对象之间必须设置反向引用; 否则,一般不能使用嵌套索引。
图3 合成路径O1,O2,…,On,On+1
图4 C1.A1.A2上的对象
为说明起见,将合成路径上的嵌套索引NX表示成一组偶对(O,S)。这里,S={O′,存在一条合成路径O
1,O
2,…,O
n,O
n+1,并且,O′=O
1,O=O
n+1},(O,S)偶对的元素O是索引键。嵌套索引NX将路径上的末端对象O
n+1和起始对象O
1关联在一起。在图4中表示一组路径C
1.A
1.A
2上的对象, 路径上的嵌套索引将属性A
2的值与C
1的一组oids关联在一起,类C
2的属性A
2是索引键。该嵌套索引包括以下偶对: (O
3,{O
1″})和(O
3′,{O
1,O
1′})。