# 摘要
: 本文讨论了某公司发货系统的分布式数据库集成解决方案。该公司由于业务的发展,要在另三个城市设立货仓进行发货。为此,需要增加原先的MIS系统实现这一功能。公司委任我作为项目经理完成系统的设计和开发的工作。我经过分析,使用了Sybase的分布式数据库技术。我设计的这个系统是采用典型的C/S结构,但客户端连接服务器的网络采用电话线拨号,速度有限,传统Windows界面的客户端应用程序相应速度比较慢。于是我采用了优化数据库结构的方法,把数据分两部分存放,基础数据存放于客户机上,销售资料主要采用键码存放于服务器上,应用程序再现数据时从服务器取键码,到客户机取对应的解释。由于键码的数据量少,网络传输便快。在构建这个公布式数据库系统的过程中,我着重研究并解决了数据同步和事务协调的问题,到得了良好的应用效果。
在具体的应用中,我们在三个城市安装了增强的客户端应用程序,同时安装了Sybase数据库。初始化时,把基础数据放从公司本部的数据库导入客户端的数据库中。用户在外地进行发货时,先拨号上网,然后启动客户端程序。在登录过程中,客户端程序会检查服务器上的标识和时间戳检查这些主数据是否有更新,如果有就先下载,下载完成后再进入系统正常使用。在服务器更新的数据比较多的情况下,下载的时间会比较长,这时如果遇到急需发货,则会影响到货物不能及时发出去。
为了解决这个问题,我设置了在每天凌晨的某个时刻自动登录和启动客户端程序,在下载更新数据完成后自动关闭。这样可以把一部份数据更新的内容放在非工作时间里完成,减少了发货登录的时间。用户登录后开始进行发货操作。输入销售订单,通过本地代理表系统自动到服务器获取该销售订单的数据,如发货的数量,客户编号等。而一些基础数据则可以直接从本地的数据库中得到,如销售产品的描述,客户的地址/电话/传真,发货的库位等。完成出货动作后,会自动更新服务器的库存。而这一更新通过提交事务在后台进行,不影响前台的操作。所以,对用户来讲,能够进行正常的操作,不会因为速度慢而进行不下去。
在当今的信息社会里,互联网带来了相互连通的方便,而且知识爆炸,数据的分布式访问是个必然的趋势。目前新起的XML技术,提供了各种平台数据库之间的一个公共数据访问标准,可以用来构建更加灵活,适应性更强的分布数据库技术。将XML用在分布式数据库中,将是未来的一个趋势。
扩展阅读
Oracle数据库的基本结构
Oracle是一种关系数据库管理系统(RDBMS)。关系数据库是按照二维表结构方式组织的数据集合,每个表体现了集合理论中定义的数学概念——关系。在使用数据库之前,理解Oracle数据库的基本结构很重要。
Oracle数据库(Database)是一个数据容器,它包含了表、索引、视图、过程、函数、包等对象,并对其进行统一的管理。用户只有和一个确定的数据库连接,才能使用和管理该数据库中的数据。
下面将分别从数据库的内部结构与外部结构两个角度来探讨数据库。简单地说,内部结构描述了Oracle数据库的内部存储结构,即从技术概念上描述如何组织、管理数据。内部结构包括表空间、表、列、分区、用户、索引、视图、权限、角色、段、盘区、块等。而外部结构则是从“操作系统”角度来看,Oracle 11g数据库的实体构成项目,包括数据文件、重做日志文件和控制文件等。
内部结构1.表空间(TABLESPACE)
表空间是数据库的逻辑划分,一个表空间只属于一个数据库。每个表空间由一个或多个数据文件组成,表空间中其他逻辑结构的数据存储在这些数据文件中。一般Oracle系统完成安装后,会自动建立多个表空间。以下介绍Oracle 11g默认创建的主要表空间。
(1)EXAMPLE表空间。EXAMPLE表空间是示例表空间,用于存放示例数据库的方案对象信息及其培训资料。
(2)SYSTEM表空间。SYSTEM表空间是系统表空间,用于存放Oracle系统内部表和数据字典的数据,如表名、列名和用户名等。一般不赞成将用户创建的表、索引等存放在SYSTEM表空间中。
(3)SYSAUX表空间。SYSAUX表空间是辅助系统表空间,主要存放Oracle系统内部的常用样例用户的对象,如存放CMR用户的表和索引等,从而减少系统表空间的负荷。SYSAUX表空间一般不存储用户的数据,由Oracle系统内部自动维护。
(4)TEMP表空间。TEMP表空间是临时表空间,存放临时表和临时数据,用于排序和汇总等。
(5)UNDOTBS1表空间。UNDOTBSI表空间是重做表空间,存放数据库中有关重做的相关信息和数据。当用户对数据库表进行修改(包括INSERT、UPDATE和DELETE操作)时,Oracle系统自动使用重做表空间来临时存放修改前的数据。当所做的修改完成并提交后,系统根据需要保留修改前数据的时间长短来释放重做表空间的部分空间。
(6)USERS表空间。USERS表空间是用户表空间,存放永久性用户对象的数据和私有信息,因此也被称为数据表空间。每个数据库都应该有一个用户表空间,以便在创建用户时将其分配给用户。
除了Oracle系统默认创建的表空间以外,用户可以根据应用系统的规模及其所要存放对象的情况创建多个表空间,以区分用户数据和系统数据。
2.表(TABLE)
表是数据库中存放用户数据的对象。它包含一组固定的列。表中的列描述该表所跟踪的实体的属性,每个列都有一个名字和若干个属性。表结构的一个样例如图所示。
图 表结构样例
3.约束条件(CONSTRAINT)
可以为一个表列创建约束条件。此时,表中的每一行都必须满足约束条件定义所规定的条件。约束条件有以下5种。
(1)主键(PRIMARY KEY)。主键是表中的一列或多个列。为表定义主键有如下几个作用:主键包含的列不能输入重复的值,以此来保证一个表的所有行的唯一性;主键也不允许定义此约束的列为NULL值;主键在定义此约束的列中创建了唯一性的索引,利用这个索引可更快地检索表中的行。
(2)默认(DEFAULT)约束条件。在表中插入一行数据但没有为列指定值时生成一个在定义表时预先指定的值。
(3)检查(CHECK)约束条件。检查约束条件确保指定列中的值符合一定的条件。CHECK列约束条件不能引用一个独立表。非空值约束条件被数据库看成一个CHECK约束条件。
(4)唯一性(UNIQUE)约束条件。唯一性约束条件用于保证应具有唯一性而又不是主键的一部分的那些列的唯一性。
(5)外键(FOREIGN KEY)约束条件。外键约束条件规定表间的关系性质。一个外键使一个表的一列或多列与已定义为主键的表中的一批相同的列相关联。当在已定义主键约束的表中更新列值时,其他表中定义有外键约束的列会被自动更新。
主键约束和外键约束保证关联表的相应行持续匹配,以至于它们可以用在后面的关系连接中。在它们被定义为主键约束和外键约束后,不同表的相应列会自动更新,称为引用完整性声明。
数据库的约束条件有助于确保数据的引用完整性。引用完整性保证数据库中的所有列引用都有效且全部约束条件都得到满足。
4.分区(PARTITION)
在非常大的数据库中,可以通过把一个大表的数据分成多个小表来简化数据库的管理,这些小表称为分区。除了对表分区外,还可以对索引进行分区。分区不仅简化了数据库的管理还改善了其应用性能。在Oracle中,能够细分分区,创建子分区。例如,可以根据一组值分割一个表,然后再根据另一种分割方法分割分区。
5.索引(INDEX)
在关系数据库表中,一个行数据的物理位置无关紧要。为了能够找到数据,表中的每一行都用一个RowID来标识。RowID告诉数据库这一行的准确位置,包括所在的文件、该文件中的块和该块中行地址。
索引是帮助用户在表中快速地找到记录的数据库结构。它既可以提高数据库性能,又能够保证列值的唯一性。当CREATE TABLE命令中规定有UNIQUE或PRIMARY KEY约束条件子句时,Oracle就会自动创建一个索引。也可以通过CREATE INDEX命令来手工创建自己的索引。
6.用户(USER)
用户账号虽然不是数据库中的一个物理结构,但它与数据库中的对象有着重要的关系,这是因为用户拥有数据库的对象。例如,用户SYS拥有数据字典表,这些表中存储了数据库中其他对象的所有信息;用户SYSTEM拥有访问数据字典表的视图,这些视图供数据库其他用户使用。
为数据库创建对象(例如表)必须在用户账户下进行。可以对每一个用户账户进行自定义,以便将一个特定的表空间作为它的默认表空间。
把操作系统的账户和数据库账户联系在一起,这样可以不必既输入操作系统口令,又输入数据库的口令。
7.方案(SCHEMA)
用户账户拥有的对象集称为用户的方案(SCHEMA)。可以创建不能注册到数据库的用户账户。这样的用户账户提供一种方案,这种方案可以用来保存一组其他用户方案分开的数据库对象。