公交换乘系统的数据库结构及算法优化

2010-11-21 12:46胡云峰
文山学院学报 2010年2期
关键词:公交线路文山换乘

胡云峰

(文山学院计科系,云南 文山 663000)

公交换乘系统的数据库结构及算法优化

胡云峰

(文山学院计科系,云南 文山 663000)

自从计算机和计算机网络进入人们的日常生活中,各大中型城市中出现了一种以服务广大市民出行为目的的非营利性网站,其主要的功能是辅助使用者找出一个最省时、最方便的出行方案。此类网站在数据库设计和算法上有一定的复杂性,文章针对此类网站的数据库设计和算法优化进行研究,以文山县城为原型进行系统的设计开发。

T-SQL;存储过程;触发器;算法优化;数据库设计

1 公交换乘系统的设计理念

为满足人们日常生活中不同的出行需求,方便进行出行线路的快速查询,参照目前一些大中型城市里已经在运行使用的类似系统,以文山县城为原型,设计开发了该系统,系统主要包括以下几个功能:(1)用户可以向系统提供自己要乘坐的公交线路,查询得到本路公交车经过的所有站点;(2)用户可以根据某个站点名,通过系统查询出所有经过该站点的公交车线路;(3)用户还可以输入起始站点和目标站点的站点名,经过系统运算和查询后给出最佳出行方案。

2 公交换乘系统的主要功能模块

2.1 管理模块

在整个系统正常运行之前,需要对各个相关站点数据进行维护,确保系统的安全、数据的完整以及站点的及时更新。进入系统管理模块前需要登陆系统,根据用户名和密码检测账号的合法性。当用户名和密码不正确时,返回登陆界面重新登陆。反之,表示验证成功,进入管理员管理界面。维护管理员管理界面具有三大功能,分别是管理账号维护、公交线路维护和公交站点维护。管理账号维护,提供创建和删除管理账号的功能,在需要多人管理本系统时进行操作;公交线路维护,提供公交线路的维护功能,主要用于城市新增或撤销公交线路时对系统数据进行操作;公交站点维护,可对某条已经存在的公交线路内的站点进行维护,主要用于某条公交线路内的站点发生变化更新站点信息。详细的功能结构见图1。

图1 公交换乘系统功能结构图

2.2 换乘查询模块数据流程

一般用户操作的是公交换乘查询页面。换乘查询,可分为三个功能:根据线路查询站点、根据站点查询线路和根据起始站点和目的站点查询出行方案。用户进入查询页面以后,选择需要的查询方式,系统根据用户的选择,判断属于哪一种查询,然后根据用户所提交的数据,给出查询结果。公交换乘模块的数据流程图[1]见图2。

图2 公交换乘模块的数据流程图

3 公交换乘数据库的建立及数据库算法实现

3.1 根据线路查询站点的功能实现

文山县城目前共有10路公交车,将所有站点数据整理后录入,形成线路站点表,部分线路站点表见图3。

图3 线路站点表

线路站点表记录了每条线路经过的所有公交站点,由于某些线路去程和回程的站点有差异,因此在表中利用“方向”字段加以区分。通过此表,直接利用查询语句(SELECT线路,站点,方向FROM线路站点表WHERE线路=“[用户提供的查询线路名]”)进行查询,即可根据用户输入的线路,查询出该线路所包含的站点信息。

3.2 根据站点查询线路的功能实现

要实现根据提供的站点名称查询出所有经过该站点的公交线路,利用原先建立的线路站点表难以实现。可以将线路站点表按照线路和站点进行拆分,细化为新的线路站点表,将每条线路的各个站点独立出来作为一条新记录录入数据表,建立如图4所示新的线路站点表。这样做虽然增大了记录的条数,但是,根据新的线路站点表,可以方便地利用用户所提供的站点名查询出经过此站点的公交线路,通过查询语句(SELECT线路,方向FROM线路站点表WHERE站点=“[用户提供的站点名]”)实现根据站点查询线路的功能。而要想实现根据线路查询站点的功能,只需要简单修改程序代码,利用数组的概念,经过循环运算即可。

