- Visual FoxPro数据库程序设计
- 范韬 梁宏涛主编
- 8713字
- 2025-02-21 23:14:38
1.1 数据库基础知识
1.1.1 数据、信息与数据处理
1. 数据
数据是对客观事物特征的一种抽象化、符号化的描述。它包括文字、数字、图像、图形、声音等多种类型。例如,某人的身高1.65米、体重50千克、出生日期是1991年7月12日,其中1.65米、50千克、1991年、7月、12日等都是数据,它们描述了这个人的某些特征。
数据可分为数值型数据(如身高、体重等)和非数值型数据(如姓名、日期等)。
2. 信息
信息是有一定含义、经过加工处理、对决策有价值的数据。例如,一位学生的身高是1.85m,这是数据,全班学生平均身高为1.68m,说明这位学生在班上身高偏高,这就是信息。
信息与数据既有联系又有区别。信息是由数据加工处理得到的;数据是信息的载体,它表示了信息;信息是数据的内涵,是数据的价值体现。
信息是有价值的,为了提高信息的价值,应采用科学的方法来管理信息,常用的方法就是数据库技术。
3. 数据处理
将各种类型的数据转换成信息的过程称为数据处理,具体指对各种类型的数据进行收集、存储、分类、加工、检索和传输等。通过处理数据可以获得信息,通过分析和筛选信息可以产生决策。例如,一位学生的“出生日期”是有生以来不可改变的基本特征之一,属于原始数据,而“年龄”则是通过现在的日期与出生日期相减的简单计算而得到的第二次数据。
1.1.2 数据管理技术的发展
数据处理的核心问题是数据管理,计算机对数据的管理是指对数据的组织、分类、编码、存储、检索和维护提供操作手段。数据管理技术随着计算机硬件和软件技术的发展而不断发展,经历了由低级到高级的发展过程,我们大致可以将其分为人工管理、文件系统和数据库系统三个阶段。
1. 人工管理阶段
20世纪40年代末至50年代中期,计算机主要用于科学计算,还没有专门用于管理数据的软件。计算机进行数据处理时,数据与程序结合在一起,如图1-1所示。

图1-1 人工管理阶段中程序与数据之间的关系
人工管理阶段存在以下特点。
① 数据没有独立性,数据与程序相互依赖:一个程序中的数据,仅供该程序使用,其他程序不能使用;一个程序仅能处理本程序中的数据,不能处理其他数据。
② 数据冗余度极大且不能长期保存:对同一数据进行不同处理时,每个处理程序中都要包含相应的数据,各程序中存在着大量的重复数据,这种现象称为数据冗余。
③ 数据不能共享,从而导致了冗余。
④ 没有专门的管理软件。
2. 文件系统阶段
20世纪50年代后期至60年代,计算机的硬件和软件系统都有了很大发展。硬件方面出现了可以直接存取的存储器,软件方面出现了高级语言和操作系统。计算机开始大量地用于数据处理工作。这时程序和数据可以分别存储为程序文件和数据文件,即程序与数据不再是一体,如图1-2所示。程序员可以把精力集中在数据处理的方法上,而不必再花更多的时间去考虑数据存储的具体细节。

图1-2 文件系统阶段中程序与数据之间的关系
文件系统阶段虽然比人工管理阶段有了很大的进步,但仍存在以下缺点。
① 数据没有完全独立:数据文件只是为了专门的需要设计的,仅供某一特定应用程序使用。
② 数据冗余度依然较大:由于文件之间缺乏联系,造成每个处理程序都有相应的数据文件,同样的数据有可能在多个文件中重复存储。
③ 数据的共享性较差。
④ 数据不能被集中管理:数据文件无集中管理,数据的安全性和完整性都不能得到保障。各数据、数据文件之间缺乏联系,给数据处理造成不便。
3. 数据库系统阶段
从20世纪60年代开始,随着计算机技术的迅速发展,计算机广泛应用于企事业管理,数据量急剧增加,数据管理的规模越来越大,数据共享的要求也越来越高,用人工和文件系统管理远远满足不了需求。为适应多用户、多个应用程序共享大量数据的需要,出现了统一管理数据的专门软件系统,即数据库管理系统,以数据库管理系统为核心的数据处理系统称为数据库系统,如图1-3所示。

