数据库表之间的联系
表之间的关系主要有三种:一对一,一对多,多对多。VFP 支持前两种。
理解好“表之间的关系主要要掌握好主关键字和外部关键字”,如果两张表都具有相同的主关键字,则认为它们具有“一对一”关系,如果一张表的主关键字存在于另一张表中称为“外部关键字”,则认为它们具有“一对多”关系。
14. 永久关系与临时关系的联系和区别
[例]:永久关系
OPEN DATABASE JXSL
ALTER TABLE CJ ADD FOREIGN KEY XH TAG XH REFE XS && 前提是XS 表已建立索引表达式为XH 的主索引 或: CREATE TABLE CJ (XH C(6),KCDH C(6), CJ N(3,0); FOREIGN KEY XH TAG XH REFE XS)
[例]:临时关系 SELE 1 USE XS SELE 2
USE CJ ORDER XH SELE XS
SET RELA TO XH INTO CJ
GO 2
BROW NOWAIT SELE CJ BROW
CLOSE TABLE ALL
15. 数据完整性
(1) 字段格式及字段掩码: 字段格式码:A D E L $ ! T 等 p98 输入掩码:X 9 # $ * . , $$
[例]:XH 字段格式设为T! --- 表示在输入或显示XH 时,忽略其前导空格、字母转换为大写 [例]:输入掩码为“999-9999999”
(2) 标题与默认值: 注意默认值数据类型。 (3) 字段有效性规则:
控制输入到字段中的数据的取值范围,该规则是一个逻辑表达式,且当前字段包含在该表达式中。如果结果为.F., 则拒绝所输入的字段值, 并显示提示信息.
[注]:该规则只对当前字段有效. 如果有判断空的逻辑表达式, 例XH 为空, 则不能用XH=””,而需要用函数EMPTY(XH),ISNULL()等来判断.
(4) 记录有效性规则:
可以校验多个字段之间的关系是否满足某种规则, 该规则也是一个逻辑表达式. (5) 触发器:
绑定在表上的逻辑表达式,是在插入、更新、删除记录时进行的检验规则。返回值为.T. 时, 允许执行相应操作,.F. 时不允许执行相应操作.
[例] 1.js表中有字段gl (工龄),要求“值不能大于50” 在gl 的字段有效性规则中输入gl
2.js 表中有字段jbgz (基本工资), 要求jbgz 在“100—1000”之间 在jbgz 的字段有效性规则中输入jbgz>=100.and.jbgz
在xb 的字段有效性规则中输入 xb=”男” .or. xb=”女” 4.js 表中有字段xm(姓名) ,要求xm 至少含有两个汉字 在xm 的字段有效性规则中输入 len(alltrim(xm))>=4
5.js 表中有字段ximing(系名) ,要求除了“信息管理系”的老师记录,其它记录都不能进行修改 在js 表的更新触发器中输入 js.ximing=”信息管理系” 6.js 表若有gl 小于等于0,则允许删除 在js 表的删除触发器中输入 gl
[例]:利用SQL 命令设置规则等 OPEN DATABASE JXSL
ALTER TABLE CJ ALTER COLUMN CJ SET CHECK CJ>=0 AND ; CJ
ALTER TABLE CJ ALTER COLUMN CJ SET DEFAULT 0
16. 参照完整性
建立在表关系之上的表之间的约束关系。通过触发器调用存储过程。
17. 常用函数
DBC()、DBUSED()、DBGETPROP()、DBSETPROP() p110 SELECT()、USED()、ALIAS()、FCOUNT()、DELETED() [例]:
OPEN DATABASE JXSL
? DBC() &&显示 C:\NEC\VFP\JXSL.DBC ?DBUSED(“JXSL”) &&显示 .T.
? DBGETPROP(“XS”,”TABLE”,”PRIMARYKEY”) &&显示XS 表主索引标识 ? DBG ETPROP(“CJ.CJ”,”FILELD”,”RULEEXPRESSION”) &&显示字段规则 ?DBSETPROP(“XS.XH”,”FIELD”,”CAPTION”,”学号”) &&设置标题
四.练习题
1.vfp 是一种()的数据库管理系统。
A 网络模型 B层次模型 C 对象模型 D 关系模型
2.对于二维表的关键字来说,不一定存在的是() A 超关键字 B 候选关键字 C 主关键字 D 外部关键字
3.若同时打开了甲、乙两个项目,对于从甲项目中拖放文件到乙项目的操作,下列说法中正确的是()
A 拖放操作并不创建文件的副本,只保存了一个对该文件的引用 B 拖放操作后在乙项目文件同一文件夹下创建了该文件的副本 C 允许从甲项目的某数据库中拖放一张表到乙项目的某一数据库中 D 若拖放操作成功则甲项目中便不存在该文件了 4.二维表的结构取决于() A 字段的个数、名称、类型和长度 B 记录的个数、顺序 C 字段的个数、顺序 D 记录和字段的个数和顺序
5.在定义表结构时,以下()数据类型的字段宽度都是固定的。 A 字符型、货币型、数值型 B 字符型、备注型、二进制备注型 C 数值型、货币型、整型 D 整型、日期型、日期时间型
6.打开已张空表,分别用函数eof()和bof()测试,其结果一定是() A .T.和.T. B .F.和.F. C .T.和.F. D.F. 和.T.
7.在js.dbf 中筛选出性别为“女”的命令是() A.set filter to xb=”女” B.set filter xb=”女” C.set fields to xb =”女” D.set filter to
8. 已知js 表中有两条记录,下列操作中,返回值一定是.t. 的是() A use js(回车) ?bof()
B use js(回车) go 2 (回车) skip-1(回车) ?bof() C use js(回车) go bottom(回车) skip(回车) ?eof() D use js(回车) skip-1(回车) ?eof()(回车)
9. 打开一张表后,执行下列命令:go 6 (回车), skip -5(回车),go 5(回车), 则关于记录指针的位置说法正确的是()
A 记录指针停在当前记录不动 B 记录指针的位置取决于记录的个数 C 记录指针指向第5条记录 D 记录指针指向第1条记录
10. 设计数据库时,可使用纽带表来处理表与表之间的() A 多对多关系 B 临时关系 C 永久关系 D 继承关系
11. .在向数据库添加表的操作中,下列叙述中不正确的是() A 可以将一张自由表添加到数据库中
B 可以将一张数据库表直接添加到另一个数据库中
C 可以在项目管理器中将自由表拖放到数据库中使它成为数据库表 D 欲使一张数据库表成为另一个数据库的表,则必须先使其成为自由表 12. 数据库表之间创建的永久关系保存在()中。 A 数据库表 B 数据库
C 表设计器 D 数据环境设计器
13. 下列关于表的索引的描述中,错误的是() A 复合索引文件的扩展名为.CDX
B 结构复合索引文件随表的打开而自动打开
C 当对表进行编辑修改时,系统对其结构复合索引文件中的所有索引自动进行维护 D 每张表只能创建一个主索引和一个候选索引
14. 在数据库JXSJ.DBC 中,要获得表JS.DBF 的字段GH 的标题,先打开数据库JXSJ.DBC 且为当前数据库,再使用函数DBGETPROP(_()_____,”FIELD”,”CAPTION”)
A JS.GH B “JS.GH ” C GH D “GH”
15. 在参照完整性的设置中,如果当主表中删除记录后,要求删除子表中的相关记录,应将“删除”规则设置为()
A 限制 B 级联 C 忽略 D 任意 16. 库表字段的默认值保存在()文件中。 A 表 B 数据库 C 项目 D 表的索引 17. 当库表移出数据库后,仍然有效的是() A 字段的默认值 B 表的验证规则 C 结构复合索引 D 记录的验证规则
18. 以下()操作将造成相关表之间数据的不一致。 A 主表中插入记录的主关键字的值是子表中所没有的。 B 主表中删除了记录,而在子表中没有删除相关记录 C 子表中删除了记录,而在主表中没有删除相关记录 D 用主表的主关键字字段的值修改了子表中的一个记录 19. 以下()操作不会损坏相关表之间的数据一致性。 A 删除了子表中的记录而没有删除主表中相关记录 B 删除了主表中的记录而没有删除子表中相关记录
C 在子表中插入记录的外部关键字值是主表关键字中所没有的
D 在主表中修改了主关键字的值而没有同时修改子表中相关记录的外部关键字 20. 当成功执行了下一组命令时,下列不正确的说法是() OPEN DATABASE JXSJ OPEN DATABASE RSDA
A 由于打开了第二个数据库RSDA, 而使得JXSJ 数据库被关闭 B 当前数据库是RSDA
C 表达式DBUSED(“JXSJ”) AND DBUSED(“RSDA”)的值为.T. D 当在执行 close databases 命令后,jxsj 数据库没有被关闭
21. 在JS 表中要删除所有工龄(GL )大于60的记录的SQL 命令是:DELETE ___1_
JS WHERE ____2_______,要彻底删除这些记录,可用——3——命令,但这一命令的实施,必须要求表以—4—方式打开。
22.在JS 表中要按如下要求更改基本工资(JBGZ ): 工龄在10年以下(不含10年) 基本工资加20 工龄在10—19年 基本工资加35
工龄在20年以上(含20年) 基本工资加50 可用一个UPDATE 命令完成上述更改
UPDATE JS _5____ JBGZ=IIF(JS.GL
24. 若要实现多字段排序,即先按班级(BJ,N,1)顺序排序,同班的同学在按出生日期(CSRQ,D)顺序排序,同班且出生日期也相同的再按性别(XB,C,2)顺序排序,其索引表达式为_10____
25. 打开一张空表,在不移动记录指针的情况下,函数BOF()的值是__11___,EOF()的值是__12__,RECNO()的值是___13____.如果打开的表中有1条记录,在不移动记录指针的情况下,BOF()的值是__14_____,EOF()的值是___15_____,RECNO()的值是__16_____
26. 某公司数据库中雇员表含有两个日期型字段:出生日期和雇佣日期,为了避免雇佣15岁(含15岁) 以下的童工,应为该表设置__17___有效性规则,规则表达式为___18______
27. 如果字表中已有相关记录,修改主表记录的主关键字时,要求同时修改字表中相关记录,则参照完整性的___19_______规则应设置为_____20______.
答案:
选择题: D D A A D A A C B A B B D B B B C B A B
填空题:1.FROM 2.GL>60 3.ZAP 4. 独占 5.SET 6.JBGZ+20 7.JS.GL>20 8.SET FILTER TO ZYDH=”102001” 9.SET FILTER TO 10.STR(BJ)+DTOC(CSRQ)+XB 11..T. 12..T. 13.1 14..F. 15..F. 16.1 17. 记录级 18.YEAR (雇佣日期)-YEAR(出生日期) 〉=15 19. 更新 20. 级联
数据库表之间的联系
表之间的关系主要有三种:一对一,一对多,多对多。VFP 支持前两种。
理解好“表之间的关系主要要掌握好主关键字和外部关键字”,如果两张表都具有相同的主关键字,则认为它们具有“一对一”关系,如果一张表的主关键字存在于另一张表中称为“外部关键字”,则认为它们具有“一对多”关系。
14. 永久关系与临时关系的联系和区别
[例]:永久关系
OPEN DATABASE JXSL
ALTER TABLE CJ ADD FOREIGN KEY XH TAG XH REFE XS && 前提是XS 表已建立索引表达式为XH 的主索引 或: CREATE TABLE CJ (XH C(6),KCDH C(6), CJ N(3,0); FOREIGN KEY XH TAG XH REFE XS)
[例]:临时关系 SELE 1 USE XS SELE 2
USE CJ ORDER XH SELE XS
SET RELA TO XH INTO CJ
GO 2
BROW NOWAIT SELE CJ BROW
CLOSE TABLE ALL
15. 数据完整性
(1) 字段格式及字段掩码: 字段格式码:A D E L $ ! T 等 p98 输入掩码:X 9 # $ * . , $$
[例]:XH 字段格式设为T! --- 表示在输入或显示XH 时,忽略其前导空格、字母转换为大写 [例]:输入掩码为“999-9999999”
(2) 标题与默认值: 注意默认值数据类型。 (3) 字段有效性规则:
控制输入到字段中的数据的取值范围,该规则是一个逻辑表达式,且当前字段包含在该表达式中。如果结果为.F., 则拒绝所输入的字段值, 并显示提示信息.
[注]:该规则只对当前字段有效. 如果有判断空的逻辑表达式, 例XH 为空, 则不能用XH=””,而需要用函数EMPTY(XH),ISNULL()等来判断.
(4) 记录有效性规则:
可以校验多个字段之间的关系是否满足某种规则, 该规则也是一个逻辑表达式. (5) 触发器:
绑定在表上的逻辑表达式,是在插入、更新、删除记录时进行的检验规则。返回值为.T. 时, 允许执行相应操作,.F. 时不允许执行相应操作.
[例] 1.js表中有字段gl (工龄),要求“值不能大于50” 在gl 的字段有效性规则中输入gl
2.js 表中有字段jbgz (基本工资), 要求jbgz 在“100—1000”之间 在jbgz 的字段有效性规则中输入jbgz>=100.and.jbgz
在xb 的字段有效性规则中输入 xb=”男” .or. xb=”女” 4.js 表中有字段xm(姓名) ,要求xm 至少含有两个汉字 在xm 的字段有效性规则中输入 len(alltrim(xm))>=4
5.js 表中有字段ximing(系名) ,要求除了“信息管理系”的老师记录,其它记录都不能进行修改 在js 表的更新触发器中输入 js.ximing=”信息管理系” 6.js 表若有gl 小于等于0,则允许删除 在js 表的删除触发器中输入 gl
[例]:利用SQL 命令设置规则等 OPEN DATABASE JXSL
ALTER TABLE CJ ALTER COLUMN CJ SET CHECK CJ>=0 AND ; CJ
ALTER TABLE CJ ALTER COLUMN CJ SET DEFAULT 0
16. 参照完整性
建立在表关系之上的表之间的约束关系。通过触发器调用存储过程。
17. 常用函数
DBC()、DBUSED()、DBGETPROP()、DBSETPROP() p110 SELECT()、USED()、ALIAS()、FCOUNT()、DELETED() [例]:
OPEN DATABASE JXSL
? DBC() &&显示 C:\NEC\VFP\JXSL.DBC ?DBUSED(“JXSL”) &&显示 .T.
? DBGETPROP(“XS”,”TABLE”,”PRIMARYKEY”) &&显示XS 表主索引标识 ? DBG ETPROP(“CJ.CJ”,”FILELD”,”RULEEXPRESSION”) &&显示字段规则 ?DBSETPROP(“XS.XH”,”FIELD”,”CAPTION”,”学号”) &&设置标题
四.练习题
1.vfp 是一种()的数据库管理系统。
A 网络模型 B层次模型 C 对象模型 D 关系模型
2.对于二维表的关键字来说,不一定存在的是() A 超关键字 B 候选关键字 C 主关键字 D 外部关键字
3.若同时打开了甲、乙两个项目,对于从甲项目中拖放文件到乙项目的操作,下列说法中正确的是()
A 拖放操作并不创建文件的副本,只保存了一个对该文件的引用 B 拖放操作后在乙项目文件同一文件夹下创建了该文件的副本 C 允许从甲项目的某数据库中拖放一张表到乙项目的某一数据库中 D 若拖放操作成功则甲项目中便不存在该文件了 4.二维表的结构取决于() A 字段的个数、名称、类型和长度 B 记录的个数、顺序 C 字段的个数、顺序 D 记录和字段的个数和顺序
5.在定义表结构时,以下()数据类型的字段宽度都是固定的。 A 字符型、货币型、数值型 B 字符型、备注型、二进制备注型 C 数值型、货币型、整型 D 整型、日期型、日期时间型
6.打开已张空表,分别用函数eof()和bof()测试,其结果一定是() A .T.和.T. B .F.和.F. C .T.和.F. D.F. 和.T.
7.在js.dbf 中筛选出性别为“女”的命令是() A.set filter to xb=”女” B.set filter xb=”女” C.set fields to xb =”女” D.set filter to
8. 已知js 表中有两条记录,下列操作中,返回值一定是.t. 的是() A use js(回车) ?bof()
B use js(回车) go 2 (回车) skip-1(回车) ?bof() C use js(回车) go bottom(回车) skip(回车) ?eof() D use js(回车) skip-1(回车) ?eof()(回车)
9. 打开一张表后,执行下列命令:go 6 (回车), skip -5(回车),go 5(回车), 则关于记录指针的位置说法正确的是()
A 记录指针停在当前记录不动 B 记录指针的位置取决于记录的个数 C 记录指针指向第5条记录 D 记录指针指向第1条记录
10. 设计数据库时,可使用纽带表来处理表与表之间的() A 多对多关系 B 临时关系 C 永久关系 D 继承关系
11. .在向数据库添加表的操作中,下列叙述中不正确的是() A 可以将一张自由表添加到数据库中
B 可以将一张数据库表直接添加到另一个数据库中
C 可以在项目管理器中将自由表拖放到数据库中使它成为数据库表 D 欲使一张数据库表成为另一个数据库的表,则必须先使其成为自由表 12. 数据库表之间创建的永久关系保存在()中。 A 数据库表 B 数据库
C 表设计器 D 数据环境设计器
13. 下列关于表的索引的描述中,错误的是() A 复合索引文件的扩展名为.CDX
B 结构复合索引文件随表的打开而自动打开
C 当对表进行编辑修改时,系统对其结构复合索引文件中的所有索引自动进行维护 D 每张表只能创建一个主索引和一个候选索引
14. 在数据库JXSJ.DBC 中,要获得表JS.DBF 的字段GH 的标题,先打开数据库JXSJ.DBC 且为当前数据库,再使用函数DBGETPROP(_()_____,”FIELD”,”CAPTION”)
A JS.GH B “JS.GH ” C GH D “GH”
15. 在参照完整性的设置中,如果当主表中删除记录后,要求删除子表中的相关记录,应将“删除”规则设置为()
A 限制 B 级联 C 忽略 D 任意 16. 库表字段的默认值保存在()文件中。 A 表 B 数据库 C 项目 D 表的索引 17. 当库表移出数据库后,仍然有效的是() A 字段的默认值 B 表的验证规则 C 结构复合索引 D 记录的验证规则
18. 以下()操作将造成相关表之间数据的不一致。 A 主表中插入记录的主关键字的值是子表中所没有的。 B 主表中删除了记录,而在子表中没有删除相关记录 C 子表中删除了记录,而在主表中没有删除相关记录 D 用主表的主关键字字段的值修改了子表中的一个记录 19. 以下()操作不会损坏相关表之间的数据一致性。 A 删除了子表中的记录而没有删除主表中相关记录 B 删除了主表中的记录而没有删除子表中相关记录
C 在子表中插入记录的外部关键字值是主表关键字中所没有的
D 在主表中修改了主关键字的值而没有同时修改子表中相关记录的外部关键字 20. 当成功执行了下一组命令时,下列不正确的说法是() OPEN DATABASE JXSJ OPEN DATABASE RSDA
A 由于打开了第二个数据库RSDA, 而使得JXSJ 数据库被关闭 B 当前数据库是RSDA
C 表达式DBUSED(“JXSJ”) AND DBUSED(“RSDA”)的值为.T. D 当在执行 close databases 命令后,jxsj 数据库没有被关闭
21. 在JS 表中要删除所有工龄(GL )大于60的记录的SQL 命令是:DELETE ___1_
JS WHERE ____2_______,要彻底删除这些记录,可用——3——命令,但这一命令的实施,必须要求表以—4—方式打开。
22.在JS 表中要按如下要求更改基本工资(JBGZ ): 工龄在10年以下(不含10年) 基本工资加20 工龄在10—19年 基本工资加35
工龄在20年以上(含20年) 基本工资加50 可用一个UPDATE 命令完成上述更改
UPDATE JS _5____ JBGZ=IIF(JS.GL
24. 若要实现多字段排序,即先按班级(BJ,N,1)顺序排序,同班的同学在按出生日期(CSRQ,D)顺序排序,同班且出生日期也相同的再按性别(XB,C,2)顺序排序,其索引表达式为_10____
25. 打开一张空表,在不移动记录指针的情况下,函数BOF()的值是__11___,EOF()的值是__12__,RECNO()的值是___13____.如果打开的表中有1条记录,在不移动记录指针的情况下,BOF()的值是__14_____,EOF()的值是___15_____,RECNO()的值是__16_____
26. 某公司数据库中雇员表含有两个日期型字段:出生日期和雇佣日期,为了避免雇佣15岁(含15岁) 以下的童工,应为该表设置__17___有效性规则,规则表达式为___18______
27. 如果字表中已有相关记录,修改主表记录的主关键字时,要求同时修改字表中相关记录,则参照完整性的___19_______规则应设置为_____20______.
答案:
选择题: D D A A D A A C B A B B D B B B C B A B
填空题:1.FROM 2.GL>60 3.ZAP 4. 独占 5.SET 6.JBGZ+20 7.JS.GL>20 8.SET FILTER TO ZYDH=”102001” 9.SET FILTER TO 10.STR(BJ)+DTOC(CSRQ)+XB 11..T. 12..T. 13.1 14..F. 15..F. 16.1 17. 记录级 18.YEAR (雇佣日期)-YEAR(出生日期) 〉=15 19. 更新 20. 级联