《数据库及其应用》学习笔记

作者名:不详 来源:网友提供 06年6月8日

 

FoxPro的特点、文件类型及主要技术指标 数据库应用篇结合实际关系数据库管理系统FoxPro,学习数据库关系体统应用。

FoxPro的特点
Windows应用程序风格 运行于Windows操作系统下的FoxPro是一个庞大的、集成化的系统软件,具有一般Windows应用程序共有的特点,也就是它将系统提供的功能做成统一的菜单界面,用户只要用鼠标点击菜单,就可以执行相应的命令。

非编程接口 利用菜单、对话框等操作,用户不需要编写任何程序,就能方便地建立、使用和维护数据库。

多用户功能 FoxPro是一种将单用户与多用户使用环境结合为一体的版本。
开发工具 FoxPro提供了强有力的应用程序开发工具如:屏幕生成器、菜单生成器、报表生成器等。

快速查找机制 FoxPro采用了一种称为"Rushmore"数据查找优化技术,使数据查询速度比一般方法快许多,而且数据库越大,速度优势越明显。

编译功能 提供了高级语言接口 对SQL的支持
FoxPro的文件类型 在Foxpro中,用户建立的应用系统一般由多种类型文件构成,各类文件均是磁盘文件,需要时才调入内存使用。文件名由1-8个字符组成,首字符可以是字母、数字或下划线;扩展名由1-3个字符构成,用于区分文件类型。 下面我们用表格列出FoxPro中各类文件及其扩展名:
数据库文件 (.DBF)
文本文件 (.TXT)
备注文件 (.FPT)
格式文件 (.FMT)
索引文件 (.IDX)
报表格式文件(.FRX)
复合索引文件(.CDX)
内存变量文件(.MEM)
命令文件 (.PRG)
项目文件 (.PJX)

FoxPro的主要技术指标 我们只给出一些比较重要技术指标,关于其它的指标,大家可以查看有关书籍。
关于数据库文件、索引文件与字段
每个数据库文件最大记录数 10亿
每一记录最大字符数 655000
每一记录最大字段数 255
字符型字段最大字符数 254
数值型字段长 20
数值计算精度 16
可同时打开的数据库文件数 225
一般索引文件关键字的字节数 100
复合索引文件关键字的字节数 240
随数据库文件打开的索引文件数 不限
数据库文件关联数 不限