图1-3 数据库系统阶段中程序与数据之间的关系
数据库系统通过数据库管理系统对所有的数据进行集中的、统一的管理,使数据存储完全独立于使用的应用程序。
用数据库系统管理数据的特点如下。
① 实现了数据的结构化:在数据库中采用了特定的数据模型组织数据。数据库系统把数据存储于有一定结构的数据库文件中,实现了数据的独立和集中管理,克服了人工管理和文件管理的缺陷,大大方便了用户的使用和提高了数据管理的效率。
② 实现了数据共享:数据库中的数据能被多个应用程序共享,为多个用户服务。数据共享可以减少数据冗余,节约存储空间,还能够避免数据之间的不一致性。
③ 实现了数据独立:数据库中数据与应用程序相互独立、互不依赖,不因一方的改变而改变另外一方。这样大大减少了应用程序的设计、修改与维护的工作量。
④ 实现了数据统一控制:数据库是系统中各用户的共享资源,而共享一般是并发的,即多个用户可能同时使用一个数据库。数据库系统中的核心软件——数据库管理系统能提供必要的保护措施,包括并发访问控制、数据安全性和完整性控制等,从而满足了数据的完整性和安全性等方面的要求。
1.1.3 数据库系统基本概念
数据库系统(DataBase System,简称DBS)实质上是指引进了数据库技术后的计算机系统,它除了能实现有组织地、动态地存储大量相关数据外,还提供了数据处理和信息资源共享的便利手段。
1. 数据库
数据库(DataBase,简称DB)是指按一定的组织形式,集中存储于计算机外部存储器上的相关数据集合。数据库不仅反映数据本身的内容,还反映数据间的联系。
数据库不再只面向某一项特定应用,而是面向多种应用,可以被多个用户、多个应用程序共享。数据库具有数据的结构化、独立性、共享性、冗余量小、安全性、完整性和并发控制等特点。
2. 数据库管理系统
数据库管理系统(DataBase Management System,简称DBMS)是数据库系统的核心软件,是位于用户与操作系统之间的系统软件。它提供数据定义、数据操作、数据库控制和管理等功能,帮助用户在计算机上建立和维护数据库,开发使用数据的应用程序系统等。
数据库管理系统的主要功能如下。
① 数据定义功能:指数据定义语言(Data Definition Language,简称DDL),使用它可以定义数据库的结构,描述数据及数据之间的联系,实现数据完整性和安全保密性的定义。
② 数据操作功能:指数据操纵语言(Data Manipulation Language,简称DML),使用它可以实现对数据库中数据的基本操作,如检索、插入、修改和删除数据等。
③ 数据库控制和管理功能:指数据控制语言(Data Control Language,简称DCL),使用它可以实现对数据库的控制和管理功能。
目前常用的数据库管理系统有很多,根据它们的功能,大致可分为两大类:
① 大中型数据库管理系统,如DB2、Oracle、Sybase、SQL Server等。
② 小型数据库管理系统,如Microsoft Office套装软件中的Access、Visual FoxPro等。
3. 数据库系统
数据库系统(Data Base System, 简称DBS)是由计算机系统引入数据库后的系统构成,它是一个具有管理数据库功能的计算机软硬件综合系统。具体地说,它主要包括计算机硬件、操作系统、数据库(DB)、数据库管理系统(DBMS)和相关软件、数据库管理员及用户等组成部分。
① 硬件系统:是数据库系统的物理支持,包括主机、外部存储器、输入/输出设备等。
② 软件系统:包括系统软件和应用软件。系统软件包括支持数据库管理系统运行的操作系统(如Windows XP)、数据库管理系统(如Visual FoxPro 6.0)、开发应用系统的高级语言及其编译系统等;应用软件是指在数据库管理系统基础上,用户根据实际问题自行开发的应用程序。
③ 数据库:是数据库系统的管理对象,为用户提供数据的信息源。
④ 数据库管理员(DBA):是负责管理和控制数据库系统的主要维护管理人员。
⑤ 用户:是数据库的使用者,利用数据库管理系统软件提供的命令访问数据库并进行各种操作。用户包括专业用户和最终用户。专业用户即程序员,是负责开发应用程序的设计人员。最终用户是对数据库进行查询或通过数据库应用系统提供的界面使用数据库的人员。
4. 数据库应用系统
数据库应用系统(Data Base Application System,简称DBAS)是在DBMS支持下根据实际问题开发出来的数据库应用软件。一个DBAS通常由数据库和应用程序两部分组成。
数据库应用系统主要分为两大类。
① 管理信息系统:管理信息系统主要是指面向机构内部业务和管理的数据库应用系统,例如学生管理系统、人事管理系统、财务管理系统、物资管理系统等。
② 开放式信息服务系统:开放式信息服务系统是指面向外部、提供动态信息查询功能,以满足不同信息需求的数据库应用系统。例如,证券实时行情系统、经济信息系统等。
在数据库系统中,各种系统和相关人员之间的层次关系如图1-4所示。

