第四章 数据库的创建和使用
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) 调出表设计器,建立一个新数据表[图例]
方法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子句 |
表单 |
移出记录时 | |