图4 新的线路站点表

3.3 站-站查询的功能实现

公交换乘系统应用最广泛的功能是实现站站查询,即根据起始站点和目标站点查询出行线路。仅根据前面建立好的线路站点表,要实现根据用户所提供的起始站点和目标站点,查询出出行线路,是不可能实现的,于是,考虑将线路站点表中各条线路所包含的公共站点提取出来,创建一个线路站点交叉表,该表主要是记录各条公交线路的交叉站点。1路和4路、7路车在“交通集团”这站有交点,也就是说交通集团就是1路、4路和7路的公共站点,如图5所示:

图5 线路站点交叉表

根据线路站点交叉表,就可以实现站站查询。当获取到用户提供的起始站点(B)和目标站点(E)后,首先,根据B和E查询线路站点交叉表,看里面有没有一条线路满足同时包含起始站点和目标站点,如果有,则表示不用换乘,直接乘坐一路公交车即可到达。如果没有,则查询哪几条线路包含站点B,将所有的包含B站点的线路保存在一个数组A 1中。然后查询哪几条线路包含站点E,将所有包含站点E的线路保存在数组A 2中,再将数组A 1和数组A 2中的元素分别一一配对,和上表线路站点交叉表中的记录进行对比,如果有一条记录中的线路一、线路二字段的值正好与两个数组中的值一致,即说明在这条记录的公共站点可以实现换乘,从而得出从起始站点B到目标站点E的换乘方案。

4 数据库结构及算法的优化

公交换乘系统在公交线路和公交站点不断增加以后,各线路和各站点之间换乘运算的数据量将变得异常庞大,因此,数据库结构和换乘算法需要从以下几方面进行优化。

(1)从Access到SQL Server的过渡。Access作为Microsoft Office套件中的一部分,获取和安装都很容易。系统最初是利用Access数据库,在实现各项功能方面都可以满足。但是随着城市规模的扩大,公交线路肯定会日益增加,这样将直接导致站点数据成倍增长。由于Access只能满足于个人的、小规模的数据库的管理,一旦数据量加大就不适用了,所以在系统最终测试阶段,选择可以管理更多数据的SQL Server,这是处理将来不断增加的数据量的最佳方案。

(2)数据表结构的优化。一个高效、合理的数据库,需要满足第三范式的规范。所谓第三范式,是一个数据库表中不包含已在其它表中已包含的非主关键字信息。简单来说,就是非主键属性只依赖于主键属性。作为主键,也就是一条记录中可以唯一标示这条记录的字段,在各个表中一定要唯一。[2]在以上三个表中,都设计了编号这个字段作为主键。这样在进行数据查询的时候就能避免错乱。

(3)T-SQL语句的优化。此部分的主要工作是将实现功能的代码进行优化,在优化所有的查询语句的时候,制定了以下规则:

a)尽可能少的行。

b)避免排序或为尽可能少的行排序,若要做大量数据排序,最好将相关数据放在临时表中操作,用简单的键(列)排序,如整型或短字符串排序。

c)避免表内的相关子查询。

d)避免在W here子句中使用复杂的表达式或非起始的子字符串、用长字符串连接。

e)在W here子句中多使用“与”(And)连接,少使用“或”(O r)连接。

(4)频繁的数据库查询到存储过程的过渡。由以上公交换乘数据库的建立及数据库算法实现可以看出,系统主要是构造实现各个功能模块的查询语句来实现最终的功能,这一切,都建立在与数据库系统的交互上,可以想象,终端用户量如果过大,同一时间内,由客户端向服务器发送的代码量将是一个很庞大的数据。为了减少从客户机通过网络向服务器发送的代码量,最好将代码以一定的形式存放在服务器上,利用SQL Server的存储过程就可以做到。存储过程就是在SQL Server数据库重存放的查询,是存储在服务器中的一组预编译过的T-SQL语句,而不是在客户机上前端代码中存放的查询。[3]由于程序的三个功能主要是由三块的T-SQL语句所构成,所以,在每次使用本系统的时候,都会将对应的语句发送到服务器,再由服务器处理得出结果后返回客户机。利用存储过程,将实现三个功能的语句放在服务器上,每次调用直接从服务器上取出即可。这样既减少了反复查询产生的代码传送量,又加快了查询速度,同时减轻了网络负担。

