1、 C/S 体系结构下 ORACLE 和 PB 应用软件开发中的软件功能分布研究李小庆 马玉书(石油大学 (北京)人工智能中心 ,北京 102200) 摘要 本文以 ORACLE 和 PB 开发应用程序为例,分析了在 C/S 体系结构下数据服务器和客户软件各自能完成的功能,并讨论了在它们之间如何合理的分布功能。主题词 C/S(客户/服务器) 、数据完整性、网络 I/O 、处理逻辑中图法分类 第一作者简介 李小庆,男,1977 年生,1998 毕业于石油大学(华东)计算机科学系,现为石油大学(北京) 人工智能中心硕士研究生,主要从事大型数据库应用系统的开发。1、引言90 年代以来,随着网络技术和数
2、据库技术的飞速发展,采用分布式环境下的客户/服务器(C/S )体系结构逐渐成为开发数据库应用系统和 MIS 系统的主流。C/S 体系结构包括两层含义,其一指硬件的 C/S 结构,其二指软件的 C/S 结构。随着软件规模日趋庞大,结构日趋复杂,设计合理的软件体系结构显得越来越重要。软件 C/S 结构是指将一个应用系统按照逻辑功能分成若干组成部分,例如用户界面、表示逻辑、用户逻辑、数据约束等,这些功能组成部分由客户软件和服务器软件分别承担。实际应用中,用户软件和服务器软件有相当部分功能存在重复和交叉,服务器能实现的一些功能,客户软件通过一定的处理逻辑也能实现,但有时应用的功能不合理分布时,则会降低
3、整个应用系统的性能,例如,一个设计不好的应用程序没有充分利用数据库的存储过程,以至要执行过多的网络 I/O,使网络负载过重。所以在开发服务器软件和客户软件时,如能明确二者的功能,并能在它们之间实现合理的功能分配,对开发大型数据库系统和 MIS 系统具有重要意义。本文以当前开发 C/S 应用程序的最流行的数据库管理系统 ORACLE7 和数据库应用开发工具 PB6 来论述这一问题。2、数据库服务器可以实现的功能在分布式 C/S 环境下,数据库服务器指以 ORACLE 作为后台所实现的数据库管理功能。通常,它侧重于对数据库系统进行管理和维护,其功能主要包括数据的完整性、并发性和安全性等方面。2.1
4、 数据完整性数据的完整性,是指按照某些规则来确定数据是否正确和可用,它可分为内部规则和业务规则。关系模型的内部规则由域完整性、实体完整性和关系完整性等组成,业务规则则是根据数据在实际应用中对数据的要求而制定的规则。1、内部规则 域完整性域完整性关系是指表中的任一数据都属于列的成员,表中不含任何无意义或非法的数据。ORACLE7 中,使用列的数据类型来实现域的完整性,对于表中的每一列都要正确指出数据类型。 实体完整性实体完整性是指在一个关系表中能唯一地识别一条记录,不存在两条相同的记录。ORACLE7 中用主键来保证实体完整性。 关系完整性关系完整性是指关系数据库中一个关系的一列或一组列的值引用
5、了另一关系中一列或一组列的值。在数据库内容发生变化时,两值必须保持匹配。ORACLE7 用外键来实现这一功能。2、 业务规则每一个数据库根据实际应用情况都有自己的业务规则集,它与数据库固有的规则集同等重要,例如,某公司的库存量不能超过一万,否则马上要给公司主管出示警告,以停止订货。ORACLE7 提供一序列的强大功能来实现定制的业务规则: 数据库触发器应用开发中会经常遇到复杂的业务规则,这些规则如在客户应用程序中编程就显得十分复杂,而且不易满足动态响应要求,这时应考虑采用 ORACLE7 的触发器。触发器其实是一个存储过程,它在满足触发条件时自动触发,以执行相应过程。 存储过程、函数和包过程和
6、函数是由编译过的 SQL 语句、控制流语句、变量说明、运算符等组成的集合,它们由软件开发人员创建并存储在库中。当用户调用过程和函数时,数据库就按过程和函数预定义的操纵数据。采用过程和函数由很多优点,比如它能实现复杂的安全性和完整性的检查,能集中进行规则实施,减少网络流量,而且比较容易创建,可避免在客户应用程序重用大量的编程语句来实施业务规则。包是一组过程或函数的集合,如果开发应用程序需要使用多个不同的过程或函数协同工作,最好将过程或函数封装在一个包中,从而可以改善过程和函数单独使用时的性能。 数据库报警当数据库发生某些特殊情况时,如库存量超过一万,需要提示给用户,以便用户采取适当行动,ORAC
7、LE7 提供了数据库报警这一功能,让库管理程序自动周期性的发出 SQL语句查询需要报警的条件以给予报警。2.2 数据的并发性、安全性和优化处理技术说明数据并发性一个较好的例子是飞机订票系统,即如果不同地方的两个人在同一时间订票,有可能订到同一张机票,这是由于数据库中有关机票号的数据丢失了一个更新操作。由此可认为数据并发性是当两个用户或多个用户访问数据库会发生冲突而导致数据库出错,ORACLE7 提供了排它锁和并发锁来防止这种冲突。当一个用户对数据进行更新,如果不会产生破坏性冲突,ORACLE7 对数据分配一个共享锁,以允许其它用户也可以获得这样一个共享锁,反之,ORACLE7 对数据分配一个排
8、它锁,阻止任何其他用户更新该数据。ORACLE7 实行行级封锁,通过最低程度减少数据冲突来最大程度提高数据并发性。但 ORACLE7 对查询操作不分配锁,而提供多版本机制,对于每一个查询,ORACLE7 返回基于一个时间点的查询数据的版本,如果在查询过程中会有更新冲突,ORACLE7 将从回退段中读取旧数据,生成一个基于时间点的快照(结果集合) 。为维护数据库的安全,ORACLE7 提供了完善的安全机制,来对数据库合法地操作和控制。 ORACLE7 将对数据库及其对象的存取控制权力分为两类:系统特权和对象特权。系统特权用以控制功能强大的系统操作,对象特权用以控制对数据的访问,在大型 C/S 应
9、用程序中对各种权限管理是一件复杂的事,ORACLE7 提供了“角色”这一功能来管理大量具有相同权限的用户。另外,ORACLE7 提供了审计来监测和记录用户对数据库施加的操作,它支持语句审计、特权审计、对象审计三类审计。数据库系统性能的优化,除了在设计阶段对其逻辑结构和物理结构设计进行优化使其时空开销最佳外,还可在运行阶段采取一些优化措施,使系统性能得到最优化。ORACLE7 提供了一个 ORACLE 优化器,优化器有两种优化方法,一种是基于规则的优化,即基于存取路径等级的 SQL 语句的执行方法;另一种是基于代价的优化,就是执行 SQL语句时,比较各个计划执行的代价,取代价最底者执行。DBA
10、还可以通过调整 ORACLE7的参数设置来调整数据库的性能,对参数的细微调整就能影响系统性能。3、 用 PB6 开发应用软件所能实现的主要功能PB6 作为分布式 C/S 环境下的数据库应用开发工具,它主要适合于在客户端为各类用户开发各种不同类型的应用软件,因此,PB6 应为数据库应用系统的建立和有效的管理与使用,提供完善的操作和丰富的功能。通常,PB6 为用户前端提供了数据表示、应用处理逻辑等多种功能。31 数据表示客户程序应能将数据库的数据从库中取出并放到应用界面上,并提供对数据库进行检索、更新、修改、删除等操作。PB6 提供了一种功能强大的数据库对象 数据窗口来实现这些功能。数据窗口可对数
11、据透明地存取,能进行很大程度上的完整性检查,并具有其它很多强大功能,具体来讲,它有如下功能:1、 数据窗口支持多种数据源这些数据源不仅可以是 ORACLE、SYBASE、INFORMIX 上的关系数据,也可以是TEXT、 DBF 等文件,数据窗口通过 ODBC 连接数据源。2、 数据窗口提供多种显示方式数据窗口可提供方格、自由格式、标签格式等显示方式,还可以将几种显示方式组合到一起显示,构成组合格式。3、 数据窗口具有分析和统计数据功能数据窗口能对库中的数据分组、求和、求平均值等,还能用多种统计图或交叉表方式对数据进行统计和分析。4、 数据窗口能实现复杂的查询数据窗口能设置多重或嵌套查询条件,
12、能设置分组查询条件,能添加计算列和计算域,能按多个域列排序,能够按设置条件进行数据过滤,将用户所需的数据显示出来。5、 数据窗口具有数据完整性检查的功能数据窗口的编辑屏蔽功能控制用户输入数据时只能按照给定的格式和相应的类型进行输入,数据窗口的有效性校验保证输入的数据满足相应的条件,否则为非法的数据,数据窗口的下拉列表框、子数据窗口和收音机按钮用以选择固定的数据,可以大大减少输入数据的出错率。数据窗口这些功能设置使数据入库前具有相当高的完整性。6、 数据传口自动管理数据的存取数据窗口与数据库的交互可自动完成,不需开发人员涉及其中的细节。数据窗口与数据库交互的效率较高,其查询效率比嵌入式 SQL
13、语句高出 10 倍。7、 数据窗口提供了大量的函数和事件数窗窗口为开发人员提供了 100 个左右和函数,通过这些函数可以实现对数据库的复杂操作,控制界面对象以及获取数据窗口状态;数据窗口还提供了 30 种左右事件,开发人员可以在响应时间下编程来控制数据窗口的显示和控制。8、 数据窗口的其它功能数据窗口还具有去掉重复记录,改变列的可修改属性和隐藏列的显示等功能。3.2 应用处理逻辑客户软件应能对各种数据进行综合分析,提炼出对用户有用的信息,它还应该实现其它各种辅助功能,然后将这些功能集成一体化,以较好的界面和方便的操作方式提供给用户使用。面向对象的第四代语言(OO4GL)PB6 为应用开发提供了
14、全面的和集成化的开发环境,它提供统一的访问 DBMS 的用户界面和应用程序接口 API,它支持可视化图形用户界面(GUI )设计,并提供了流行的所有 GUI 控件,如静态文本、树状视图、分组框等等。PB 具有丰富的面向对象风格设置和许多操作对象手段,全面支持类、对象、继承、封装、多态性、重载等面向对象特征,利用这些特征,开发人员可以提高代码和控件的可重用性,从而使应用的维护和扩充变得十分简单。此外,PB6 还提供了大量预定义函数和 C+类的创建。PB6 这些功能和特性,使得开发人员设计和实现应用处理逻辑变得高效快速。4、合理的功能分布从以上的功能分析我们可以看到,在 C/S 应用系统中,ORA
15、CLE7 偏重于对数据库的管理,PB6 偏重于对库的访问和各种处理逻辑,但它们某些功能相互重叠,比如 PB6 实现的某些功能,在 ORACLE7 能用过程和函数实现;ORACLE7 具有强大的数据完整性检查功能,PB6 在很大程度上也能对入库前的数据进行完整性检查。如何做到功能合理分布,至少要考虑三个问题:是否减少网络 I/O?是否提高系统整体性能?是否提高应用的开发效率?其中网络 I/O 时最应该注意的问题,通常它是应用程序性能的瓶颈,一个应用程序引起的网络 I/O 越少,整个应用系统运行情况就会越好。为了减少网络 I/O,应将数据库的内部处理逻辑尽量向服务器(ORALE7 )移进,为了提高
16、系统的性能,ORACLE7 本身所具有的基本数据完整性检查应在 PB6 中再次设置,业务规则视情况在 ORACLE7 或 PB6 中设置,对数据的分析处理在一定程度上可通过 ORACLE7 的过程和函数来实现,从而减少PB6 开发客户应用程序的压力,数据并发性 ORACLE7 能自动实现,数据安全性可通过应用界面将授权信息传给 ORACLE7 来得到控制。为此,可提炼出以下几条规则,在实际开发中应综合考虑。1、 使用过程和函数实现复杂的业务规则;2、 使用过程和函数转移应用程序一部分功能;3、 使用过程和函数应能增强应用的功能强度;4、 客户应用程序中提前实现大部分数据完整性;5、 减少控制信
17、息在网上传输的次数,网上尽量传送 SQL 语句和结果集;6、 数据库的优化处理在服务器中进行;7、 客户程序侧重于数据的显示和逻辑分析处理;8、 从减少网络 I/O 和提高系统整体性能考虑。5、 应用实例我们为塔指研制的油田开发动态监测平台数据库应用系统 ,采用分布式环境下的C/S 体系结构,并用 PB6/ ORACLE7.3.3 进行开发 。 此应用系统数据种类繁多,信息量大,客户程序要求有关数据库管理、动态监测和处理等多种功能,因此合理运用和分布前台和后台功能以优化系统性能是开发时考虑的重点之一。服务器数据库包括开发静态、开发动态、开发监测和开发实验等方面的数据。为了减少冗余度,并能达到第
18、三范式标准,将有些关系表分开,加上标志字段,形成一对多的关系。为了满足关系完整性,定义了相应的外键。有关重要列的值约束先在数据库中定义,一般的值约束只在 PB 的数据窗口定义。维护体现企业规则的表与表之间的关系均用ORACLE 触发器完成,不用 PB 编程实现,因为 PB 编程实现会导致程序维护难度增加。体现企业规则的数据运算视情况用 ORACLE 的存储过程(/ 函数)或在 PB 中实现,例如自动统计某月的产油产水量可用 PB 中数据窗口的计算域来实现,而计算有关渗透率、系数等复杂的计算则用 ORACLE 存储过程来解决,这样可简化 PB 编程,增强系统的可维护性和运行效率。此外,用 PB
19、编程还参与了并发处理,如果一个用户对记录加锁而超过一定时间不释放,客户程序将通知 ORACLE 释放该锁,以便别的用户使用,该用户所做的操作将产生回退,这样避免了一个用户长时间占用记录。PB 开发的客户程序除了实现查看和增删关系表、数据域等数据库管理操作外,还实现了万能查询、专用查询和统计,此外,客户程序还对各种操作进行等级特权管理,拥有不同用户名和口令的用户只能进行客户程序授予的相应操作。这些功能大部分用 PB 编程实现,但对库操作有关功能转移到 ORACLE 用过程或函数实现,如有关表名域名的代码到名称和名称到代码之间的转换,程序中要用到多次,采用 ORACLE 中的函数实现,减少了网络
20、I/O。客户程序充分利用了 PB 数据窗口功能,利用编辑屏蔽、下拉数据窗口、有效性检验等完成数据完整性检查,从而大大减轻 ORACLE 的压力。此应用系统中应用功能的分布可用图-1 来表示:用户界面 接受数据库请求 数据表示 处理数据库请求应用处理逻辑 服 连 网 网 连 服 服 结果传送给客户机数据完整性检查 务 接 络 络 接 务 务 数据完整性检查数据并发控制 器 性 协 协 性 器 器 数据并发控制产生数据库请求 A 软 议 议 软 软 O 数据安全性控制向数据库发送请求 P 件 件 件 S 存储过程和函数从服务器接受结果 I 执行恢复用户权限控制 优化查询和更新处理客户应用程序 服务
21、器数据库管理系统图-1 应用系统的功能分布按如上功能分布后,减少了网络,提高了系统的执行效率,系统的安全性、数据的完整性和并发性得到了很好的控制,使系统的整体性能或得了提高。6、结论对 C/S 中客户软件和服务器软件所能实现的功能有一个清晰的了解,可以合理的分布应用功能,提高系统整体性能和系统的开发效率,使数据和服务无缝集成。当前流行的C/S 体系结构主要是比较简单的 CS 结构,功能分布比较好安排,但是采用较为复杂的 RU结构或 EUS 结构,就更应充分考虑好如何在 C/S 下合理分布应用功能。参考文献1 朱扬勇, 凌力. 客户/ 服务器数据库应用开发. 上海: 复旦大学出版社, 19972
22、 李昭原等. 数据库技术新进展. 北京: 清华大学出版社, 19973 孙宏昌等. ORACLE7 数据库管理员教程. 北京: 电子工业出版社, 19964 马玉书. 数据库系统导论. 山东东营: 石油大学出版社,19935 Streve J.Ayer美. Object-Oriented Client/Server Application Development Using ObjectPAL and C+. American: McGraw-Hill, Inc, 1995Distribute the function in C/S system when developing appoica
23、tion by ORACLE and PB【Keyword】client/server data integrality network I/O processing logic【Abstract】This thesis make a example of developing application by ORACLE and POWERBUILD.With the example it analyze the function which data server and client software each possess, and discuss how to distribute function between them.