图1-4 数据库系统组件间的关系
1.1.4 数据描述与数据模型
数据库中存储和管理的数据都来自于客观事物,要把现实世界中的客观事物抽象为能用计算机存储和处理的数据需要一个转换过程。这个转换过程通常可分为三个阶段,涉及三个世界,即现实世界、信息世界及机器世界。
1. 数据转换中的三个世界
(1)现实世界
现实世界中存在着各种各样的事物及事物之间的联系。现实世界中的事物都有一定的特征,人们正是通过这些特征来区分事物。另外,一个事物可以有很多特征,人们通常都是选用感兴趣的以及最能表示该事物的若干特征来描述该事物。例如,人们常用学号、姓名、性别、出生日期、专业等来描述一个学生的特征,有了这些特征,就能很容易地把不同的学生区分开。
世界上各种事物虽然千差万别,但都是息息相关的,也就是说,它们之间都是相互关联的。事物间的关联也是多方面的,人们仅选择那些感兴趣的关联,而没有必要选择所有的关联,如在学生管理系统中可选择“学生和选修课程”这种感兴趣的关联。
(2)信息世界
现实世界中的事物及事物之间的联系由人们的感官感知,如果经过人们的头脑分析、归纳、抽象,最后符号化,便形成了信息。对信息进行记录、归纳、整理、归类和格式化后就构成了信息世界。
(3)机器世界
信息世界中的信息再经过组织且以某种结构形式存储在计算机中,便形成了所谓的机器世界,机器世界又称为数据世界。
从现实世界到信息世界再到机器世界,事物被一层层抽象、加工、符号化和逻辑化,那么如何对现实世界和信息世界进行抽象,答案就是使用模型,即用模型的概念对现实世界存在的客观事物及事物之间的关系进行抽象,再对信息世界中的信息进行抽象、组织,使其能以某种结构形式存储在计算机中,被计算机管理和使用。常用的模型一般分为两类,一类是基于现实世界的事物及联系的概念模型;另一类是基于计算机进行数据处理的数据模型。图1-5展示了现实世界中的客观事物抽象为能用计算机存储和处理的数据的三个阶段及抽象过程。

