查询语句QL的语义分析和实现 第4页
3 语义分析的理论依据
3.1 数据库设计背景
数据库的设计是指对于一个给定的应用环境,构造出最优的数据库模式,建立数据库及其应用系统,有效的存储数据,满足用户的信息要求和处理要求。
数据设计中需求分析阶段综合各个用户的应用需求;在概念设计阶段形成独立于机器特点、独立于各个DBMS产品的概念模式,用E—R图来描述。在逻辑设计阶段将E—R图转换成具体的数据库产品支持的数据模型如关系模型,形成数据库的逻辑模式。然后根据用户处理的要求,安全性的考虑,在基本表的基础上再建立必要的视图形成数据的外模式。在物理设计阶段根据DBMS特点和处理的需要,进行物理存储安排,设计索引,形成数据库的内模式。
数据库技术已被认为是“计算机和信息科学增长最迅速的领域之一“。它很快发展成为实践上和理论上都相当重要且相当成熟的领域之一,它是计算机软件方面的一个独立分支,目前还在发展之中。数据库系统,从根本上说不过是计算机化的记录保持系统,也就是说,它的总目的是存储和产生所需要的有用信息。数据,是数据库系统中集中存储的一批数据集合——即数据库。它是数据库系统的工作对象。用户,存在一组使用数据库的用户,即指存储、维护、和检索数据的各类请求。数据库系统中主要有三类用户:终端用户、应用程序员和数据库管理员。
在文件系统中,用户对其所使用的数据文件的物理组织和存储细节全要进行安排和处理,这给用户带来很大不便。而数据库系统的目标之一就是要解决这个问题。数据库系统把对“存储数据”的管理、维护和使用的复杂性都转嫁给DBMS身上。因此,DBMS是一种非常复杂的、综合性的、在数据库系统中对数据进行管理的大型系统软件,它是数据库系统的核心组成部分,在操作系统(OS)支持下工作。
而自主知识产权数据库是综合运用数据库基础知识,编译原理,操作系统原理,程序设计语言等知识设计的,其总体设计框架见图 3 1
图 3 1 自主知识产权数据库总体设计框架
3.2 SQL
3.2.1 SQL语言概况
早在20世纪70年代,IBM公司San Jose 研究中心研制了一个关系DBMS原型系统System R。System R在发展关系数据库技术方面做了一系列重要的、创造性的贡献。其中之一,就是发展了一种非过程关系数据库语言,当时称之为SEQUEL(Structured English Query Language)。1981年,在System R的基础上,IBM公司推出商品化的关系DBMS SQL/IBM的DB2、SQL/400、QMF等DBMS产品中,而且也广泛地用于许多非IBM公司的DBMS产品中,例如ORACLE、Unify、Sybase、dBASE Ⅳ、Ingres、Rdb等。SQL之所以取得成功,除了商业上的原因外,语言本身
接近英语自然语言,易学易用,受到用户的欢迎,也是一个很重要的因素(王能斌,2000)。
从1982年开始,美国国家标准协会(ANSI)即着手SQL的标准化工作。SQL已从开始时比较简单的数据库语言,逐步发展成为功能比较齐全、内容比较复杂的数据库语言。随着数据库技术的发展和数据库功能的增强,原有的功能要保持兼容,新的功能要增加,这种发展趋势似乎是不可避免的。目前,各个DBMS厂商都自称采用SQL语言,但完全按ISO标准实现的并不多。IBM公司实际上以其DB2的SQL作为IBM的标准。其他厂商所实现的SQL,由于历史的原因,也有不少差异。但总的倾向是向国际标准靠拢,与DB2 SQL保持兼容。
SQL语言和基于SQL的关系是计算机工业最重要的基础技术之一。在过去的20年里,SQL己经从最初的商业应用发展成为一种计算机产品,其服务市场部分每年达数百亿美元,SQL成为当今标准的计算机数据库语言。现在,支持SQL的数据库产品数以百计,运行于从大型机到PC机再到便携式计算机的整个计算机系统上。
SQL是一种组织、管理和检索计算机数据库存储的数据的工具。SQL是结构化查询语言(Structured Query Language )缩写。正如它的名称所暗示的,SQL是一种计算机语言,可以用它与数据库交互。事实上,SQL使用的是一个特殊类型的数据库,即关系数据库。
3.2.2 SQL的特点
(1)综合统一:非关系模型的数据语言分为模式定义语言和数据操纵语言,其缺点是,当要修改模式时,必须停止现有数据库的运行,转储数据,修改模式编译后再重装数据库。SQL是集数据定义、数据操纵和数据控制功能与一体,语言风格统一,可独立完成数据库生命周期的所有活动(陈平等,2004)。
(2)高度非过程化:非关系数据模型的数据操纵语言是面向过程的,若要完成某项请求时,必须指定存储路径;而SQL语言是高度非过程化语言,当进行数据操作时,只要指出“做什么”,无须指出“怎么做”,存储路径对用户来说是透明的,提高了数据的独立性(陈平等,2004)。
(3)面向集合的操作方式:非关系数据模型采用的是面向记录的操作方式,操作对象是一条记录。而SQL语言采用面向集合的操作方式,其操作对象、查找结果可以是元组的集合(陈平等,2004)。
(4)两种使用方式:第一种方式,用户可以在终端键盘上键入SQL命令,对数据库进行操作,故称之为自含式语言;第二种方式,将SQL语言嵌入到高级语言程序中,所以又是嵌入式语言(陈平等,2004)。
(5)语言简洁、易学易用:SQL语言功能极强,完成核心功能只用了9个动词,包括如下4类(陈平等,2004)。
① 数据查询:SELECT。
② 数据定义:CREATE、DROP、ALTER。
③ 数据操纵:INSERT、UPDATE、DELETE。
④ 数据控制:GRANT、REVORK。
3.2.3 SQL数据定义
SQL的数据操纵功能包括SELECT(查询)、INSERT(插入)、DELETE(删除)和UPDATE(修改)。其中数据查询是数据库的核心操作,它的语句格式如下:
SELECT [ALL|DISTINCT] <目标列表达式> [,<目标列表达式>]
FROM <表名或视图名> [,<表名或视图名>]
[WHERE <条件表达式>]
[GROUP BY <列名1> [HAVING <条件表达式>]]
[ORDER BY <列名2> [ASC|DESC]]
SQL查询中的子句顺序为:SELECT、FROM、WHERE、GROUP BY、HAVING
和ORDER BY。其中SELECT、FROM是必须的,WHERE、GROUP BY、HAVING和ORDER BY是可选的,并且HANING子句只能与GROUP BY搭配起来使用。利用(+)、(-)、(*)、(/)和集函数可以构造表达式,用于在SELECT子句中查询表中未存储但可以导出的结果。(王能斌,2000)
本文的QL语义分析只针对于简单查询:它使用语法制导翻译原理直接进行语义分析,语义检查无误后得到表名和相应的列名,运用逻辑表达式求值对条件进行判断。
3.3 编译程序及语义分析
3.3.1 什么是编译程序
编译程序是现代计算机系统的基本组成部分之一,而且多数计算机系统都含有不止一个高级语言的编译程序,对有些高级语言甚至配置了几个不同性能的编译程序。从功能上看,一个编译程序就是一个语言翻译程序。它把一种语言(称作源语言)书写的程序翻译成另一种语言(称作目标语言)的等价程序。比如,汇编程序是一个翻译程序,它把汇编语言程序翻译成机器语言程序。如果源语言是像FORTRAN,PASCALA或C那样的高级语言,目标语言是像汇编语言或机器语言那样的低级语言,则这种翻译程序称作编译程序。如果把把编译程序看成一个“黑盒子”,它所执行的转换工作可以用图 3 2来说明(吕映芝等,1998)。
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] 下一页