FoxPro中数据类型、常量 、变量、 运算符与表达式
象许多高级语言一样,FoxPro也提供多种数据类型,下面我们就来学习一下:
数据库中存储着大量不同类型的信息,这些不同类型的信息要用不同的类型的数据来表达。只有类型匹配的数据才能彼此参与运算,所以掌握数据类型的概念是至关重的。
FoxPro的数据类型
字符型(CHARACTER,简写为C)字符型数据不能进行数学运算,但可以进行大小的比较和字符的连接。
数值型(NUMERIC,简写为N)由数字0-9、小数点和正负浩组成,最大宽度为20,一般用来进行运算。
浮点型(FLOAT, 简写为F)与数值型数据类似,最大宽度也为20但能表示更大的数和更高的精度。
逻辑型(LOGICAL,简写为L)它只有真、假两个值,用于表示命题的成立与不成立。常用".Y."或 ".T."表示成立,用".N."或 ".F."表示不成立。逻辑型数据的宽度固定为1。
日期型(DATA,简写为D)用于表示日期数据,系统默认格式为:MM/DD/NN(月/日/年)固定长度为8。
备注型(MEMO,简写为M)其固定长度为10,此数据实际上是指向存放备注内容的地址指针对于含有备注型数据的库文件, FOXPRO将自动生成一个与库文件同名但扩展名为“.FPT”的备注文件。
通用型(GENERAL,简写为G)用于描述图形、图象 、声音、 电子报表等类型的数据,宽度固为10,它实际上是指向图形 、图象、 声音等文件的地址指针。
常量 量是指数值大小始终固定不变的量。FOXPRO中提供了四种类型的常量。下面我们用表格来介绍FoxPro用到的各种类型的常量。
字符型常量 用双引号("")或单引号('')或方括号([ ])三种定界符括起来的字符串都 被认为是字符型常量。
数值型常量 可以是整数或实数,允许用日常记数法或科学记数法表示。
日期型常量 可用{年/月/日}形式表示,也可通过CTOD()转换函数将字符串常量转换成日期型常量,日期型数据可进行加减运算。
逻辑型常量 它仅有真、假两个逻辑值,其表示法与逻辑型数据相同。
变量 变量是指在程序执行过程中其值可以发生变化的量。 FOXPRO中有两种不同性质的变量。即字段变量和内存变量。
变量名由不超过10个字母、数字和下划线组成,且必须以字母开头,但系统变量一般以下划线开头。
字段变量---依附于数据库文件而存在,在FOXPRO中的字段变量有以下七种数据类型: 字符型、数值型、浮点型、逻辑型、日期型、备注型、通用型。
内存变量---不依附于数据库文件而独立存在,在FOXPRO中的内存变量有以下五种数据类型: 字符型、数值型、浮点型、逻辑型、屏幕型(SCREEN,简写S)。
注意:字段变量与内存变量同名时,字段变量优先。但可通过在内存变量名前加前缀M.或M-> 区别.
表达式 表达式是指通过各种运算符连接的常量、字段变量、内存变量、函数等运算对象所构成的有意义的算式。表达式运算后总能得到一个具体的值,该值的数据类型可能是:字符型、数值型、日期型、逻辑型四种之一。
FoxPro命令的一般格式
命令格式 FoxPro命令一般由命令名及通过字句所指定的操作对象、操作范围、操作条件等若干选择项所构成,其一般格式如下:
<命令名>[<表达式>][〈范围〉][FOR<条件>][WHILE〈条件〉][TO FILE<文件名>|
TO PRINTER|TO ARRAY <数组表>|TO <内存变量>]
[ALL [LIKE|EXCEPT<通配符>]][IN<别名>]
其中 命令名:是表示完成何种操作的英文动词;
表达式表:是一个或多个由逗号隔开的表达式,用来表示该命令的操作对象;
范围:表示该命令对数据库文件记录的操作范围,有以下四种选择:
RECORD N 对第N条记录进行操作
NEXT N 对从当前记录开始的N条记录进行操作
ALL 对所有记录进行操作
REST 对从当前记录开始到文件结束的所有记录进行操作
FOR<条件>:对所有满足"条件"的记录进行操作;
WHILE<条件>:对直到不满足条件的记录为止的所有已满足条件记录进行操作
TO子句用来控制操作结果的输出,可以输出到文件、打印机、数值、内存变量;
ALL[LIKE|EXCEPT<通配符>]:用来指明包括或不包括与通配符相匹配的内存变量或字段变量; 通配符指“?”号和“*”号。“?”号可以与任何一个字符相匹配,而“*”号则可以与任何一串字符相匹配
IN<别名>:该子句容许在当前工作区下操作其他工作区中的数据库文件。
命令的书写规则 上述命令的一般格式中:
< >尖括号中的内容表示命令中用户的定义项;
[ ]方括号中的内容表示可选项。视要求而定;
| 分隔符隔开的项表示多项选一;
注意:书写命令时上述符号不应包含在命令中
FOXPRO中命令的书写必须遵循以下规则:
1、每条命令必须以命令名开子句的顺序可任意;
2、命令名可缩写为前四个字符;
3、命令的各部分之间至少要用一个空格分开;
4、为清楚起见,关键字一律用大写,用户定义名用小写;
5、 命令行可分行书写,行末用“ ;”作为当前行的续行符。
命令的执行方式
FOXPRO中提供两种命令的执行方式,即为:立即方式和程序方式。
立即方式:是一种交互方式,用户输入一条命令,FOXPRO立即检查命令是否正确,如不正确,则指出错误的原因;如命令正确,则立即执行该命令,并显示执行结果
程序方式:又称命令文件方式。此种方式要求用户事先根据任务编写程序,程序是一系列命令的集合,将其命名并存放到磁盘文件中,然后执行该命令文件。
内存变量的操作
在FOXPRO中,内存变量的常见用法如下:
.转储数据(暂存程序运行的中间结果,需要时将其转储到数据库中去。)
.作为计算的参数参与数据运算。
.作为控制程序运行的参数。
内存变量的赋值
内存变量赋值命令格式如下:
格式1: STORE <表达式> TO <内存变量表>
功能: 计算表达式的值,并依次送给内存变量表中的每个变量 。
常用于将同一值 赋予多个内存变量。
格式2: <内存变量> = <表达式>
功能: 计算表达式的值,然后赋予内存变量。
格式3: SAVE SCREEN TO <屏幕型内存变量>
RESTORE SCREEN FROM <屏幕型内存变量>
功能: 前者是将当前屏幕映像存放在指定的屏幕型内存变量中;
后者是重现屏幕型 内存变量保存的屏幕映像。
内存变量的释放 内存变量的释放即删除内存变量。
格式1: RELEASE <内存变量>
功能: 释放内存变量表中所指定的内存变量。
格式2: RELEASE ALL[LIKE|EXCEPT<通配符>]
功能: 如无可选项,释放当前内存中所有的内存变量;如含有可选项[LIKE<通配符>],则释放与通配符相匹配的内存变量;如含有可选项[EXCEPT<通配符>],则释放与通配符不相匹配的所有内存变量。
格式3: CLEAR MEMORY
功能: 清除当前内存中的所有内存变量。
格式4: CLEAR ALL
功能: 清除当前内存中的所有内存变量,还关闭所有文件,并将1号工作区设为当前工作区
内存变量文件 存放到内存变量中的信息,会因为掉电而全部丢失,要保存这些内存变量,可将其存储 到磁盘文件中,以后需要时再恢复。
(1)内存变量文件的建立
格式:SAVE TO 〈内存变量文件名> [ALL [LIKE|EXCEPT<通配符>]
功能:把指定的内存变量存入指定的内存变量文件中,内存变量文件扩展名为“.MEM”。
(2)内存变量的恢复
格式:RESORE FROM 〈内存变量文件名〉[ADDITIVE]
功能:如没有可选项[ADDITIVE],则先清除当前内存中所有的内存变量, 再将保留在内存变量文件名中的变量调入内存;如命令中含有ADDITIVE可选项, 则保留当前内存变量,再把内存变量文件中保留的变量追加到内存中。
内存变量的显示
格式1:LIST MEMORY [TO PRINT]
格式2:DISPLAY MEMORY [TO PRINT]
功能: 上述两命令的功能基本上相同,都是在屏幕上显示所有的内存变量,包括系统内存变量。不同的是LIST滚屏显示完所有的变量,而DISPLAY满屏后可 暂停,按任意键再继续显示。 如果带有可选项[TO PRINT],则将显示结果同 时在打印机上打印出来。
内存变量的输出
如果只想看一下自定义变量的当前值,可以利用“?”或“??”数据输出命令。
格式:?|??[<表达式表>]
功能: 首先计算表达式表中每个表达式的值(表达式之间常用逗号分隔),再将表达式的值输出到FOXPRO主窗口、活动用户定义窗口或打印机。各表达式可以是 不同类型的常量、变量、函数或表达式;若无表达式则输出一个空行。若选用? ,则从当前光标所在行的下一行第0列开始显示;若选用?? 则从当前光标所在处开始显示。
说明: 这是?|??命令的最简单的用法,又称非格式化输出命令,因为它只能在当前光标处输出数据,并且不能控制数据的输出宽度和格式。
数据库的基本操作 在数据库应用系统中,所有的数据操作都是围绕数据库进行的。在FoxPro中称关系为数据库文件,又称为"表",文件的扩展名为.DBF。数据库的基本操作有:(我们用一个图形来表示)

下面我们就来学习数据库的基本操作:
建立数据库 记录的输入与显示
数据库文件的打开与关闭 数据库文件结构的显示与修改 记录的定位 记录的插入、删除与恢复 记录的修改 数据库文件的排序与索引 数据查询 数据统计 数据库文件的复制 多重数据库文件操作

记录的输入与显示
在定义了库文件的结构而未输入数据时,此时的库文件只是一个空框架,也就是只有结构而没有数据,下面我们就来学习数据的输入。记录的输入有两种方法:立即输入和追加纪录
立即输入 当定义库文件结构结束后,系统会提示:“input data record now?”
如果回答Yes,则进入输入记录状态。
追加记录 追加记录用于向已经有数据的库文件添加一些新记录,所添加的记录总是依次放在库文件的尾部。
格式:APPEND [BLANK]
功能:在当前打开的库文件的末尾追加记录
说明:命令中若没有BLANK选项,则项文件追加记录,若有只追加一个所有字段均为"空"的空白记录
记录的显示
显示记录是最常用的命令,可显示全部记录或显示满组条件的部分记录,也可显示记录的全部字段或显示符合条件的部分字段的内容。其命令格式如下:
格式:LIST|DISPLAY[<范围>][FIELDS<字段表名>][FOR<条件>][WHILE<条件>][OFF][TO PRINTER|FILE<文件名>]
功能:列表显示库文件记录
说明:(1)命令中的LIST与DISPLAY功能基本相同,都是显示记录,区别是:DISPLAY当显示一屏后暂停,提示:“Press any key continue...”,LIST 则是滚屏显示直到记录显示完为止。
(2)<范围>指显示记录的范围,省略时默认为ALL(全部的数据记录);
(3)如果没有指定字段名表,则显示全部的字段;否则显示指定的字段;
(4)显示的格式是每字段占一列,列标题为字段名;
(5)如果没有指定OFF,则每个记录最左边同时显示记录号(记录号是由系统根据记录到来的先后自动给定的);如果指定了OFF,则不显示记录号;
(6)若指定了FOR<条件>或WHILE<条件>,则只显示满足条件的记录;
(7)当指定TO PRINTER时,显示结果同时在打印机上输出;
(8)当指定FILE<文件名>时,显示结果将同时以文件形式保存在磁盘文件中;
(9)当没有指定范围和条件时,LIST显示全部记录;而DISPLAY只显示当前记录。
数据库文件的打开与关闭
任何数据库文件,在使用前必须打开,操作之后需要关闭。打开,是把数据库文件从磁盘调入内存;关闭,是把数据库文件从内存保存到磁盘,同时释放占用的内存和工作区
数据库文件的打开
格式:USE[<库文件名>|?][ALIAS<别名>]
功能:打开指定的数据库文件
说明:(1)USE 命令的用法很灵活,上面的格式是USE命令的一般格式;
(2)命令中的文件名是要打开的库文件名。若省略扩展名,系统默认为 .DBF;
(3)如果没有给出文件名而指定了"?",系统会显示打开库文件对话框,要求用户选择要打开库文件;
(4)ALIAS可选项用于为库文件指定一个别名,以便在其他工作区访问库文件时使用,若不使用,系统默认为与库文件名相同;
(5)若库文件中含有备注型字段,则打开库文件时,相应的备注文件(.FPT)同时自动打开;
(6)刚建立的库文件自动处于打开状态,不需要使用USE命令。
数据库文件的关闭 关闭数据库文件有多种命令格式,下面我们来学习两种:
一:关闭当前工作区打开的库文件
格式:USE
功能:关闭当前工作区打开的库文件。
说明:(1)在USE命令后不指定任何选择项和子句时,则关闭当前工作区打开的库文件。
二:关闭当前打开的所有的库文件
格式:CLOSE DATABASES
功能:关闭所有打开的库文件,同时关闭索引文件、格式文件,将工作区1置为当前工作区
说明: (1)CLOSE是一个关闭文件的命令,其后若带上指定的文件类型,则表示关闭指定类型的文件。CLOSE可以带的文件类型如下表所示:
CLOSE INDEXES &&关闭索引文件(.IDX) CLOSE FORMAT &&关闭格式文件 CLOSE PROCEDURE &&关闭过程文件 CLOSE ALTERNATE &&关闭后备文本文件 CLOSE ALL &&关闭所有工作区中打开的所有类型的文件

数据库文件结构的显示与修改
数据库文件结构的显示
格式:LIST|DISPLAY STRUCTURE [TO PRINTER|TO FILE<文件名>]
功能:显示当前打开的库文件结构。
说明: (1)命令中的LIST STRUCTURE和DISPLAY STRUCTURE都是用来显示库文件结构的,区别与显示记录是一样的,LIST为连续滚屏显示,DISPLAY为显示满一屏后,按任意键继续;
(2)若指定TO PRINTER可选项,则同时将显示结构送到打印机输出;
(3)若指定TO FILE,则将显示结果同时输出到磁盘文件;
(4)所显示的结构信息包括:文件路径、文件名、记录数、库文件最后修改日期、备注文件的大小和每个字段的字段名、类型、宽度及小数位数;
数据库文件结构的修改
格式:MODIFY STRUCTURE
功能:对当前工作区打开的库文件结构进行修改。
说明:(1)当键入该命令后,屏幕出现一个对话框
(2)修改库文件结构时,FoxPro首先会为库文件(.DBF)和它的备注文件(.FPT)分别生成一个与库文件同名而扩展名为.BAK和.TBK的备份文件;
(3)修改结构后,原库文件记录自动从备份文件恢复到库文件和备注文件;
(4)如果修改了字段类型,则原库文件中所有的记录该字段的数据不再保留;
(5)不能同时修改字段名和该字段的宽度,否则会丢失数据;
记录的定位 在学习记录的定位之前,我们先来学习一下记录指针的概念。
记录指针 我们知道一个数据库文件可以有很多个记录,在访问时究竟对那条记录进行访问呢?这就存在一个记录定位的问题。
FoxPro对任何打开的数据库文件,都提供了一个记录指针并根据用户的操作始终维护这个指针。指针指向的记录称为当前记录,我们一般都是对当前记录进行操作。
注意:一个刚打开的数据库文件的记录指针,总是指向第一个记录。
指针的移动 指针的移动有绝对移动和相对移动两种方式。
一:绝对移动 绝对移动是将记录指针直接定位到要指定的记录上。
格式一:GO|GOTO [RECORD] <数值表达式> [IN <工作区号>|<文件别名>]
功能:直接移动记录指针到指定的记录上。
说明:(1)命令中的GO与GOTO都是绝对移动指针的命令,具有同样的效果;
(2)<数值表达式>的值代表要指向的记录号,如果运算结果不是整数,则自动取整;
(3)如果数值表达式的值大于库文件记录总数,则系统会出现:
"Record is out range" 错误信息;
格式二:GO|GOTO TOP|BOTTOM[IN<工作区>|<文件别名>]
功能:移动记录指针到库文件第一个记录(TOP)或最后一个记录(BOTTOM),IN子句功能同上。
二:相对移动
相对移动是以当前记录为基准的记录定位命令。
格式:SKIP[<数值表达式>][IN<工作区号>|<文件别名>]
功能:相对于当前记录移动记录指针。
说明:(1)当<数值表达式>值为正时,记录指针向后移动;<数值表达式>值为负时,记录指针向前移动;
(2)移动的记录数等于表达式的值。
记录的插入、删除与恢复

记录的插入 插入记录是以当前记录为基准的,它是先将记录指针指向要插入的位置,然后执行插入操作。
格式:INSERT [BEFORE][BLANK]
功能:在当前记录位置插入一条记录。
说明: (1)若命令中没指定可选项,则把记录插在当前记录之后;
(2)若命令中指定了可选项BEFORE,则把记录插在当前记录之前。
删除记录 我们知道,计算机中无用的文件可以进行删除操作,库文件中的无用的记录可不可以进行删除呢?答案是肯定的。
记录的删除分为:逻辑删除和物理删除。
逻辑删除和物理删除的区别是:逻辑删除只是在被删除的记录的第一个字节前加上了删除标记"*"号,并没有从库文件中剔除,是可以恢复的;物理删除是把记录真正从数据库中剔除,收回存储空间。
逻辑删除记录
格式:DELETE[<范围>][FOR<条件>][WHILE<条件>]
功能:对指定的记录加上删除标志。
与逻辑删除有关的系统参数
格式: SET DELETED OFF/ON
功能: 控制对逻辑删除记录的处理方式。
恢复逻辑删除记录
格式: RECALL [<范围>][FOR<条件>][WHILE<条件>]
功能: 恢复被加上删除标记的记录为正常记录。
物理删除
格式: PACK
功能: 真正删除所有已被逻辑删除的记录
物理删除所有的记录
格式: ZAP
功能:真正删除当前打开的库文件中的所有记录。
记录的修改
编辑修改
格式: EDIT|CHANGE[<范围>][FIELDS<字段名表>][FOR<条件>][WHILE<条件>]
功能: 编辑修改库文件记录。
说明: (1)EDIT和CHANGE功能完全相同,都是一种以全屏幕编辑方式修改记录的命令。
(2)若命令中不带可选项,则从当前记录开始显示所有字段值,可使用光标移动键、TAB键或用鼠标移动光标到指定的字段修改字段值;用PgUp和PgDn键可在记录间移动。
(3)若命令中给出字段名表,则只能修改指定的字段值。
(4)备注字段只显示其类型,要修改内容可按<Ctrl+PgDn>、<Ctrl+PgUp>进入备注字段编辑窗口,修改后保存并退出修改。
浏览编辑修改
格式:BROWSE [〈范围〉][FIELDS〈字段名表〉][FOR〈条件〉][WHILE〈条件〉]
[FREEZE〈字段名表〉] [NOAPPEND][NODELETE][EDIT]
[FONT〈字符表达式〉[,〈数值表达式〉]]
功能: 浏览、编辑、修改和追加记录。
说明:(1) BROWSE命令以二维表的形式每行显示一条记录,在浏览过程中可编辑修改记录内容和追加新的记录。
(2) 修改备注字段内容与EDIT命令中介绍的操作方法完全相同。
(3) 其中FREEZE可选项是指定可修改记录重新排列生成一个新的有序的数据库文件。
格式:SORT TO <文件名> ON <字段1> [/A][/C][/D][,<字段2>[/A][/C][/D]...]
[<范围>][FIELDS<字段名表>][FOR<条件>][WHILE<条件>]
功能: 对当前库文件的记录按指定的范围和满足的条件,根据关键字段值的大小重新排列记录顺序,结果存入新的库文件中。
说明: (1) 本命令只改变记录的排列顺序。
(2) 若按多关键字排序时,先按<字段1> 的值排序,对字段1的值相同的记录再按<字段2>的值排序,依次类推,其中关键字只能是C型、D型和N型。
(3) 命令中的可选项/A和/D分别表示按升序排列或降序排列,缺省为升序; /C表示不区分大小写。
(4) 若没有指定范围和条件,则表示对当前工作区中库文件的所有记录进行排序。
举例: SORT TO dapx ON 基本工资 /D, 出生日期 /A
[按基本工资降序排列,基本工资相同时再按出生日期升序排列,结果存入dapx.DBF中]
索引文件的建立
索引文件建立了索引项(索引所基于的字段)值与记录号的对应关系,它有利于加快数据的查找速度。
我们以扩展名为.IDX的单项索引文件为例来说明索引文件是怎样建立的。
格式:INDEX ON 〈关键字表达式〉TO 〈索引文件名〉[FOR〈条件>]
[COMPACT][UNIQUE][ADDITIVE]
功能:按关键字表达式为当前打开的库文件建立一个单项索引文件。
说明:用一个字段索引时,字段类型可以是C、N、D型;而多字段索引时必须是C型。
索引文件的打开与关闭
有两种方法打开索引文件,如下:
格式1: USE <库文件名> INDEX <索引文件名表> &&打开库文件并打开所有的索引文件
格式2: SET INDEX TO <索引文件名表> &&已打开库文件,再打开所有的索引文件
数据库可同时打开25个索引文件。其中也有两种方法关闭索引文件,如下:
格式1: SET INDEX TO
格式2: CLOSE INDEX
指定主索引
格式: SET ORDER TO [ 〈数值表达式〉|〈索引文件名〉]
功能: 改变原来的主索引,主索引由〈数值表达式〉的值或〈索引文件名〉确定。
重建索引文件
格式: REINDEX [COMPACT]
功能: 在当前的库文件上进行增、删、改操作后,对建立而未打开的索引文件重新索引。
数据查询 数据查询是从大量记录中找出满足条件的记录,把记录指针定位在要查询的记录上。
其中数据查询有两种:顺序查询和索引查询。
顺序查询 顺序查询是一种按记录的排列顺序,在库文件中逐个的查找满足条件的记录,速度较慢。
格式:LOCATE [<范围>][FOR<条件>][WHILE<条件>]
功能: 将记录指针定位于第一个满足条件的记录上。
说明:若选用[FOR<条件>],则在指定范围内从第一个记录开始,依次查找满足条件的记录。若省略范围,记录指针定到文件末尾。在顺序查找的基础上,要想继续查询则用继续查询命令CONTINUE。
格式:CONTINUE && 继续查询下一个满足条件的记录
说明: CONTINUE与LOCATE命令配合使用。
索引查询 索引查询是在库文件建立了索引的基础上进行的,比顺序查找的速度要快的多。
索引查询有两种查询命令:FIND命令和SEEK命令。
[FIND命令]
格式:FIND <字符串>|<数值常数>
功能: 在索引文件中查找索引关键字值与指定字符串或数值常数相等的记录。
说明:查找的索引关键字值只能是字符串或数字。
[SEEK命令]
格式: SEEK〈表达式〉
功能: 在索引文件中查找索引关键字值与指定表达式的值相等的记录。
说明:(1) SEEK命令与FIND命令功能相似,但SEEK较为灵活方便。FIND只能查找C、N型常量,而SEEK可查询包含C、D、L、N型在内的各种数据。
(2) 若要查找满足条件的所有记录,可用SEEK命令与SKIP 1命令配合使用。其中SKIP 1命令是将指针下移一条记录。

数据统计

数据统计包括记数、求和、求平均值和汇总等。下面我们逐一学习各种命令。

计数器命令
格式: COUNT [<范围>][FOR<条件>][WHILE<条件>][TO <内存变量>]
功能: 对当前工作区打开的库文件,按指定范围统计满足条件的记录,并将结果存入内存变量。
说明: 若省略范围,则统计库文件中所有的记录;若未指定条件,则无条件统计指定范围内的所有记录;若未指定内存变量,则统计结果仅在屏幕上显示。

求和命令
格式: SUM [<范围>][<数值表达式>[FOR<条件>][WHILE<条件>]
[TO<内存变量名表>|TO ARRAY<数组>]
功能: 在当前工作区打开的库文件上,对含有数值型字段的表达式求和,并将结果存入相应内存变量或数组中。
说明: (1)若命令中省略范围和条件,则表示对库文件中所有的数值型字段求和。
(2)若省略TO子句,则表示统计结果仅在屏幕上显示。

求平均值命令
格式: AVERAGE [<范围>][<数值表达式>[FOR<条件>][WHILE<条件>]
[TO<内存变量名表>|TO ARRAY<数组>]
功能: 在当前工作区打开的库文件上,对含有数值型字段的表达式求和,并将结果存入相应内存变量或数组中。

分类汇总命令
格式: TOTAL ON [<关键字表达式>] TO <分类库文件名> [<范围>]
[FIELDS <字段名表>][FOR<条件>][WHILE<条件>]
功能: 按指定的关键字表达式,对库文件中关键字值相等的所有记录中的数值型字段进行汇总求和,存入指定的分类库文件中。
说明:(1)本命令要求事先对库文件按关键字表达式排序或索引且置为有效。
(2)分类库文件与当前打开的库文件完全相同,但不包括备注型字段,汇总时只对字段名表中指定的数值型字段求和,如省略则对所有的数值型字段求和。

数据库文件的复制 库文件的复制
格式: COPY TO <库文件名>[<范围>][FIELDS<字段名表>][FOR<条件>][WHILE<条件>]
功能: 将当前库文件内容复制到指定的库文件中。
说明: 这种复制是把当前库文件中的数据一起复制到指定的库文件中,若省略范围和字段名表则表示复制全部记录和全部字段;若省略WHILE和FOR条件则表示无条件复制。

库文件结构的复制
格式: COPY STRUCTURE TO <新库文件名> [FIELDS<字段名表>]
功能: 将当前库文件的结构复制到新库文件中。
说明:(1) 若省略字段名表则表示新库文件与当前库文件的结构完全相同。
(2) 字段名表中的字段可包含其他工作区的库文件中的字段名,但前面必须加上前缀“别名->”,从而可在多个库文件中挑选字段组成新库文件的结构。

库文件与文本数据文件的转换复制
一般高级语言不能直接存取FOXPRO库文件,必须将库文件转换成数据文件;反之,也不能直接使用数据文件,必须将数据文件中的数据转移到库文件中才能使用。

库文件复制成文本数据文件
格式: COPY TO <数据文件名> SDF|DELIMITED [WITH<定界符>][BLANK]
[<范围>][FIELDS<字段名表>][FOR<条件>][WHILE<条件>]
功能: 将当前的库文件数据复制到指定的文本数据文件中。

文本数据文件中的数据复制到库文件
格式: APPEND FORM <数据文件名> SDF|DELIMITED [WITH<定界符>][BLANK]
[FOR<条件>][FIELDS<字段名表>]
功能: 将指定数据文件中符合条件的记录追加到当前库文件的尾部。

多重数据库文件操作
工作区概念 工作区实质是在内存中开辟一块用来存放数据库文件记录的区域。
工作区的选择命令
格式:SELECT <工作区号>|<别名>
功能: 选择指定的工作区为当前工作区。
说明: (1)本命令不影响各工作区的记录指针和内容。
(2)从当前工作区访问其他工作区打开的库文件中的某各字段时,要在该字段名前加别名。 形式为:别名-->字段名 或 别名.字段名。

库文件之间的关联 所谓关联,是指将两个或多个在不同工作区中打开的库文件联系起来,以便当一个工作区中的记录指针发生变化时,与之关联的工作区的记录指针也随之相应改变。
格式:SET RELATION TO [<关键字表达式>|<数值表达式>
INTO <工作区号>|<别名>][ADDITIVE]
功能: 对当前工作区的库文件与指定工作区的库文件建立关联。

库文件的连接
格式: JION WITH <别名> TO <新库文件名>[FIELDS<字段名表>][FOR<条件>]
功能: 将当前库文件与别名工作区打开的库文件连接起来,生成一个新的库文件。

库文件的更新
格式: UPDATE ON <关键字段> FROM <别名> REPLACE <字段名1> WITH <表达式1>[,<字段名2> WITH <表达式2>...][RANDOM]
功能: 用另一个库文件中的数据来更新当前库文件。


FoxPro程序设计

FoxPro程序由一系列命令组成,又称命令文件,运行程序就是执行命令文件中的各条命令。本章主要介绍FoxPro程序的建立和运行,以及用于编程的各种命令和程序设计的一般方法。

命令文件的建立、修改和运行

命令文件的建立与修改
格式: MODIFY COMMAND [<命令文件名>][IN WINDOW <窗口名>|SCREEN]
功能: 建立或修改命令文件
说明: 本命令执行时,FoxPro将从磁盘上查找所给出的命令文件

命令文件的运行
格式: DO <命令文件名>
功能: 运行指定的命令文件
说明: FoxPro采用编译方式运行程序,它将“.PRG”为扩展名的源文件,编译成同名但以“.FXP”为扩展名的目标文件再运行。


顺序结构程序设计
顺序结构程序的特点 顺序结构程序是最简单的、也是最基本的程序结构形式,其特点是顺次、逐条地执行程序中的命令。下面我们来学习一下顺序程序设计常用的格式命令:
一:非格式化输入命令
“非格式化输入”指输入数据时,输入数据只能显示在当前窗口光标处,不能控制数据的显示位置,也不能限制数值的范围和格式。FOXPRO中介绍三种此类命令。

ACCEPT命令
格式: ACCEPT [<字符表达式>] TO <内存变量>
功能: 接受从键盘输入的字符型数据,并送到指定的内存变量中。

INPUT命令
格式: INPUT [<字符表达式>] TO <内存变量>
功能: 接受从键盘输入的数据,并送到指定的内存变量中。
说明: INPUT命令与ACCEPT命令类似,不同之处是它可以接受C、N、D、L型等不同类型的数据。

WAIT命令
格式: WAIT [<字符表达式>] TO <内存变量> [WINDOWS[NOWAIT][TIMEOUT<数值表达式>]
功能: 等待从键盘输入一个字符型数据,并送到指定的内存变量中。
总结:以上三种命令都能暂停程序的执行,显示提示信息,等待输入数据并送给内存变量。不同之处在于

ACCEPT只接受字符型数据;INPUT可接受不同类型的数据;WAIT只能接受单个字符。


二: 格式化输入输出命令
“格式化输入输出”是指输入输出数据时,能控制数据的显示位置、数据的类型和宽度。也能限制数值的范围和格式。下面我们来学习一下格式化输入输出命令。

格式化输出命令
格式: @ <行,列> SAY <表达式> [PICTURE<描述符串>][FONT<字体>[,<字号>]]
功能: 从指定的行、列坐标开始,按指定的格式输出表达式的值。

格式化输入输出命令
格式: @ <行,列> SAY <表达式1> GET <内存变量>|<字段> [PICTURE<描述符串>][RANGE<表达式2> [,<表达式3>]] [[OPEN] WINDOW<窗口名>][ENABLE |DISABLE][VALID<逻辑表达式1>][<逻辑表达式2>]
功能: 与READ命令合用,在屏幕指定的位置、按指定的格式显示变量,并等待对变量进行编辑修改,最后将结果存放到变量中。我们以一个具体的实例来学习输入输出格式命令是怎样进行格式的输入和输出的。


[例]:用@...SAY...GET与READ命令编一个程序,按如下画面向职工档案库文件增加一个新记录。

程序清单如下:
SET TALK OFF
CLEAR
@ 1,30 SAY “输入职工记录” FONT “T 宋体”,22
STORE SPACE(4) TO n
STORE SPACE(6) TO name
STORE SPACE(2) TO sex
STORE SPACE(10) TO job
STORE .F. TO retire
wage = 0
STORE CTOD("//") TO birth
USE da
APPEND BLANK
@ 4,10 SAY “编号:” GET n PICTURE “9999”
@ 6,10 SAY “姓名:” GET name PICTURE “aaaaaa”
@ 6,26 SAY “性别:” GET sex PICTURE “aa”
@ 6,40 SAY “出生日期:” GET birth PICTURE “@d”
@ 6,60 SAY “是否已退休?:” GET retire PICTURE “l”
@ 8,26 SAY “职务:” GET job PICTURE “aaaaaaaaaa”
@ 8,60 SAY “基本工资:” GET wage PICTURE “9999.99”range 500,2000
REPLACE 编号 WITH n, 姓名 WITH name ,性别 WITH sex, 出生日期 WITH birth
退休 WITH retire, 基本工资 WITH wage, 职务 WITH job
USE
RETURN

定义文本编辑区 对于备注型字段,可以通过定义一个文本编辑区,先将编辑的内容送入指定的内存变量,再写进库文件备注字段中。
格式: @ <行,列> EDIT <内存变量> SIZE <数值表达式1>,<数值表达式2>
[FONT<宋体>[,<字号>]][SCROLL]
功能: 定义文本编辑区。

控制对象的激活
格式: READ[CYCLE][SAVE]
功能: 激活由@...GET命令或由@...EDIT命令所建立的对象。
总结:格式化输入输出最大的优点在于能控制数据的输入输出位置和格式,有效地利用屏幕空间,设计出用户满意的操作画面。

清屏命令
格式1: CLEAR
功能: 清除整个屏幕。
格式2: @ <行,列>[CLEAR|CLEAR TO <行2,列2>]
功能: 清除屏幕局部区域


FoxPro程序开发工具
FoxPro有许多内容丰富的程序开发工具:菜单生成器(Menu Builder)、屏幕生成器(Screen Builder)等 下面我们来学习一些简单的FoxPro程序开发工具

屏幕生成器 FoxPro程序开发工具
屏幕生成器 屏幕实际上是一个窗口,利用这个窗口实现数据输入、输出、查询、修改、删除等功能。
对象及事件驱动概念

对象 构成应用程序的可操作实体都称为“对象”。

事件 对象能够识别的动作称为“事件”。

事件驱动 事件驱动是一种程序运行机制,它根据操作者的动作控制程序的运行,从而完成相应的功能。

屏幕文件 利用屏幕生成器建立的屏幕程序,包含以下几个相关文件,通过文件扩展名区别:
.SCX屏幕设计时所定义的有关对象的数据库文件。
.SCT与.SCX数据库文件有关的备注文件。
.SPR屏幕生成器生成的屏幕程序文件。
.SPX编译.SPR生成的目标文件。
用户可以通过下面的命令来阅读生成的屏幕程序。
MODIFY COMMAND <屏幕程序文件名.SPR>

创建屏幕的步骤
步骤一: 启动屏幕生成器。可通过FoxPro命令或FoxPro主菜单启动屏幕生成器。
(1)通过命令进入屏幕生成器
格式1: CREATE SCREEN <屏幕文件名>
功能: 建立一个新的屏幕文件。
格式2: MODIFY SCREEN <屏幕文件名>
功能: 修改已存在的屏幕文件。
(2)通过FoxPro主菜单进入屏幕生成器
点击FoxPro主菜单中的File/New,然后在New对话窗口中选择Screen选项, 即可进入菜单生成器。
步骤二: 布置屏幕(利用屏幕生成器中的工具在屏幕上布置对象)。
步骤三: 设置屏幕属性(利用FoxPro主菜单中的Screen中的Layout...菜单选项来设置)。
步骤四: 修饰对象(利用FoxPro主菜单中的Object菜单项对指定的对象进行设置)。
步骤五: 保存定义的屏幕文件及备注文件。
步骤六: 生成屏幕程序(利用FoxPro主菜单Program中的Generate菜单项生成屏幕程序)。

信息、数据和数据处理概念
信息与数据
数据:数据库系统研究和处理的对象,本质上是对信息的一种符号化表示。
信息:现实世界各种事物的存在特征、运动形态以及不同事物间的相互联系等因素在人脑中的抽象反映、进而形成概念。
注意:数据与信息是分不开的,二者既有联系又有区别,因此我们在学习的时候要弄清二者之间的联系与区别。数据是信息的载体,信息是数据的内涵
数据处理
数据处理:就是数据的收集、整理、组织、存储、查询、维护和传送等各种操作,这些是数据处理的基本环节,是任何数据处理任务必有的共性部分。
下面我们扼要的介绍一下数据管理技术的发展
数据管理技术发展大体上可分为三个阶段:
自由管理阶段(50年代) 文件系统阶段(60年代) 数据库阶段(60年代后期)
数据库系统的组成与结构
数据库系统的组成 数据库系统由数据库、支持数据库运行的软硬件、数据库管理系统和应用程序等部分组成。
数据库:是一个结构化的数据集合。主要是通过综合各个用户的文件,除去不必要的冗余,使之相互联系所形成的数据结构。
硬件与软件:硬件是数据库赖以存在的物理设备,软件主要是指"数据库管理系统",数据库管理系统简称DBMS(Data Base Management System),是数据库中专门用于数据管理的软件。 由上面我们可以知道数据库系统是以硬件为基础,在硬件之上套上各种软件。我们可以用图示来表示数据库系统中各部分之间的关系:如下所示。

数据库系统体系结构
数据库系统有着严谨的体系结构。现在世界上有很多的数据库在运行,其类型和规模可能相差很大,但是它们的体系结构是大体相同的。
美国国家标准委员会所属标准计划和要求委员会(Standards Planning And Requirements Commitee)在1975年公布了一个关于数据库标准报告.提出了数据库的三级结构组织,也就是SPARC分级结构。三级结构对数据库的组织从内到外分三个层次描述,分别称为内模式、概念模式和外模式。其中概念模式又称为模式。 事实上,三级模式中,只有内模式才是真正存储数据的,而模式和外模式仅是一种逻辑表示数据的方法,但却可以放心大胆地使用它们,这是靠DBMS的映射功能实现的。这三中模式之间存在两种映射:
外模式----模式之间的映射,它把用户数据库与概念数据库联系起来了。
模式----内模式之间的映射,它把概念数据库与物理数据库联系起来了。
数据库有两类用户,一是应用程序员,二是终端用户。其中终端用户只能对UWA(User Work Area)中数据进行处理,其数据是DBMS根据用户的请求装进去的。
数据库管理系统(DBMS)
DBMS是数据库系统的关键组成部分。任何数据操作,包括数据库定义、数据查询、数据维护、数据库运行控制等都是在DBMS管理下进行的。DBMS是用户与数据库的接口,应用程序只有通过DBMS才能和数据建立联系。
下面我们来学习一下DBMS的功能和作用:
数据库的定义功能DBMS提供有数据描述语言DDL(Data Description Language),来定义内模式、外模式和模式,将各种模式翻译成相应的目标代码。
数据库的映射功能 实现外模式----模式和模式----内模式之间的映射。
数据库操作功能 DBMS提供有数据操纵语言DML实现对数据库的操作。有四种基本操作命令:检索、插入、删除和修改。
数据库运行控制功能 DBMS对数据库运行的控制主要是通过数据的安全性、完整性、故障恢复和并发操作四方面实现的。
数据安全性:就是防止未被授权者非法存取数据库。
数据完整性:就是数据的正确性和相容性。
数据库的维护功能 这部分包括数据库数据初始装入、数据库转储、数据库重组及记载系统工作日志等功能。
数据模型 数据模型是数据库的框架,它形式化地描述了数据库的数据组织形式,它还是定义数据库的依据。这一章,我们主要学习数据模型,然后学习模型化的方法:
数据模型 实际间联系方式 实体联系表示法(E--R方法)
怎样设计E--R图 数据库类型 怎样从E--R图导出关系模型

数据模型 问题: 什么是数据模型呢?它又具有什么功能呢?
答案:数据模型是客观事物及其联系的数据描述。 数据模型应具有描述数据和数据联系两方面功能。
数据的描述就是指出:模型中包含那些记录类型,并对记录类型进行命名;指明各个记录类型由那些数据构成,并对数据项进行命名,每个数据项均需指明其数据类型和取值范围。
数据间联系的描述就是指明:各个不同记录间所存在的联系和联系方式。
实体联系模型 问题:什么是实体模型呢?
答案:数据模型本质上是"信息模型"的数据化表示。信息模型又称"实体联系模型",是客观事物及其自然联系在人脑中所形成的概念。
问题:实体模型和数据模型的关系是什么呢?
答案:从实体模型到数据模型要经历三个领域的演变过程:
现实世界→信息世界→数据世界 在这三个世界领域中,人们沿用不同的名词术语,下面我们来学习一些常用的术语。
实体与属性 这是信息世界中广泛使用的两个术语。
实体:现实世界任何可相互区别的事物,不论是实际存在的东西,还是概念性的东西,或是事物与事物之间的联系,一律统称为实体。
属性:实体所具有的性质,统称为属性。实体是靠属性来描述的。
实体与属性的型与值 实体和属性都有"型"与"值"之分。型是概念的内涵,值是概念的实例。
实体集 同一类型的实体集合称为实体集。
域 实体中的每个属性,都有一个取值范围,这叫作属性的"域"。域可以是整数、实数、字符串等
键(key) 又称为关键字,它是指在实体属性中,可用于区别实体集中不同个体的那个属性或几个属性的组合。
各个实体间存在联系吗?要是有的话,它们的联系方式是怎样的呢?我们在下一节来解决这个问题
实体间的联系方式 实体间的联系方式 实体之间的联系实际上反映了实体之间的语义关系。联系也是实体,因此它也可以有属性。
实体间联系情况比较复杂,就其联系方式来说,我们可把它分为以下三种:
1):一对一联系(简记为1:1)
2):一对多联系(简记为1:n)
3):多对多联系(简记为m:n)
? 一对一联系 若两个同型实体集中,一方的一个实体唯一与另一方的一个实体相对应,则称为1:1联系。 如下图所示的婚姻关系

? 一对多联系 若两个不同型的实体集中,一方一个实体对应另一方多个实体;反之另一方一个实体最多只与本方一个实体相对应,称1:n联系.
如下图所示的父子关系

? 多对多关系 若两不同型实体集中,任何方一个实体都与对方一个或多个实体相对应,称m:n联系 如下图学生与课程的关系

实体联系表示法(E--R方法)
实体联系表示法简称E--R方法(Entity--Relationship Approach)。这种方法是通过所谓E--R图表示实体及其联系,是P.P.Chen1976年提出的。
下面我们就来学习E--R图的话画法及怎样设计E--R图。
E--R图的画法
E--R图中包括:实体、属性和联系三种基本图素。习惯上实体用"方框"表示,实体的属性用"椭圆框"表示,联系用"菱形框"表示。如下图所示:
实体
属性
联系
由于实体集中的个体有很多,我们不可能也没有必要一一指出个体间的对应关系,因此E--R图中只需指出实体"型"间的联系,注明联系方式,这样即简单又能表达清楚概念。
E--R图的具体画法:把有联系的实体(方框)通过联系(菱形框)连接起来,注明联系方式,再把实体的属性(椭圆框)连到相应的实体上。
例:下面我给出一个简单的E--R图,如下:

怎样设计E--R图
怎样用E--R图准确反映信息模型,设计方法虽然没有一定的规则,但我们要大体遵循以下原则
E--R的设计原则
(1)针对每一用户作出该用户信息的局部E--R图,确定该用户视图的实体、属性和联系。
注意:能作为属性的就不要作为实体,这样有利于简化E--R图。
(2)综合局部E--R图,产生出总体E--R图。
注意:在综合的过程中,同名实体只能出现一次,还要去掉不必要的联系,以便消除冗余。
最后我们还要说明一点: 一个系统的E--R图不是唯一的,强调不同的侧面作出的E--R图可能有很大的不同。
例:设某企业信息系统有下列用户:人事科处理职工档案;供应科处理采购业务;总务科处理仓库业务;生产科处理产品业务。
试根据上述要求设计出能反映所有用户信息视图的总体E--R图。
根据E--R图的设计原则我们可知:
步骤一:先作出局部的E--R图,如下:

人事科视图

供应科视图

生产科视图

总务科视图

步骤二:综合局部E--R图,产生出总体E--R图。

综合后的E--R图
从上面综合后的E--R图中我们发现去掉了一些联系,又增添了一些新联系,这是允许的。
数据库类型 数据库有类型之分,是根据数据模型划分的。目前成熟地应用在数据库系统中的数据模型有:层次模型、网壮模型和关系模型。下面我们分别学习以下这三种模型。
层次模型 层次模型是用树结构表示记录类型及其联系的。
树结构的基本特点是:
1、有且仅有一个结点无父结点;
2、其它结点有且有一个父结点。
在层次模型中,树的结点是记录型。上一层记录型和下一层记录型的联系是1:n的。
层次模型就象下面我们给出的一棵倒立的树。如下所示:

注意:在层次式数据库中查找记录,必须指定存取路径。这种关系模型不支持m:n联系。
网状模型 网状模型中结点间的联系不受层次限制,可以任意发生联系,所以她的结构是结点的连通图。
网状模型结构的特点是:
1、有一个以上结点无父结点;
2、至少有一个结点有多于一个父结点。
如下我们给出一个网状模型的例子:

注意:虽然网状模型能反映各种复杂的关系,但网状模型在具体实现上,只支持1:n联系,对于m:n联系可将其转化为1:n联系。
关系模型 关系模型的本质就是用若干个二维表来表示实体及其联系。
关系是通过关系名和属性名定义的。一个关系可形式化表示为:
R(A1,A2,A3,…,Ai,…) 其中:R为关系名,Ai为关系的属性名。
这里我们对此不做过多的学习,在以后的章节中我们会详细的学习之。
从E--R图导出关系模型
我们知道E--R图仅是现实世界的纯粹反映,与数据库具体实现毫无关系,但它是构造数据模型的依据。下面我们给出从E--R图出发导出关系模型的原则。
E--R图导出关系模型的原则
原则一:对于E--R图中每个实体,都应转换为一个关系,该关系应包括对应实体的全部属性,并应根据关系所表达的语义确定哪个属性作为"主键"。
注意:键在关系模型中是实现联系的主要手段。
原则二:对于E--R图中的联系,情况比较复杂,要根据实体联系方式的不同,采取不同的手段加以实现。
下面我们给出一些常见的关系模型:两实体间1:n联系
这种联系是可将"1"方实体的"主键"纳入"n"方实体对应的关系中作为"外部键",同时把联系的属性也一并纳入"n"方对应的关系中。
? 同一实体内部个体间1:n联系 这种联系可在这个实体所对应的关系中多设一个属性,用来作为与该个体相联系的另一个体的"主键"。
? 两实体间m:n联系 对于两实体间m:n联系,必须对"联系"单独建立一个关系,用来联系双方实体。
注意:该关系的属性中至少要包括被它所联系的双方实体的"主键",并且如果联系有属性,也要归入这个关系中。
? 同一实体内部个体间m:n联系 如果同一实体内存在m:n联系,也需为这个联系单独建立一个关系。该关系中至少应包括被它联系的双方个体的"主键",如果联系有属性,也要归入这个关系中。
? 两个以上实体m:n多元联系 这种多元联系,必须为联系单独建立一个关系,该关系中最少应包括被它联系的各个实体的"主键",若是联系有属性,也要归入这个关系中。
? 两实体间1:1联系 这种联系可将一方的主键作为另一方的外键而将两者间的联系实体省略。
关系的数学定义 在学习关系的数学定义之前,我们要先来学习一些概念。
域 域是值的集合。 如:{男,女},{1,2},{A,B,C}等都可以是域。
注意:域要命名。
如:令:D1={男,女},表示性别的集合; D2={10,13,18},表示年龄的集合。
域中数据的个数叫域的基数。因此上面D1的基数是2,D2的基数是3。
笛卡儿积 给定一组域D1,D2,…,Dn(其中允许有相同的),则笛卡儿积定义为:
D1×D2×…×Dn={(d1,d2,…,dn)|di∈Di,i=1,2,…,n)}
其中每个(d1,d2,…,dn)叫作元组;
元组中的每个di叫作分量,di必是Di中的一个值;当n=1时称单元组,n=2时,称二元组,…。
因此,笛卡儿积的基数等于构成该积所有域的基数累乘积。
关系的定义 当且仅当R是D1×D2×…×Dn的一个子集,则称R是D1×D2×…×Dn上的一个关系, 记为:R(D1,D2,…,Dn)
其中R为关系名,n为关系的度,Di为第i个域名。
在关系对应的二维表中,行对应元组,列对应域。
注意:由于笛卡儿积允许有相同的域,故当不同列取自相同域情况下,列就无法根据域名来区分。
关系的性质 由于关系可以表现为二维表,因此我们可以通过二维表来理解关系的性质。
关系的性质一: 关系中每个属性值是不可分解的。也就是表中元组分量必须是原子的。 例:

上面这张表就不是关系,因为表中的元组分量不是原子。 也就是说不允许“表中套表”。
关系的性质二 表中各列取自同一各域,故一列中的各个分量具有相同性质。
关系的性质三 列的次序可以任意交换,不改变关系的实际意义。
关系的性质四 表中的行叫元组,代表一个实体,因此表中不允许出现相同的两行。 注意:在实际中有的把元组称为记录。
关系的性质五 行的次序无关紧要,可以任意交换,不会改变关系的意义。
关系数据描述语言DDL
对关系的描述为定义关系模式。关系模式是指用关系数据描述语言描述后的关系,必须逐个对关系模型中的关系进行描述才能生成数据库概念模式。
不同关系型DBMS的数据描述语言不尽相同,采用的方式也不一样,下面我们介绍几种常见的。
问答式 问答式通过人机对话,有系统提问关系名,各个属性及其类型和长度。对话完毕,关系模式也就生成了。每个关系均需通过问答,脱离应用程序单独进行,最终生成数据库概念模式。 例如:FoxPro就是一种问答式DBMS。
语言描述式 语言描述式有专门的描述语言定义关系模型,包括:关系名,组成该关系的各各域名、数据类型、长度和取值范围。下面我们介绍一种非正式的数据描述语言。
域描述语句 域描述语句的形式如下:
DOMAIN<域名>PIC IS<类型(长度)>[RANGE IS<数1>THRU<数2>]
该语句式通过DOMAIN定义域名;PIC定义数据类型和长度;RANGE定义取值范围。
关系描述语句 关系描述语句形式如下:
RELATION<关系名>(<域名1,域名2,…>)KEY=(<域名i,域名j,…>)
该语句用RELATION对关系命名、定义关系中的属性和指定关系的"主键"。
关系模型的三类完整型规则 通过关系数据描述语言定义的关系是稳定的,但是关系数据库则是随时变化的。为了维护数据库中的数据与现实世界的一致性,关系数据库必须遵循以下三类完整性约束规则:
? 实体完整性约束规则 这个约束规则也就是指关系中的"主键"不允许取空值。
? 引用完整性约束规则 这条规则是限制引用不存在的记录。
? 用户定义的完整性约束规则
数据库应用系统的设计 数据库应用系统的设计是指创建一个性能良好、能满足不同用户使用要求的、又能被选定的DBMS所接受的数据库以及基于该数据库上的应用程序。这一章我们基于软件工程的思想,采用E-R方法来学习数据库设计的过程。
数据库设计内容及特点数据库的逻辑设计数据库物理设计及应用程序设计总结