图1-5 模型的应用层次
2. 实体—联系模型
概念模型反映了信息从现实世界到信息世界的转化,它不涉及计算机软硬件的具体细节,而注重于符号表达和用户的理解能力。包括面向对象模型、实体—联系模型等。人们最常使用的概念模型是“实体—联系模型”,简称为E-R模型。在E-R模型中,事物用实体来表示,事物的特征用属性来表示,事物之间的关系用联系来描述。
(1)实体
客观存在并且可以相互区别的“事物”称为实体。实体既可以是可触及的对象,如一个学生、一本书等;也可以是抽象的事件,如学生选课、一次借书活动等。
(2)属性
属性是指实体某一方面的特征。例如学生的学号、姓名、性别、出生日期等。属性有“型”和“值”之分。“型”为属性名,如学号、姓名、性别、出生日期等都是属性名;“值”为属性的具体内容,如40501002、赵子博、男、1989年2月3日。这些属性值的集合则表示了一个学生实体。
(3)实体型
可以表述一个实体类型的若干个属性所组成的集合称为实体型。实体型通常用实体名和属性名集合来表示。例如,学生(学号,姓名,性别,出生日期)就是一个实体型。
(4)实体集
实体集是相“类似”的实体组成的一个集合,如某学校所有的学生、某单位所有的汽车等。
(5)联系
现实世界中,事物内部以及事物之间存在着联系,这些联系同样也要抽象和反映到信息世界中来,在信息世界中,联系被抽象为实体型内部的联系和实体型之间的联系。
实体型内部的联系通常是指实体的各属性之间的联系;实体型之间的联系通常是指不同实体集之间的联系。两个实体型之间的联系可以分为三类:
① 一对一联系(1:1)
实体集A中的一个实体与实体集B中的一个实体相对应,反之,实体集B中的一个实体也与实体集A中的一个实体相对应。例如,班级与班长,观众与座位,病人与病床。
② 一对多联系(1:n)
实体集A中的一个实体可以与实体集B中的多个实体相对应,而实体集B中的一个实体只与实体集A中的一个实体相对应。例如,班级与学生,公司与员工。
③ 多对多联系(m:n)
实体集A中的一个实体可以与实体集B中的多个实体相对应,而实体集B中的一个实体也可以与实体集A中的多个实体相对应。例如,学生与课程,教师与学生。
(6)E-R模型图
对实体-联系模型,可以采用图形(E-R图)来描述实体、属性和联系3要素。作图方法:
① 用矩形框表示实体,并在框内写上实体的名字;
② 用菱形框表示实体间的联系;
③ 用椭圆框表示实体或联系的属性,并在框内标明属性的名称;
④ 用线段连接菱形框与矩形,并在线段上注明联系的类型(1:1、1:n、m:n)。
图1-6所示的E-R图描述了学生管理系统的实体—联系模型。

图1-6 学生管理系统的实体—联系模型图
3. 数据模型
数据模型反映了信息从信息世界到机器世界的转换,是指设计数据库系统时,用图或表的形式描述计算机中数据的逻辑结构,以及信息在存储器上的具体组织。常见的数据模型有层次模型、网状模型以及关系模型。
(1)层次模型
利用树型结构表示实体及其之间联系的模型称为层次模型,该模型体现实体间的一对多联系。图1-7是一个层次模型的例子,表示大学、学院、系之间的联系。

图1-7 层次模型示意图
支持层次数据模型的数据库管理系统称为层次数据库管理系统,在这种系统中建立的数据库是层次数据库。层次模型的数据库管理系统是最早出现的数据库管理系统,典型代表软件是IBM公司的IMS(Information Management System)系统。
(2)网状模型
利用网状结构表示实体及其之间联系的模型称为网状模型,该模型体现实体间的多对多联系,具有很大的灵活性。图1-8是一个网状模型的例子,表示某汽车制造厂中技术员、图纸、工人、工件之间的联系。

图1-8 网状模型示意图
支持网状数据模型的数据库管理系统称为网状数据库管理系统。在这种系统中建立的数据库是网状数据库。网状数据库管理系统也是较早出现的数据库管理系统。
在以上两种数据模型中,各实体之间的联系是用指针实现的。其优点是查询速度快。但是当实体集和实体集中实体的数目都较多时,众多的指针使管理工作变得相当复杂,对用户来说,使用和维护都比较麻烦。
(3)关系模型
用二维表格描述实体及实体间的联系,数学上把这种二维表格的数据形式称为关系,因此把利用二维表来表示实体及实体间联系的模型称为关系模型。
在关系模型中,无论是实体,还是实体间的联系,都统一用二维表格描述。图1-9就是一个关系模型的例子。

