二、传统数据模型的缺点
传统数据模型在数据库中起了非常重要的作用,目前的商用数据库中大量数据库仍采用传统的数据模型,尤其是关系数据模型。但由于历史条件的限制,在实际应用中越来越感到它们的不足。主要表现在下面几方面:
1.以记录作为数据模型的基本结构,不能很好地面向对象。在传统的关系数据库中,虽然也含有面向对象的表示方法,即用一个记录表示一个对象,对象的状态通过记录的属性来描述。实际上,记录的组成往往从现实的角度考虑,对象和记录不一定相对应。而且,为了使用方便,对记录作出了一些简单化的规定,使其无法以灵活的方法来描述复杂的对象。例如,在关系表中不能包含另一个关系。又如假设在3个关系表中,都具有同一属性时,从表内和表外均无法表示3个表之间的关系是层次关系,还是从属关系。也就是说,这就要求用户熟知表的关系。
在层次数据模型和网络数据模型中,虽然提供了描述的显式手段,但提供的是物理结构的描述,这样,不便于用户的理解和使用,也有损于数据的物理独立性。
2.数据语义贫乏。数据的语义是指数据本身具有的表达数据属性及其关系的能力。在传统的三种数据模型中,尽管都含有一些语义信息,如关系数据模型中的关键字,层次数据模型中父子关系以及网络数据模型中的连接关系。但总的来说语义贫乏,表现在记录中各个属性之间关系常要求用户通过文字来叙述,而这些文字描述并非是数据库的组成,且对这些文字描述缺少手段。例如缺乏对“交互关系”、“从属关系”、“性质”、“成分”等语义的表示和区别。因此,传统的数据模型在语义方面给用户带来很大负担。
3.数据类型少,难以满足用户需要。由于传统的数据模型只提供最常用的一些简单的数据类型,如整数、实数、字符型和日期型等,且不允许用户自己创造新的数据类型。当用户所需属性值不是直接给出时,用户只能用一些公式、规则推导得到。例如在地理信息系统中,对复合目标进行查询时,用户难以了解数据库中各表之间相互关系。
由于传统数据模型的这些缺点,形成了面向对象的数据模型。
4.3.2 面向对象的数据模型
面向对象(Object-Oriented)的数据模型,其概念起源于面向对象的程序设计语言。
一、面向对象的数据模型的优点
面向对象的数据模型同传统数据模型比较,其主要优势表现在如下几点上:
1.具有表示和构造复杂对象的能力。它可以模拟复杂的现实世界,即无论怎样复杂的事例都可模型化为一个对象,对象的取值可以是另外一个对象,实体存储的是该对象的标识。这样表示不仅自然,易理解,也可使查询速度大大加快。
2.封装性和信息隐蔽技术提供了模块化机制。每个对象包含数据集和操作集,用对象封装技术将它们封装起来,其外部只提供一个抽象接口,看不到实际的细节,从而使对象内部的修改并不影响用户对对象的使用。封装性是一种信息隐藏技术。利用封装性,大系统可以分解成为各个封闭在对象内部的小系统。
3.继承和类层次技术提供了重用机制
类是相同对象的集合。具有相同属性和相同操作方法的一些对象类又可以组成一个集合,该集合称为“超类”。反之,一个类是其它类的特例时,该类就称为“子类”。一个类的上层可以是“超类”,下层可以是“子类”,从而组成了层次结构。在这种层次结构中,下层元素可以继承上层元素的全部属性和操作方法的特性称为继承性。继承性提供了代码共享手段,有助于软件重用的实现。
4.滞后束定等技术为系统提供了扩充能力。在面向对象的模型中,根据继承性,子类对象可以使用超类的属性和操作。在实际应用中超类和子类常不一起编辑。如超类是系统程序的一个组成部分,而子类只定义那些不同于超类的属性和操作,且放在应用程序中。因此,在编辑超类时,编译系统无法解释操作名,只能把此项工作延迟到应用程序运行时实现。这种延续称为“滞后束定”,它使面向对象的模型更加灵活,并提供了系统扩充能力,消除了传统数据库对数据定义的一致性限制,从而,提供了更为丰富的语义。