第 4章 数据库
4.1 设计数据库
4.2 数据库的创建及基本操作
4.4 查看和修改数据库结构
4.3 在数据库中添加和移去数据表
4.5 数据字典退出
4.1 设计数据库
4.1.3 确定所需字段退出
4.1.2 将需求分类放入表
4.1.1 分析数据需求
4.1.5 设计优化
4.1.4 确定关系
4.1.1 分析数据需求
1) 明确数据库的 目的,即需要从数据库中得到哪些信息 。 2) 确定需要保存哪些 主题 的信息 ( 表 ),以及每个主题需要保存哪些信息 ( 表中的字段 ) 。
3) 和数据库 使用人员 多交换意见 。
1) 仔细研究需要从数据库中提取的信息,并把这些信息分成各种 基本主题,每个主题都是一个独立的表 。
2) 注意 防止删除 有用的信息,同一信息尽量只保存一次,这样将减少出错的可能性 。
4.1.2 将需求分类放入表数据库设计的 步骤,
1)明确目的 2)确定需要的表 3)确定所需字段
4)确定关系 5)设计求精
4.1.3 确定所需字段确定字段的技巧,
( 1)每个字段直接和表的主题相关
( 2)不要包含可推导得到或需计算的数据
( 3)收集所需的全部信息
( 4)以最小的逻辑单位存储信息
( 5)使用主关键字段:即可以唯一确定存储在表中每个记录的一个或一组字段,它能够迅速关联多个表中的数据,并把数据组合在一起在 选择主关键字时需要注意,
1) Visual FoxPro 不允许在主关键字段中有重复值或 null 值
2)主关键字段不能太长,以方便记忆和键入
3)主关键字段值最好使用能满足存储要求的最小长度
4.1.4 确定关系数据表之间的关系可以分为:
( 1) 一对一关系,在一对一关系中,表 A 的一个记录在表 B 中只能对应一个记录,而表 B 中的一个记录在表 A 中也只能有一个记录与之对应。
( 2) 一对多关系,在一对多关系中,表 A的一个记录在表 B中对应多个记录,而表 B的一个记录在表 A中只有一个记录与之对应,这是关系型数据库中最普通的关系。
( 3) 多对多关系,在多对多关系中,表 A 的一个记录在表 B 中可以对应多个记录,而表 B 的一个记录在表 A 中也可以对应多个记录。
4.1.5 设计优化数据库设计好之后,还需要 注意的问题,
( 1)字段:是否遗忘了字段?是否有需要的信息没包括进去?
( 2)主关键字:是否为每个表选择了合适的主关键字?在使用这个主关键字查找具体记录时,它是否很容易记忆和键入?要确保主关键字段的值不会出现重复。
( 3)重复信息:是否在某个表中重复输入了同样的信息?如果是,需要将该表分成两个一对多关系的表。
( 4)表,是否有这么一个,字段很多而记录项却很少,的表,
而且许多记录中的字段值为空?如果有,就要考虑重新设计该表,使它的字段减少,记录增多。
4.2 数据库的创建及基本操作
4.2.3 打开数据库退出
4.2.2 在项目中添加数据库
4.2.1 创建数据库
4.2.5 删除数据库
4.2.4 关闭数据库
4.2.1 创建数据库
1)命令方式,CREATE DATABASE <数据库名 >
2)数据库向导
3)数据库设计器
4.2.3 打开数据库
1)命令方式,OPEN DATABASE <数据库名 >
说明:使用 SET命令可以将某一打开的数据库指定为当前数据库,格式为,SET DATABASE TO <数据库名 >
2)菜单方式:
4.2.2 在项目中添加数据库可以使用项目管理器中的“添加”按钮将数据库添加到项目中。
4.2.4 关闭数据库
1)命令方式,CLOSE DATABASE [ALL]或 CLOSE ALL
说明,CLOSE DATABASE关闭当前数据库和它所有的表
2)菜单操作:
4.2.5 删除数据库
1) 命令方式,DELETE DATABASE <数据库名 > [DELETE
TABLES]
2)项目管理器
4.3 在 数据库中添加和移去数据表
4.3.3 从数据库中移去数据表退出
4.3.2 向数据库中添加数据表
4.3.1 在数据库中建立新表
4.3.4 访问其他数据库中的表
4.3.1 在数据库中建立新表
1)当数据库处于打开状态时,可以使用建立自由表的方法在数据库中建立新表,所建立的新表将自动添加到打开的数据库中
2)数据库设计器
4.3.2 向数据库中添加数据表
1)命令方式,ADD TABLE <数据表名 >
示例,OPEN DATABASE 教学管理
ADD TABLE 学生表
2) 数据库设计器数据库表:与数据库相关联的表自由表:与数据库无关联的表数据库表与自由表之间可以相互转化。
4.3.3 从数据库中移去数据表
1)命令方式,REMOVE TABLE <数据表名 > [DELETE]
DROP TABLE <数据表名 > [NORECYCLE]
示例,OPEN DATABASE 教学管理
REMOVE TABLE 学生表
OPEN DATABASE 教学管理
DROP TABLE 学生表 NORECYCLE
2) 数据库设计器
4.3.4 访问其它数据库中的数据表使用 USE命令和,!”符号可以访问一个不在当前数据库中的表示例,USE 教学管理 !学生表
LIST
4.4 查看和修改数据库结构
4.4.3 扩展数据库文件退出
4.4.2 浏览数据库文件
4.4.1 查看数据库分层结构
4.4.4 检查数据库
4.4.5 更新表和数据库的链接
4.4.1 查看数据库的分层结构
1)命令方式,MODIFY DATABASE <数据库名 >
示例,MODIFY DATABASE 教学管理
2)菜单方式
4.4.2 浏览数据库文件
1)数据库文件为与数据库关联的每个表、视图、索引、标识、永久关系以及连接保存了一个记录;
2)保存了每个具有附加属性的表字段或视图字段的记录;
3)还包含一个单独的记录,保存数据库的所有存储过程。
4)如果浏览数据库文件本身的内容,可以使用 USE命令打开,DBC
文件。
示例:
CLOSE ALL
USE 教学管理,DBC EXCLUSIVE
BROWSE
4.4.3 扩展数据库文件
1) 每个,DBC文件都包含一个备注字段 ( 命名为 User),可用来保存用户自己的有关数据库中每个记录的信息 。
2) 也可以扩展,DBC文件,添加字段,但字段必须加在库结构的末尾 。
3) 要修改,DBC文件的结构,必须以独占方式访问它 。
4) 在,DBC文件中添加字段,使用 MODIFY STRUCTURE 命令 。
5) 向数据库文件中添加一个新字段并对其命名时,最好用,U”打头,指明它是一个用户自定义字段 。
6) 不要更改,DBC文件中任何已存在的 Visual FoxPro定义的字段,
对,DBC文件所做的任何改动都可能影响到数据库的完整性 。
示例,USE 教学管理,DBC EXCLUSIVE
MODIFY STRUCTURE
4.4.4 检查数据库检查数据库,确定数据库每个记录都与它所代表的数据库中的表和对象准确对应,可使用 VALIDATE DATABASE 命令 。
示例,OPEN DATABASE 教学管理 EXCLUSIVE
VALIDATE DATABASE
4.4.5 更新表和数据库的链接
1) 双向链接包括前链链接和后链链接
2) 前链指向数据库中包含的表,由各个表文件的相对路径和文件名称构成,保存在数据库文件 (,DBC) 中;
3) 后链指向拥有该表的数据库,由数据库的相对路径和数据库名称构成,保存在表文件 (,DBF) 的头记录中 。
4) 链接被破坏后,可使用 VALIDATE DABASE中的 RECOVER子句重新建立 。
示例,OPEN DATABASE 教学管理
VALIDATE DATABASE RECOVER
4.5 数据字典
4.5.3 设置数据表中字段的默认值退出
4.5.2 设置数据表中字段的标题和注释
4.5.1 长表名和表中的长字段名
4.5.4 指定输入掩码和定义字段格式
4.5.5 设置数据库表的有效规则
4.5.6 设置触发器
4.5.8 创建永久关系
4.5.7 主关键字值和侯选关键字值
4.5.9 设置参照完整性
4.5.10 建立存储过程
4.5.1 长表名和表中的长字段名
1.长表名
( 1)数据库表可具有长表名,最多可包含 128个字符,能够更真实的反映数据表的内容。
( 2)创建方式:
1)表设计器
2) 命令格式,CREATE TABLE <数据表名 > NAME <数据表的长表名 > (字段名 字段类型 (字段宽度 ),… )
示例,OPEN DATABASE 教学管理
CREATE TABLE 教材 NAME 全校 2000级学生使用教材 (班级 C(10),教材 C(20),价格 N(5,2))
2.长字段名
1)适用于数据库表中的字段,可长达 128个字符,自由表的字段名最多只能为 10个字符。
2)从数据库中移去一个数据表时,数据表的长字段名被截为前 10个字符。
3)当一个数据表与数据库相关联时,必须使用长字段名来引用该表中的字段,不能使用长度为 10个字符的字段名来引用。
4)在索引文件中也可以使用长字段名。但是,如果把用长字段名创建索引的表从数据库中移去时,该索引文件将不会工作。
此时,需要删除此索引文件,并用短字段名重新建立索引文件。
4.5.2 设置数据表中字段的标题和注释设置方式:
1),表设计器,的,字段注释,编辑区域中输入注释文本;
给数据库表中的字段添加标题,可 在,表设计器,,显示,区域的
,标题,文本框中输入标题 。
2) 使用 DBSETPROP( ) 函数:
格式 1,DBSETPROP(数据表名,字段名,FIELD,CAPTION,标题名 )
格式 2,DBSETPROP(数据表名,字段名,FIELD,COMMENT,注释内容 )
说明:函数返回值为逻辑值,如果添加成功,返回真值 。
示例,OPEN DATABASE 教学管理
DBSETPROP(“学生表,班级,,“FIELD”,“CAPTION”,“全校 2000
级的班级,)
4.5.3 设置数据表中字段的默认值设置方式,
( 1) 使用,表设计器,;
( 2) 使用 CREATE TABLE命令的 DEFAULT子句 。
示例,CREATE TABLE 分数 (学号 C(8),课程号 C(4),成绩 N(6,2)
DEFAULT 100)
( 3) 如果数据表已经存在,也可使用 ALTER TABLE命令 。
示例,ALTER TABLE 分数 ALTER COLUMN 成绩 SET DEFAULT
100
完整格式,ALTER TABLE <数据表名 > ALTER [COLUMN] <字段名 > [NULL/NOT NULL] [SET DEFAULT <表达式 >] [SET CHECK
<表达式 > [ERROR <字符串 >]] [DROP DEFAULT] [DROP CHECK]
4.5.4 指定输入掩码和定义字段格式
( 1) 指定输入掩码 就是定义字段中的值必须遵守的标点、空格和其他格式要求。
( 2) 设置方式,
1)使用“表设计器” 2)使用函数 DBSETPROP()设置示例,DBSETPROP("学生表,电话 ","FIELD","INPUTMASK",
"9999-9999")
4.5.5 设置数据库表的有效规则
1) 有效性规则,通过创建字段级和记录级规则,可以控制输入到数据库表的记录和字段中的数据,这些规则称为有效性规则
1) 字段级和记录级规则 将把所输入的值与所定义的规则表达式进行比较,如果输入的值不满足规则要求,则拒绝该值。
3)有效性规则只在 数据库表 中存在。
4)如果从数据库中 移去或删除一个表,所有属于该表的字段级和记录级规则都会从数据库中删除。
1.字段级规则设置方式:
( 1) 表设计器,在“规则”文本框中输入表达式来建立字段的有效性规则,在“信息”文本框中,定制错误信息提醒用户;
( 2) 命令格式,CREATE TABLE <数据表名 > (<字段名 > <字段类型 >[(<字段宽度 >)]) CHECK <表达式 > [ERROR <字符串 >]
或 ALTER TABLE <数据表名 > ALTER COLUMN <字段名 > SET
CHECK <表达式 > [ERROR <字符串 >]
说明,1)设置字段的有效性规则,可以控制输入到字段中的数据类型,以便能检验输入的数据是否正确。
2)字段级规则在字段值改变时发生作用,如果字段值没有改变,
不检查规则。
3)表达式必须是逻辑表达式。
示例,ALTER TABLE 分数 ALTER COLUMN 成绩 SET CHECK
成绩 <=100
2.记录级规则设置方式:
( 1) 表设计器,在“表”选项卡的“记录有效性”的“规则”文本框中输入表达式,在“信息”文本框中输入错误提示信息;
( 2) 命令方式格式,CREATE TABLE <数据表名 >(字段名 字段类型 (字段宽度 ))
CHECK <表达式 > [ERROR <字符串 >]
或,ALTER TABLE <数据表名 > SET CHECK <表达式 > [ERROR <
字符串 >]
说明,1) 使用记录的有效性规则,可以控制用户输入到记录中的信息类型,来检验输入的数据是否正确 。
2) 记录的有效性规则通常在输入或修改记录时被激活,在删除记录时一般不使用 。
4.5.6 设置触发器
1) 触发器,指在对数据库表中的记录进行插入,删除,更新时所启动的表达式 。 一般有插入,更新和删除三种形式 。
2) 插入触发器,表示在数据库表中 插入 记录时所触发的检测程序,
该程序可以为表达式,也可以为自定义函数 。 如果响应假值时,
表示触发失败,插入的记录将不被存储 。
3) 更新触发器,表示在 修改 记录后按回车键时,激发所设置的表达式或自定义函数进行检测,确定该记录被修改后是否符合所设置的规则 。 如果符合返回真值,保存修改后的记录;否则返回假值,不保存修改后的记录,同时还原修改之前的记录值 。
4) 删除触发器,表示数据表中记录被 删除 时,激发所设置的表达式或自定义函数进行检测 。 如果检测结果为真值,该记录可以被删除;如果返回假值,则该记录禁止被删除 。
1.创建触发器
1) 表设计器,打开“表”选项卡,分别在“插入触发器”、,更新触发器”、,删除触发器”的文本框中输入触发器表达式。
2) 命令格式,CREATE TRIGGER ON <表名 > FOR DELETE /
INSERT/UPDATE AS <表达式 >
示例,CREATE TRIGGER ON 分数 FOR INSERT AS 成绩 <=100
2.修改触发器
1)使用 表设计器
2)首先将 SET SAFETY 设置为 OFF,然后再使用 CREATE
TRIGGER命令重新创建触发器,旧的触发器将自动删除,并且建立新的触发器
3.移去或删除触发器
1)使用 表设计器
2) 命令,DELETE TRIGGER ON <数据表名 > FOR
DELETE/INSERT/UPDATE
示例,DELETE TRIGGER ON 分数 FOR INSERT
4.5.7 主关键字值和侯选关键字值
1.主关键字值
( 1) 在数据库表中,通过主关键字值可以建立 主索引文件 。
( 2) 主关键字值只能建立在数据库表中,并且该字段值不能有重复的数据,不能为 空值 (Null)。
( 3) 数据库中的任何一个数据表只能建立 一个 主索引 。
( 4) 设置方式,
1) 表设计器
2) 命令格式,CREATE TABLE <数据表名 > (<字段名 > <字段类型 >(<
字段宽度 >)) PRIMARY KEY <表达式 > TAG <标记名 >
或 ALTER TABLE <数据表名 > ADD PRIMARY KEY <表达式 > TAG
<标记名 >
示例,OPEN DATABASE 教学管理
USE 学生表
ALTER TABLE 学生表 ADD PRIMARY KEY 学号 TAG 学号
2.侯选关键字值
1) 通过候选关键字值可以建立 候选索引,并且该字值可以成为主关键字值 。
2) 该字段值不能为 空值 和有 重复 的数据,但它既可设置在自由表中,也可设置在数据库表中,而且每一个表中可针对需求设置多个候选索引 。
3) 设置方式,表设计器与命令方式示例,USE 学生表
INDEX ON 学号 TAG 学号 CANDIDATE
3.唯一性键值
1)通过唯一性键值可以建立 唯一索引 。
2)唯一性键值不限制数据表中该字段值的唯一性,但在建立的索引文件中,只保留 同值记录的第一条 。
3) 设置方式,表设计器与命令方式
4.5.8 创建永久关系
1) 永久关系 是存储在 数据库 中的数据表之间的关系,是相对于用命令 SET RELATION TO建立的临时关系而言的,他们存储在数据库文件中,不需要每次使用时都重建,在“数据库设计器”中,显示为联系数据表索引的 线 。
4.5.8 创建永久关系
2) 设置方式命令格式,CREATE TABLE <数据库表名 1> FOREIGN KEY <表达式 > TAG <标识名 >REFERENCES <数据库表名 2>
或 ALTER TABLE <数据库表名 1> ADD FOREIGN KEY <表达式
> TAG <标识名 > REFERENCES <数据库表名 2>
示例,OPEN DATABASE 教学管理
USE 学生表
ALTER TABLE 学生表 ADD PRIMARY KEY 学号 TAG 学号
ALTER TABLE 分数 ADD FOREIGN KEY 学号 TAG 学号
REFERENCES 学生表
MODIFY DATABASE
注意:在一对多关系中,,一方,必须用主关键字建立主索引,
,多方,则可使用普通索引关键字建立普通索引 。
数据库设计器方式
4.5.8 创建永久关系
3)数据库中永久关系的删除命令方式,ALTER TABLE <数据库表名 > DROP FOREIGN KEY
TAG <标识名 > [SAVE]
示例,ALTER TABLE 学生表 DROP FOREIGN KEY TAG 学号
SAVE
数据库设计器方式
4.5.9 设置参照完整性
1) 参照完整性 ( RI,Referential Integrity)就是指建立一组规则,当用户插入、更新或删除记录时保护数据表之间已定义的关系。
2)实施参照完整性规则可以 确保,当主表中没有关联记录时,记录不得添加到相关表中;主表的值不能改变,若这个改变将导致相关表中出现孤立记录;若某主表记录在相关表中有匹配记录,则该主表记录不能被删除。
3)使用 参照完整性生成器
4.5.9 设置参照完整性
4.5.10 建立存储过程 (*)
1)存储过程是存储在,DBC文件中的 Visual FoxPro 代码,是专门操作数据库中数据的代码过程。
2)使用存储过程主要是为了创建用户自定义函数。
3)存储过程的使用:数据库设计器,MODIFY PROCEDURE