图1-9 关系模型示意图
支持关系数据模型的数据库管理系统称为关系数据库管理系统(RDBMS),如微软公司推出的Visual FoxPro(以下简称为VFP)系统。使用关系数据库管理系统建立的数据库是关系型数据库。
由于关系模型结构简单,但描述能力强,还有严格的数学理论基础,因此,基于关系模型的数据库是当今使用最为广泛的数据库。
实际的数据处理过程中,为了将现实世界中的具体事物抽象、组织为某一数据库管理系统支持的数据模型,提倡先将现实世界的事物及联系抽象成信息世界的概念模型(如E-R模型),然后再抽象成计算机世界的数据模型(如关系模型)。但是在实际数据库应用过程中,很多设计者往往跨越概念模型的描述,而直接进入数据模型的描述。
1.1.5 关系数据库
当今,大多数数据库为关系模型数据库。1970年E.F.Codd提出了关系数据模型与一系列数据库方法和理论,为数据库技术奠定了理论基础。关系数据库理论是十分成熟的理论,以下介绍关系数据库理论的一些基本概念。
1. 关系数据库的基本概念
关系数据模型的最大特点是描述的一致性,就是既可以用表格来表示实体,又可以用表格形式来表示实体与实体间的联系。图1-10是一个学生管理数据库的关系数据模型实例。

图1-10 关系模型实例
关系数据库中涉及的基本概念有关系、属性、域、元组、关键字、主关键字以及外部关键字等。
(1)关系
通常将一个没有重复行、重复列的二维表看成一个关系,即概念模型中的实体集。每个关系都有一个关系名。在VFP中,一个关系存储为一个表(Table)文件,其扩展名为.DBF。即从现实世界到机器世界的对应关系为:实体集—关系—表文件。
(2)属性
关系中的一列称为一个属性,即概念模型中实体的属性,它在VFP中称为字段(Fields),是表中不可再分的数据单位,所以又叫数据项。在现实世界、信息世界、计算机世界这三个世界中的对应关系为:实体的属性——关系的属性——表中的字段。属性包含有属性型和属性值,它们对应字段中的字段名和字段值。
(3)域
属性(字段)值的取值范围称为域。同一属性下的所有值都必须在相同域中取值。例如,字符型“性别”字段的域是“男”和“女”。
(4)元组
关系(二维表)中的一行称为一个“元组”,即概念模型中的实体,在VFP中叫做记录(Record)。在三个世界中的对应关系为:实体——元组——记录。
(5)关系模式
对关系的描述称为关系模式,即概念模型中的“实体型”。一个关系模式对应一个关系结构,由关系名和属性集合组成。在VFP中,关系结构表示为表结构,对应关系为:实体型——关系模式——表结构,它们的写法如下:
关系模式:关系名(属性1,属性2,…,属性n)
表结构:表名(字段1,字段2,…,字段n)
如图1-11所示,Course为表名;课程号、课程名称、学时、学分为字段名;020108、数据结构、54、3为字段值;每一行所有的字段值构成一条记录。该表的表结构为:

图1-11 关系与表
Course(课程号,课程名称,学时,学分)
(6)实际关系模型
一个具体的关系模型通常由若干个有联系的关系模式组成,叫做实际关系模型。在VFP中,数据库文件就代表一个实际关系模型,它由多个相互之间存在联系的表、视图等组成。关系数据库(Relational DataBase)文件的扩展名为.DBC。图1-12显示的是在数据库设计器中打开的“学生管理.DBC”数据库。

