传统数据库管理系统的局限性:
1)、 面向机器的语法数据模型
传统数据库中采用的数据模型强调数据的高度结构化,是面向机器的语法数据模型。关系模型只有一个非常简单的结构性概念--关系,在传统的面向事务管理的应用中,数据对象具有同形结构,这样它们很容易映射到关系来表示;而工程对象拥有许多异形结构,一个复杂对象可能由许多具有不同结构的子对象组成。对这些复杂对象比较自然的(即对于用户来说是友好的)表示,就需要有比关系模型更复杂的抽象机制。
在关系数据库系统中必须将在逻辑上是一个整体的复杂对象分解为好几个基本关系。在这种结构下内部数据库结构与外部对象不在是一一对应的。对许多操作来说,人们更希望把所操作的部分抽象为一个逻辑单位,而关系模型不支持这一点。于是人们必须从关系模式的片段中构造复杂对象,其结果常常是带有许多冗余数据的不自然的复杂查询。进一步讲,重构复杂对象还带来另一个问题,那就是,由连接构造的视图一般是不可更新的。
2)、 数据类型简单、固定
传统的DBMS只能理解、存储和处理简单的数据类型。如整数、浮点数、字符串、日期、货币等。传统的RDBMS只支持某一固定的类型集,不能依据某一应用所需的特定数据类型来扩展其类型集。例如,不能定义包含三个实数分量的数据类型vector来表示三维向量。
3)、 结构与行为分离
从应用程序员角度来看,在某一应用领域内标识的对象应包含两个方面的内容:
● 结构表示
● 行为规格说明
前者可映射到数据库模式(带着前面所提到的缺陷),而后者在传统数据库系统中则完全失去了。
传统数据库主要关心数据的独立性以及存取数据的效率,是语法数据库,语义表达差,难以抽象化地去模拟行为。例如,用户在CAD设计中用某些数据结构来表示的对象,对他们的操作(如成形、显示和组合等)就无法存放到数据库中。这样,对象的行为特征在传统数据库系统中最多只能由应用程序来表示。因此在传统数据模型中,结构与行为被完全分割开了。
4)、阻抗失配
在关系数据库系统中,数据操纵语言如SQL与通用程序设计语言之间的失配称为阻抗失配。这种不匹配表现在两个方面:一是编程模式不同,描述性的SQL语言与指令式的编程语言如C语言不同;二是类型系统不匹配,编程语言不能直接表示诸如关系这样的数据库结构,在其界面就会丢失信息。进一步地,由于是两个类型系统,自动的类型检查也成了问题。
5)、 被动相应
传统数据库管理系统只能响应和重做用户要求它们做的事情,从这种意义上说,它们是被动的。而在实际应用中,往往要求一个系统能够管理它本身的状态,在发现异常情况时及时通知用户;能够主动响应某些操作或外部事件,自动采取规定的行动;应该能够在一些预定的(或动态计算的)时间间隔中自动执行某些操作。这就是说,要求系统更加主动、更加智能化,而传统的数据库系统显然不能适应这一要求。
6)、 存储和管理的对象有限
传统的DBMS只存储和管理数据,缺乏知识管理和对象管理的能力,不具有演绎和推理的功能,因而无法满足MIS、DSS、OA和AI等领域中进行高层管理和决策的要求,从而限制了数据库技术的高级应用。
7)、 事务处理能力差
传统数据库只能支持非嵌套事务。对长事务的响应较慢,而且在长事务发生故障时恢复也比较困难。
|