E-BaseIII介绍

1 2 3 下一页

一、什么是E-base系统

  E-Base系统是一个由中山大学软件研究所研制的内嵌式(Build-in)的数据库引擎。

  内嵌式是指E-Base系统本身不是一个独立的应用程序开发平台,内嵌式系统只有嵌入到(或说寄生于)某种应用平台上才能被使用,并且在编译之后,它本身就不再存在。

  E-base系统目前可以嵌入到:

  C,C++,V-B,AutoCAD和PROLOLG等。

  E-base系统的最典型应用是嵌入在C语言中做低层应用开发。

  内嵌式软件的概念不是嵌入式(embody)软件的概念。但是内嵌式软件是可以应用于(或说非常适用于)embody软件系统的。

  E-Base系统是由中山大学软件研究所研制的,它经历了三个阶段:

  • 1994年-1995年 E-Base I

  • E-Base I用于:广州市信息中心工厂企业信息查询系统。这是E-Base I 的唯一的应用。

  • 1995年-1999年 E-Base II

  • E-Base II用于:广州空军航材系统(全军航材二等奖),香港安泰保险系统,加拿大北方电信接入网规划系统(全国大学生软件竞赛一等奖),VOD(目前已在学校,小区推广使用),国家安全部门系统等。

  • 2000年-  E-Base III

  • E-Base III由市科委支持,并且由中大新华软件产业有限公司接产。B-版已用于广州中大软件研发中心项目-CTM(Computer telephony menage)和远程医疗(红外)系统。

二、为什么要研制E-Base系统(motivation)

  众所周知,目前世界上有许多的数据库系统,它们大致可以分为两类:

  • 集合操作类型,如SQL Server, ORACLE和Informix等;

  • 元组操作类型,如FoxBASE, V-FoxBASE 和access等。

  事实上,SQL早已成为了公认的数据库语言的标准。但是否SQL是最适用的数据库应用开发语言呢?其实不然,因为如果是这样,则根本没有FoxBASE或者说Xbase数据库系统的生存余地。世界上在确有许多成功的应用是用元组操作类型的数据库系统开发成功的。

  在许多教科书中都指出SQL是一种近似英语自然语言的数据库(查询)语言,因此SQL非常适合用户使用。但是在这些教科书中大多没有指明"用户"的含义,"用户"是指应用系统使用者呢还是应用程序开发者呢?事实上,这两类用户对"适用"的需求是不同的,从教科书中强调的"近似英语自然语言"的叙述来看,SQL适用的用户应是“应用系统的使用者”。

  事实上,无论SQL如同近似于英语,应用系统的使用者都不会直接使用它的。

  开发经验告诉我们,仅仅使用SQL语言是开发不出令人满意的应用系统的。通常,数据库系统要同某种程序设计语言相结合(自含程序设计语言的数据库系统,如Fox,除外)才能开发出实际意义下的应用。SQL语言面对的主要用户应当就不那么重要了。程序员所需的适用性并不在此,而是希望数据库语言应当同程序设计语言有很自然的耦合特性。

  事实上,SQL同大多数程序设计语言耦合特性不好。主要是,目前大多数程序设计语言都是元组特性的(亦每次仅能处理一个元组)。而SQL是集合特性的。

  为了解决耦合特性不好的问题(类似于阻抗不匹配),在SQL同程序设计语言的耦界面中,引入了结果集和Cursor的操作。事实上Cursor并不是新操作,而是顺序文件中的指针。数据库操作同文件指针操作混合使用,不能说是一种很好的解决方法。有文章指出大约要有40%的代码来解决不匹配问题,这无疑是开发者付出的不必要的代价。上述问题也给Xbase数据库系统制造了生存机会。

  集合操作类型的数据库系统经过多年的进化后,特别是在C/S模型应用的推动下,也有许多优点。它们主要是在Server端引入自含式程序设计语言。它不但支持trigger和存贮过程之处,它还提供了一般程序设计语言中的缠还,判断等结构。这给应用系统中的应用逻辑和过程及应用逻辑程序设计后移奠定了基础。

  应用逻辑程序后移所带来的好处是不言而喻。

  数据库应用系统可以分为两类:规则类和查询类应用。

  • 规则类应用:商业规则复杂类应用于,如,人事,保险和各种MIS系统。

  • 查询类应用:否则,如Internet,电信记费,工业控制和各种信息查询系统。

  显然对于规则类应用,为了利用应用逻辑程序后移所带来的好处,则采用集合操作类型的数据库系统是合适的,否则,则应采用元组操作类型的数据库系统。

  但是,由于设计目标的不同,目前的元组操作类型数据库系统对于开发许多查询类应用并不适用。通常它们都自带程序设计语言和开发平台,因而低层性不够。

  综上所述,研制一个基于元组操作的,功能齐全,占用资源少和内嵌式的数据库系统是有意义的。

