图3-1 一个复杂对象的结构


  在传统的关系数据模型中,首先不允许定义非原子属性域,其次是每个元组没有系统形成的唯一标识。为了构造层次结构的复杂对象,在XSQL中,增加了两个属性域:标识符域(IDENTIFIER)父子关系域(COMPONENT_OF)。这两个域的值都是存放某元组的标识符。
  标识符域用于存放元组的唯一标识符,它是该元组创建时由系统自动产生的,并作为标识符域的值保存起来。元组的标识符有如下特性:
 1) 该标识符与对象的内容和对象存放的位置无关;
 2) 该标识符与对象的生命周期也无关,即当该元组删除以后,它的标识符也不可再用。所以,元组的标识符不能更新和修改;
 3) 使用标识符可以唯一的访问该元组对象。
  注:
  标识符的产生方法可由两部分组成,即元组产生时的处理器标识号和它产生的日期与时间,即处理器标识_日期_时间。用这种方法产生的标识符在"全世界范围内"都保证唯一的。就像WINDOWS中的资源标识符一样。
  父子关系域用于描述双亲元组和子元组之间的关系,即存放父元组的标识符。父子元组之间的关系便于描述1:N的关系。
使用父子关系域构造元组层次结构的方法是:
 1) 一个复杂对象由一个根元组和若干其它关系的元组组成。根元组存放于根关系表,其它关系称为根关系表的子关系。
 2) 参与复杂对象的每个关系都有一个标识(IDENTIFIER)列,根关系中的标识列的值就作为该复杂对象的唯一标识符。
 3) 每个非根关系要有一个双亲(COMPONENT_OF)列,该列中的值存放这个子元组的父元组的标识符。每个孩子元组恰有一个父元组,多个孩子元组可有相同的父元组,从而保证了元组之间严格的层次关系。实际上是用指针实现了元组之间的链接。也可以采用双链结构,即在父元组中再增加多个指向孩子元组的孩子(CHILD)属性列,存放子元组的标识符。
 4) 组成一个复杂对象的每个元组都包含两部分内容:第一部分是由用户定义的正规的元组字段,是用户可见的。第二部分是用来实现复杂对象结构的附加字段:标识符字段、双亲字段和孩子字段。