面向对象数据库的模式是类的集合。模式为适应需求的变化而随时间的变化称为模式演进。模式演进包括建新的类、删除旧的类、修改类的属性和操作等。在关系数据库系统中,模式的修改主要有创建或删除一个关系、在关系模式中增加或删除一个属性、在关系模式中修改完整性约束条件等操作。
面向对象数据库模式的修改要比关系模式的修改复杂,其主要原因有两点:
(1) 模式改变频繁。OODB应用通常需要频繁地改变OODB数据库模式。
(2) 模式修改复杂。OO模型具有很强的建模能力和丰富的语义,包括类本身的语义、类属性之间和类之间丰富得语义联系,可能使墨是修改操作复杂多样。OODB中模式演进往往是动态的。
1. 模式一致性
模式一致性是指模式自身内部不能出现矛盾和错误,它由模式一致性约束来刻画。模式的演进必须要保持模式一致性。
模式一致性约束可分为惟一性约束、存在性约束和子类约束等,满足所有这些一致性约束的模式则称为是一致的。
(1)惟一性约束:这一类约束条件要求名字的惟一性。例如,在同一模式中所有类的名字必须惟一;类中属性名和方法名必须惟一,包括从超类中继承的属性和方法,淡漠是的不同种类的成分可以通明,如属性名字和方法可以同名。
(2)存在性约束:是指显示引用的某些成分必须存在。例如,不能引用一个没有在模式中定义的类。
(3)子类型约束。例如不允许有从多继承带来的任何冲突等。
2. 模式演进的操作与实现
模式演进操作主要由:
(1) 类集的改变,包括创建新的类,删除已有类,改变已有类等。
(2) 已有类的成分的改变,包括增加新的属性或新的操作/方法,删除已有的属性或操作,改变已有属性的名字或类型,改变一操作的名称或操作的实现。
(3) 子类/超类联系的改变,包括增加一新的超类、删除一已由超类。
模式演进主要的困难是模式演进操作可能影响模式一致性,累的修改操作可能影响到其他类的定义。因此,在OODB模式演进的实现中必须具有模式一致性验证功能(类似编译器地语义分析)。
任何一个面向对象数据库模式修改操作不仅要改变有关类的定义,而且要修改相关类的所有对象,使之与修改后的类定义一致。一般采用转换的机制来实现模式演进。
所谓转换方法,是指在OO数据库中,已有的对象将要根据新的模式结构进行转换,以适应新的模式。根据转换发生的时间可有不同的转换方式:
1立即转换方式。一旦模式变化立即执行所有的变幻,缺点是系统为了执行转换需要消耗一些时间。
2 延迟转换方式。模式变化后不立即执行,延迟到低层数据库载入时,或者延迟到该对象被存取是才执行变换。缺点是应用程序存取一个对象时,要把它的结构与其所属类的定义比较,完成必需的修改,处理效率较低。
3 多模式版本方式。当修改面向对象数据库模式时,建立一个数据库模式版本,保留旧版本,不废弃原数据库模式。这样,系统中同时存在多个数据库模式版本,这对于里时数据库的存取非常有利。但是,这种方法将导致存储空间开销增大。
如何实现面向对象数据库模式的演进,是面向对象数据库系统研究的一个重要方向。