三、E-Base III有哪些特性

1 E-Base III的语型和例子

假定 我们定义了:

   S(学号, 学生名, 年龄)
   SC(学号, 课程号, 成绩)
   C(课程号, 课程名, 任课老师)

 我们可以定义如下视图:

   createview("SS(a2,a5,a7):-
   S(a1,a2,_),SC(a3,a4,a5),C(a6,a7,_),a1=a3,a4=a6")

  其中SS表示选修课,a2表示学生姓名,a5表示成绩,a7表示课程名。

  为了查询选修了课程'数学'的学生名及成绩,我们可以定义如下查询:

   int tno = opentable("SS");
   int scanno = createscan(tno, "课程名='数学'");
   while(locate(scanno)==EMORE)
   {
    retrieve(scanno, 0, sname);
    retrieve(scanno, 1, &score);
   }

  其中int scanno = createscan(tno, "课程名='数学'");

  表示逻辑程序设计中的 ?- SS(X,Y,Z),Z=数学.

  而

   while(locate(scanno)==EMORE)
   {
    retrieve(scanno, 0, sname);
    retrieve(scanno, 1, &score);
   }

  表示回溯(back-tracking)。

   Update (+S(64,dodo,20)<- name=/=dodo)

  表示当S表中所有名字不为dodo的元组, 改为S(64,dodo,20)。

   Update (+S(_,_,20)<- age<20 )

  表示把S表中所有age<20的元组,age字段改为20。

   Update (+S(64,dodo,20))

  表示在S表中加入新的元组。

   Update (+S(64,dodo,20)<- No=100)

  表示把S表中记录号为100的元组换成新的元组。

   Update (-S(_,_,20))

  表示把S表中age=20的元组全部删除。

   Update (-S(_,_,_)<- No=100 and age<20)
   或者Update (-S(_,_,20)<- No=100

  表示把S表中age〈20并且No=100 的元组删除

  注意:上述操作都是原子性的。

  上述例子可以表示EBASE III的基本风格

2 E-Base III的特性

  E-Base III是内嵌式的,因此它同宿主语言特别是C语言有很自然的耦合特性。

  E-Base III 中,集合操作同元组操作是统一的。元组操作是集合操作的特别情况。

  E-Base III 中,没有结果集的概念,因此它也不需要Cursor的概念。由于没有结果集的概念,则意味着实时性更好。

  E-Base III 具有update 元组原子特性,因此它的多用户冲突解决方法比传统的元组操作类数据库系统更高级,比集合操作类的数据库系统回滚机制更自然。

  E-Base III的语言是面向程序员的,不是一般用户的,从一般的角度来看它并不是友好的。

  E-Base III 是媒体开放的,目前E-Base III支持图像类型,但是可以很方便地增加其它类型,如:声音,HTML文档,指纹,Word文档,VCD,DVD,等等。

  E-Base III除了支持多媒体类型之外,还支持在其上的操作,例如:支持图像或HTML文档上的查询等。

  除此之外,E-Base III还具有占用资源少(以100K为单位)和查询速度快的特性(保留的E-Base II 的特性)。

 

1 2 3 下一页