4.1 VFP数据库
1. 数据库的基本组成
数据库由一个以上相互关联的数据表组成,可以包含一个或多个表、视图、到远程数据源的连接和存储过程。
视图(view):
一个保存在数据库中的、由引用一个或多个表、或其他视图的相关数据组成的虚拟表,可以是本地的、远程的或带参数的。
存储过程(stored procedure)
是保存在数据库中的一个过程。该过程能包含一个用户自定义函数中的任何命令和函数。
创建数据库时系统自动生成3个文件:
数据库文件: 扩展名为 .DBC
数据库备注文件: 扩展名为 .DCT
数据库索引文件: 扩展名为 .DCX
2. 数据库的设计过程
1)明确建立数据库的目的和使用方式
2)设计所需的数据表(包括表结构和表记录)
3)建立表之间的关系
4)改进设计
 
 
4.2 数据库的创建
第四章 数据库的创建和使用_创建
1. 数据库的创建过程
数据库的创建过程中一般会涉及下面一些常用操作:
1)创建新表 用表设计器 (设置字段属性和表属性)
2)添加表 用数据库设计器按钮或数据库菜单
3)创建视图 用视图向导、视图设计器
4)建立关系 用鼠标将父表的索引拖到子表的相关索引上
5)编辑关系 用数据库菜单或快捷菜单 参照完整性生成器
6)移去关系 用快捷菜单或按delete键
7)修改表 用表设计器
8)删除表或视图 用数据库设计器按钮或数据库菜单
2. 数据库的新建、打开、关闭
1)新建数据库:
从文件菜单中单击新建 在新建对话框中选择数据库并单击新文件 在创建对话框中给出库文件名和保存位置 在数据库设计器中建立所需的数据库。
从命令窗口中输入命令: create database 数据库名
2)打开数据库:
从文件菜单中单击打开 在打开对话框中给出库文件名和保存位置并确定之。
从命令窗口中输入命令: open database 据库名
(3)关闭数据库:
从命令窗口中输入命令:
close database && 关闭当前数据库
close all && 关闭所有被打开的数据库
注意:1) 关闭了数据库表不等于关闭了数据库,但关闭了数据库则其中的数据表被同时关闭;
2) 用鼠标关闭了数据库设计器窗口并不能代表关闭数据库。
3. 用数据库设计器设计数据库
(1) 调出表设计器,建立一个新数据表
第四章 数据库的创建和使用_职场_02
方法1:从数据库菜单中选择新表
方法2:右击数据库设计器窗口,从快捷菜单中选择新表
方法3:单击数据库设计器工具栏的新表按钮。
方法4:从文件菜单中单击新建,在对话框中选择
注意
数据库表的表设计器中内容比自由表的多,增加了字段属性和表属性的设置。设置验证规则目的是为了使输入的数据符合要求,在有矛盾时发出错误提示信息。
(2) 数据库表的高级属性
属性类别
属性名称
作用
字段显示属性
格式
确定字段内容在被显示时的样式
输入掩码
指定字段中输入数据的格式(即所输入的任何内容均显示成此符号)
标题
在浏览表时用此名称代替意义不够直观的字段名
字段验证规则
规则
使所输数据符合设定的条件
信息
当所输数据违反规则时,系统提示错在哪里
默认值
减少输入重复性数据时的工作量
字段注释
 
使字段具有更好的可读性
长表名
 
与表文件名不同,设置了长表名可以一目了然
记录验证规则
规则
使所输记录符合设定的条件
信息
当所输记录违反规则时,系统提示错在哪里
触发器
插入触发器
当所插记录符合此规则时,才可以插入到表中
更新触发器
当修改后的记录符合此规则时,才可以进行修改
删除触发器
当待删记录符合此规则时,才可以被删除掉
表注释
 