(5)大量功能代码到触发器的转换。触发器是一种特殊的存储过程,其过程由对数据库表的添加、删除、修改等事件触发。[3]在设计和创建数据库表结构的时候,由于整个系统不是由单一的、关系相对独立的表组成的,相反,所有的表之间存在一个相互影响的关系,所以在遇到某些情况,比如新增加一个站点或删除一条线路时,就要进行大量的数据变动。在原先的设计中,采取的办法是利用数据库表自身的相应操作将变动的数据进行设计,但是这种做法不但工作量大,而且在操作员进行系统管理的时候,经常由于疏忽会遗忘掉一部分的操作,造成数据的不一致,最终导致系统产生严重错误。于是,在系统测试阶段,将所有的有联系的操作利用触发器的思想解决。经过触发器技术,在对某条线路进行调整或者修改后,系统会自动将与此线路相关的、存在于所有表中的记录完全进行调整,这样就解决了先前处理这些变更线路所产生的大量代码和复杂的操作。

(6)代码的优化。文山公交换乘系统的开发是由三个项目组成员组成,在进行编码的时候,难免会有各自的编码习惯。针对这点,在版本上统一使用微软公司的VSS,以保证开发成员使用的一定是最新的代码版本;在程序代码编写上,建立规范的数据字典[1]和编码规则,力求统一;在程序测试阶段,分别利用白盒测试和黑盒测试[4],对整个程序进行测试,避免产生一切可预料到的错误。

5 结 语

文山州公交换乘系统(www.0876city.com)的开发用时一年,已经进入实际使用阶段。目前系统所提供的查询功能仅限于文山城区的10条公交线路,并且只提供一次换乘查询,后期的二次换乘查询和查询网络在全州八个县的全面覆盖是下一步的目标。

[1] 侯炳辉.信息管理系统[M].北京:中央广播电视大学出版社,2001:51-172.

[2] 萨师煊,王珊.数据库系统概论[M].北京:高等教育出版社,2004:176.

[3] 陈玉峰.SQL Server2000数据库开发教程[M].北京:科学出版社,2003:65-199.

[4] 白鹏.数据库编程[M].北京:科学出版社,2003:228-231.

Public Transit System Database Structure and the Optimization Algorithm

HU Yun-feng
(Department of Computer Science,Wenshan University,Wenshan Yunnan 663000,China)

Since computer and computer network com e into people's daily life,there appears a kind of Nonprofit website serving for people in large and medium -sized cities. Its main function is to assist its user to find out most economical and convenient travel plan.This kind of website's database structure and optimization algorithm has some comp lex characteristics.This paper,based on its database structure and optimization algorithm,carries out research to take Wenshan city as prototype to design a network development.

T-SQL;trigger;optimization algorithm;database design

U 491.17

A

1674-9200(2010)02-0104-04

2009-12-17

文山师范高等专科学校科研基金项目“文山州公交换乘系统”(08W SY04)

胡云峰(1981-),男,云南文山人,助教,硕士研究生,主要从事计算机应用程序开发的教学及研究。

(责任编辑 刘常福)

猜你喜欢
公交线路文山换乘
Modulational instability of the coupled waves between fast magnetosonic wave and slow Alfvén wave in the laser-plasma interaction
文山肉丁
地铁车站换乘形式对比与分析
天津地铁红旗南路站不同时期换乘客流组织方案研究
文天祥与文山肉丁
山歌唱文山
基于GIS的公交路线优化设计
城市轨道交通车站联合配置短驳道路公交线路的方法
城市轨道交通三线换乘形式研究
最美公交线路上的“最美司机”