数据库设计的内容及特点
数据库设计的内容 数据库设计包含两方面的内容:结构特性设计和行为特性设计。下面我们来具体说一下这两方面特性的设计。
结构特性设计:指数据库总体概念的设计,它应该是具有最小数据冗余的、能反映不同用户数据要求的、能实现数据共享的系统。结构性设计是静态的。
行为特性设计:指数据库用户的业务活动,它体现在应用程序中。
下面我们再来说一下这两方面设计联系与区别:
两者之间的联系:数据库设计要考虑结构特性和行为特性两方面,因此这两者之间要相互参照。
两者之间的区别:建立数据模型的方法没有给行为特性设计提供任何依据,故导致结构设计和程序设计分离进行。结构特性是在模式和子模式中定义的,行为特性通过应用程序去实现的。
有了上面这些,我们可以知道在进行数据库设计时,不能一蹴而就,要本着“反复探寻,逐步求精”的思想进行数据库设计。 下面我们按数据库系统的逻辑设计、物理设计、应用程序设计等介绍设计的全过程
数据库逻辑设计 通常把逻辑设计分成三个设计阶段,下面我们依次学习数据库逻辑设计的三个阶段。
阶段一:收集和分析用户要求(设计任务) 准确地、毫不含糊地弄清客户要求是数据库设计的关键。我们通常又把这一阶段分成四步:
? 分析客户活动
? 确定系统范围
? 分析客户活动所涉及的数据
注意:这一步我们关注的焦点是搞清用户活动图中所处理的数据,并以"数据流图"形式表示出数据的流向和对数据所进行的加工。
? 分析系统数据
阶段二:建立E--R模型 经过第一阶段的分析用户的要求,已经产生了各种应用的数据流图。有了数据流图可以容易地设计出E-R模型。这一阶段我们也分成两步:
? 局部E-R模型的设计
? 总体E-R模型的设计
阶段三:数据库模式设计 将E-R图转换为关系模型后,仍需根据应用进行优化,这一阶段也可分成两步:
? 初步设计———把E-R图转换为关系模型
根据E-R图确定各个关系,用关系数据描述语言进行定义,便得到数据库模式,一般应达到3NF
? 优化设计———对模式进行调整和改善
所谓优化就是从提高效率出发,对模式作进一步的调整和改良。优化是在性能预测的基础上进行的,一般用三方面指标来衡量:
(1):单位时间内所访问的逻辑纪录个数要少;
(2):单位时间内数据传送量要少;
(3):系统占用的存储空间尽量要少。
数据库物理设计及应用程序设计
数据库物理设计 物理设计主要任务是:确定存储结构、数据存取方法、分配存储空间。 严格说来:数据库物理设计是系统程序员的事情。故这里我只需要知道物理设计的任务是什么就行了,别的不做太多要求。
经过从"概念设计->逻辑设计->物理设计",标志着数据库的框架搭设成功,下面任务就是设计应用程序并投入运行和维护。
应用程序设计 应用程序设计与一般的程序设计没有什么大的差别,因此一般程序设计的方法也适合于应用程序设计,其方法一般有:
? 自定向下,或结合由下而上灵活运用;
? 程序按功能模块化;
? 使模块便于组装和调用;
? 追求程序可读性,不过多采用难以理解的技巧。
有了设计方法后,就要进行程序编码(也就是具体程序设计),编码是用到语言取决于DBMS语言系统。编码完成后就是调试程序。
上面的工作完成之后,数据库也就设计好了,下面的事情就是投入运行和进行维护了,下面我来学习也下数据库维护的工作有什么方面。
数据库维护 数据库维护的工作一般包含三个方面:
? 日常维护:就是对数据库中的数据随时按需要进行增、删、插入、修改或更新等
? 定期维护:重构重组数据库
? 故障维护:当数据库遭到意外破坏时,把它恢复到破坏前的状态。
总结 我们用图表把数据库系统设计流程总结一下: