
Node DataBlade 模块
热 荐
【字体:小 大】
Node DataBlade 模块
作者:- 文章来源:- 点击数:726 更新时间:2006-4-22 
Paul Brown 和 Chris Bosch
2000 年 6 月 创建具有新类型的 Informix DataBlade,它解决了分层数据查询。包括 C 源代码。
概述
本演示 DataBlade 模块实现变长的 opaque 数据类型(Node)、其支持例程和其它用户定义的例程来访问和操作该类型的数据元素。
Node 数据类型旨在解决关系数据库中最难的问题之一:传递闭包(transitive closure)。它不能彻底解决该问题,但可以解决 80% 左右的问题。传递闭包问题是数据管理所特有的问题,并且关系模型不能特别有效地解决这一问题。在对有组织的层次结构和网络建模以及对数据库进行加工和过程控制时,都会出现相同的基本问题。
有多个用于解决传递闭包问题的优化,Joe Celko 的“SQL For Smarties”(Morgan Kaufmann,1995)对它们有详细的研究。然而,所有这些优化都会导致几种异常中的某一种,进而要求数据库更改多个元组来响应多个事实。另外,对树编写操作所需的 SQL 很复杂,并且难以优化和执行,即使当它们优化成最佳状态时,也很慢。
本文档引入了 Node 数据类型,并由这个演示 DataBlade 模块实现,为这一问题提供了相当横向的解决方案。其基本思想是:对 Node 数据类型创建类型和操作,Node 对本身建立树结构模型,并以该方式表示树结构的事实,而不是使这些事实简化为过分简单的关系。
Node 数据类型的外部表示是一个序数(大于 0 的整数),后跟一个 .0 或一组用点分隔的序数。下面显示了有效和无效的 Node 数据元素示例。
有效 Node
{ 1.0, 1.1, 1.1.1, 1.2, 1.2.1, 999.0, 999.1.999 }
无效 Node
{ 0, 0.0, 0.1, 1.0.1, 1.1.0, 1.-1.2, 1.A.4 }
对于这一类型,要注意几点。首先,将它视为简单字符串是不够的。一组 Node 对象的排序与传统的字符串排序表示不同。也不可能定义整理次序(collation sequence),它会产生正确的排序。因此,不可能将这种方法用于不支持可扩展类型的 DBMS。可以在数据库之外编写所需的排序算法,当比较两个值时,客户机应用程序可以使用该方法。然而,这有明显的限制。下面的示例显示了当将数据元素视为 Node 而不是字符串时它们的排序有何不同。
T 表示下面无序的数据元素集;
T := { 1.2, 1.0, 1.12, }
T 作为字符串排序;
T := { 1.0, 1.12, 1.2 }
T 作为 Node 排序;
T := { 1.0, 1.2, 1.12 }
其次,递增 Node 数据类型的元素比递增完全排序的离散数据类型(如整数集)的元素复杂。与整数的递增操作不同,递增 Node(将 Node 中的最低位值加 1)并不能保证产生的数据元素将是大于初始元素的最小 Node。
例如,假定有下面的 Node 对象集 T := { 1.0, 1.2, 1.2.1, 1.2.2 },我们发现在 Node 1.2 和 Increment (1.2) = 1.3 之间有一些 Node。
1.2 < 1.3
1.2 < 1.2.1 < 1.3
1.2 < 1.2.2 < 1.3