使表具有更好的可读性
字段级规则:
一种与字段相关的有效性规则,在插入或修改字段值时被激活,多用于数据输入正确性的检验。
为字段设置验证规则的方法:
    .在表设计器中选定要建立规则的字段名。
    .在“规则”方框旁边选择“…”按钮。
    .在表达式生成器中设置有效性表达式,并选择“确定”。
    .在“信息”框中,键入用引号括起的错误信息。
    .在“默认值”框中,键入合理的初值。
    .注意不同类型数据的表示方法。
    .选择“确定”
记录级规则:
一种与记录相关的有效性规则,当插入或修改记录时激活,常用来检验数据输入和正确性。记录被删除时不使用有效性规则。记录级规则在字段级规则之后和触发器之前激活,在缓冲更新时工作。
触发器:
在一个插入、更新或删除操作之后运行的记录级事件代码。不同的事件可以对应不同的动作。它们常用于交叉表的完整性。
(3) 在数据库中添加表
方法1:从数据库菜单中选择添加表,从打开对话框中选择所需的表并确定之。
方法2:右击数据库设计器窗口,从快捷菜单中选择添加表。
方法3:单击数据库设计器工具栏的添加按钮。
注意
一个数据表在同一时间内只能属于一个数据库,已隶属于其它数据库的表不能直接被添加进来,需先将其移出数据库还原成自由表。
(4) 创建并添加视图
视图用于显示一个或多个表中的记录,并能够更新源表中的数据,视图只有在数据库中才能存在。
方法1:从数据库菜单中选择新远程视图或新本地视图
方法2:右击数据库设计器窗口,从快捷菜单中选择新远程视图或新本地视图
方法3:单击数据库设计器工具栏的新远程视图或新本地视图按钮
(5) 在数据库中操作表和视图
可以利用数据库设计器工具栏很方便地进行下列操作:
浏览: 在浏览窗口中显示表或视图的内容。
修改: 调出表设计器或视图设计器对表或视图进行修改。
移去:使表从数据库中还原成自由表。对视图移去相当于删除。
删除:从磁盘上彻底删除数据表和视图,并且无法回收。
(6) 在表之间建立永久性关系
永久关系:
是数据库表之间的一种关系,不仅运行时存在,而且一直保留。表之间的永久关系是通过索引建立的。
一对多关系:
表之间的一种关系,在这种关系中,主表中的每一个记录与相关表中的多个记录相关联(每一个主关键字值在相关表中可出现多次)。
一对一关系:
表之间的一种关系,在这种关系中,主表中的每一个记录只与相关表中的一个记录相关联。
创建表间的永久关系
在数据库设计器中,选择想要关联的索引名,然后把它拖到相关表的索引名上,所拖动的父表索引必须是一个主索引或候选索引。建立好关系后,这种关系在数据库设计器中会显示为一条连接两个表的直线。
注意:需先建立索引然后才能建立关系。
删除表间的永久关系
在数据库设计器中,单击两表间的关系线。关系线变粗,表明已选择了该关系,按下 delete 键。
编辑关系
单击所需关系线,右击鼠标,从快捷菜单中选择编辑关系,在编辑关系对话框中改选其它相关表索引名或修改参照完整性规则。
参照完整性(RI)
控制数据一致性,尤其是不同表的主关键字和外部关键字之间关系的规则。Visual FoxPro 使用用户自定义的字段级和记录级规则完成参照完成性规则。
(7) 在表之间建立临时关系
临时关系:
是在打开的数据表之间用 set relation命令建立的临时关系,或是在数据工作期窗口建立。建立了临时关系后,子表的指针会随主表记录指针的移动。表被关闭后,关系自动解除。
临时关系与永久关系的联系与区别:
联系:
(1)都必须明确建立关系的两张表之间确实在客观上存在着一种关系(一对多或一对一关系)。
(2)永久关系在许多场合可以作为默认的临时关系。
区别:
(1)临时关系是用来在打开的两张表之间控制相关表之间记录的访问;而永久关系主要是用来存储相关表之间的参照完整性,附带地可以作为默认的临时关系或查询中默认的联接条件。
(2)临时关系在表打开之后使用set relation命令建立,随表的关闭而解除;永久关系永久地保存在数据库中而不必在每次使用表时重新创建。
(3)临时关系可以在自由表之间、库表之间或自由表与库表之间建立,而永久关系只能在库表之间建立。
(4)临时关系中一张表不能有两张主表(除非这两张主表是通过子表的同一个主控索引建立的临时关系),永久关系则不然。
4. 用命令方式操作数据库
常用命令一览表
命令格式
功能
create database 库文件名 创建新的数据库文件
open database 库文件名 打开指定的库文件
close database 关闭当前的数据库和数据表
close all 关闭所有的数据库和数据表,并把工作区1置为当前工作区,同时还关闭一些窗口
modify database 修改当前库文件结构
delete database 库文件名 删除指定的库文件
open database 库文件名
add table 表名
在数据库中添加表
open database 库文件名
remove table 表名
将表从数据库中移去
open database 库文件名
remove table 表文件名 delete
将表从数据库中移去并从盘上删除
use 库文件名 !表名
browse
“!”表示引用一个不在当前数据库中的表
Set relation to 关系表达式 into 区号 | 别名 建立表之间的临时关系
Set relation to 删除表之间的临时关系
alter table 子表名 add foreign key 索引关键字 tag 索引标识 references 父表名 [tag 索引标识 ] 创建永久关系
alter table 子表名 drop foreign key tag 索引标识 删除永久关系
5. 用CREATE TABLE-SQL 命令创建数据库表
命令一般格式:
Create table 表名1 [free] ( 字段名1 字段类型代号 [ (字段宽度[,小数位数 ] ) ][null | not null] [check 字段规则1 [error “信息1” ] ] [default 默认值][primary key | unique] [references 表名2 [tag 索引标识1 ] ][ , 字段名2 字段类型代号 [ (字段宽度 [, 小数位数]) ] [null | not null] ][check 字段规则2 [error “信息2” ] ] [default 默认值 ] ) | from array 数组名
使用示例:
creat data xscjgl && 创建学生成绩管理数据库
create table xs (;
xh c(4) default "1201" primary key,;
xm c(6), ;
xb c(2) check xb="男" or xb="女" error"性别只能是男或女" default "女",;
nl n(2) null;
) && 创建学生表
create table kc (;
kch c(3) unique, ;
kcm c(10),;
xf n(3,1),;
bxk l;
) && 创建课程表
create table cj(;
xh c(4) default "1201" reference xs tag xh, ;
kch c(8),;
ksrq d,;
cj n(5,1);
) && 创建成绩表
modi data
alter table cj add primary key xh+kch+str(cj,4,1) tag dh && 为成绩表添加一个主索引
 
6. 查看和设置数据库的属性
(1) 用dbgetprop()函数查看数据库属性:
命令格式: dbgetprop(cName,cType,cProperty)
(2) 用 dbsetprop()函数设置数据库属性:
命令格式: dbsetprop(cName,cType,cProperty,ePropertyValue)
(3) 用dbsetprop() 函数给表中字段添加标题和说明
一般格式: dbsetprop('表名.字段名',’field’,caption|comment,’标题|说明
例:dbsetprop(’xs.xh’,’field’,’caption’,’学号’)
dbsetprop('cj.xh','field','comment','本表学号应与学生表中的学号对应')
7. 数据库表的约束机制
约束机制
级别
激活时机
NULL值
字段
当从浏览中离开字段,或执行INSERT或REPLEASE更改字段值时
字段级规则
字段
当从浏览中离开字段,或执行INSERT或REPLEASE更改字段值时
主索引/候选索引
记录
发生记录更新时
记录级规则
记录
发生记录更新时
触发器
在INSERT、UPDATE或DELETE事件中,表中值改变时
VALID子句
表单
移出记录时