图1-12 一个数据库实例
(7)关键字
实际关系模型中的每个关系都必须有一个(或一组)属性可以唯一确定关系中的每个记录,这个属性或属性组就称为关键字。在VFP中,不允许关键字为空值或在不同记录中有重复值。利用关键字,VFP可以迅速关联多个表中的数据。例如,在学生管理数据库中,把学号、课程号分别指定为STUDENT表和COURSE表的关键字。把“学号+课程号”指定为SCORE表中的关键字。
一个关系中可以有多个关键字。例如,可以给STUDENT表增加一个“身份证号”字段,那么学号、身份证号都可以做该表的关键字。此时把它们统称为候选关键字。
(8)主关键字和外部关键字
当一个关系有多个关键字时,若选定其中的一个作为当前唯一标识记录的依据,则该关键字就称为主关键字,或叫主码。
若某个字段不是本表的主码,但却是另外一个表的主码,则称这样的字段为该表的外部关键字,简称为外码。外码中允许有空值或对不同记录有重复值。例如,SCORE表中的学号和课程号。它们在SCORE表中都不是主码,但却分别是STUDENT表和COURSE表的主码,所以,SCORE表中的学号和课程号都称为该表的外码。
2. 关系的性质
在关系模型中,一个关系(或一个二维表)必须具备如下的性质。
① 关系必须规范化,属性不可再分割:规范化是指关系模型中每个关系模式都必须满足一定的要求,最基本的要求是每个关系必须对应一个二维表,每个属性值必须是不可分割的最小数据单元,即一列不能再分,表中不能再包含表。如表1-1所示的工资表就不是一个关系,需要规范化,即应该去掉“应发工资”项,将“基本工资”、“工龄工资”、“职务工资”直接作为基本的数据项,如表1-2所示。
表1-1 工资表

表1-2 关系型工资表

② 列是同质的,即每一列是同一类型的数据,来自同一个域。
③ 在同一个关系中,不能出现相同的属性名,即在同一个表中不允许有相同的字段名。
④ 在同一个关系中,不能有内容完全相同的元组,即在同一个表中不允许有完全相同的记录。
⑤ 在同一个关系中,属性的次序和元组的次序无关紧要,可以任意交换,不影响关系的实际含义及关系模式。
3. 关系的运算
用户经常需要对关系数据库进行搜索,查找数据,这就需要进行一定的关系运算。最基本的关系运算有三种:选择、投影和联接。三种运算可以单独使用也可以同时使用。
(1)选择(Select)
选择就是筛选,是指从关系中筛选出满足给定条件的元组的操作。选择运算是从记录的角度进行的运算,相当于在表中抽取记录。经过选择运算得到的结果可以形成一个新的关系,其关系模式不变,选择出的新的关系实际上就是原关系的一个子集。例如,选择STUDENT表中所有女同学的信息,如图1-13所示,这种操作就叫做选择运算。

图1-13 选择运算示例
在VFP中,选择运算通常通过命令中的FOR或WHILE子句实现。
(2)投影(Project)
投影是指从一个关系中选择若干属性组成新关系的操作。
投影是从列的角度进行的运算。经过投影运算可以得到一个新关系,其关系模式所包含的属性个数往往比原关系少,或者属性的排列顺序不同,体现了关系中列的次序无关紧要这一特性。
若投影后出现相同的行,则只能取其中的一行,即消除重复行。
例如,从STUDENT表中查询所有学生的学号、姓名、性别、专业所进行的操作就属于投影运算,结果如图1-14所示。

图1-14 投影运算示例
在VFP中,投影运算通常通过命令中的FIELDS子句实现。
(3)联接(Join)
联接运算是指把两个相关联的关系模式拼接成一个新的关系模式,生成的新关系中包含满足联接条件的元组,它是两个关系的横向结合。
在VFP中,联接运算通过JION命令或SQL的SELECT命令来实现,联接过程通过关联条件来控制,关联条件中将出现两个表中的公共字段名或者有相同语义、可比的字段名,联接结果是满足关联条件的所有记录。最常用的联接运算是“内部联接(INNER JOIN)”,也叫等值联接。它按照两个表中公共字段值对应相等为条件进行联接操作,即把两个表中公共字段值相等的记录联接起来。
例如,图1-15中的查询所示的关系就是由STUDENT表和ROOM表按学号值相等为条件进行联接,再按8个字段进行投影的结果。

图1-15 联接运算示例