第三章:将表加入数据库

单独使用表,可以为我们存储和查看信息提供很多帮助。但是如果把若干表组织到一个数据库中,您就可以充分地利用 Visual FoxPro 提供的强大功能。通过把表放入数据库,可减少冗余数据的存储,保护数据的完整性。例如不必对已有的每一个客户订单的客户姓名和地址重复存储。可在一个表中存储用户的姓名和地址并把其关联到存储在另一个表中的订单上。如果客户的地址改变了,只需改变一个记录。可控制字段怎样显示或键入字段中的值。也可添加视图并连接到一个数据库中,用来更新记录或扩充访问远程数据的能力。

本章主要介绍一些基本技术:在数据库中加入表或视图;设置表间关系;控制数据的输入以及数据库表的其他属性。有关数据库、数据库设计过程以及数据库表属性的使用等内容在《程序员指南》的第五章“设计数据库”及第六章“创建数据库”中进行介绍。

本章要点:

使用数据库

数据库提供了如下的工作环境:存储一系列的表,在表间建立关系,设置属性和数据有效性规则使相关联的表协同工作。数据库文件保存为带 .dbc 扩展名的文件。

数据库的内容

数据库可以单独使用,也可以将它们合并成一个项目,用“项目管理器”进行管理。数据库必须在打开后才能访问它内部的表。

若要打开一个数据库

  1. “项目管理器”中,选择要使用的数据库名。

  2. 选择“修改”。

也可以从“文件”菜单中选择“打开”,然后选择数据库名。

若要看一下样例数据库的结构,可以打开数据库 Testdata.dbc,该文件存于 Visual Studio …\Samples\Vfp98\Data 目录下。

打开数据库后,就会显示出“数据库设计器”,它向用户展示了组成数据库的若干表以及它们之间的关系。

“数据库设计器”中的表

可以用“数据库设计器”中的工具栏快速访问与数据库相关的选项。“数据库”菜单中包含了各种可用的数据库命令。此外,在“数据库设计器”中单击鼠标右键,可以显示出快捷菜单。

在“数据库设计器”中调整表的大小,可以看到其中更多(或更少)的字段。也可以折叠视图,只显示表的名称。当数据库中包含多个表时,这一方法十分有用。

若要展开或折叠一个表

  1. 将鼠标指针指向“数据库设计器”中的一个表,单击鼠标右键。

  2. 选择“展开”或“折叠”。

若要展开或折叠所有表

  1. 将鼠标指针指向“数据库设计器”窗口,单击鼠标右键。

  2. 选择“全部展开”或“全部折叠”。

    数据库中折叠后的表

可以更改显示在“数据库设计器”中的表的布局。例如,完成数据库操作后,您也许想让这些表恢复为默认的高度和宽度,或想对齐表以改进布局。

若要重排数据库的表

若要使用数据库的说明,可添加注释。

若要添加数据库的备注

创建新数据库

若要把数据并入数据库中,必须先建立一个新的数据库,然后加入需要处理的表,并定义它们之间的关系;也可以用“数据库设计器”建立新的本地或远程视图,然后将它们加入到自已的数据库中。

使用“数据库向导”

可以使用“数据库向导”帮助您创建数据库。向导提供模板并提出一系列问题,然后根据您的回答帮助您建立数据库。

若要使用“数据库向导”创建数据库

  1. 在“项目管理器”中选择“数据”选项卡,然后选择“数据库”。

  2. 选择“新建”。

  3. 选择“数据库向导”按钮。

  4. 按照屏幕上向导的指示操作。

也可以从菜单中访问“数据库向导”,方法是从“文件”菜单中选择“新建”命令,再选择“数据库”,然后选择“向导”选项。

向导提供了表、视图、主关键字以及关系的模板,您可以选取或编辑它们。

若要创建新的数据库

  1. 在“项目管理器”中选择“数据库”。

  2. 选择“新建”。

在创建新数据库时,会显示一个空的“数据库设计器”窗口,与此同时,“数据库设计器”工具栏将变为有效。

在“数据库设计器”中创建一个新的数据库

在数据库中加入表

建立数据库的第一步是向数据库中添加表,您可以选定目前不属于任何数据库的表。因为一个表在同一时间内只能属于一个数据库,所以必须将表先从旧的数据库中移去后才能将它用于新的数据库中。

若要向数据库中添加表

  1. 从“数据库”菜单中选择“添加表”。

  2. 在“打开”对话框中选定一个表,然后选择“确定”。

当数据库不再需要某个表,或其他数据库需要使用此表时,可以从该数据库中移去此表。

若要从数据库中移去表

  1. 选定表。

  2. 从“数据库”菜单中选择“移去”。

  3. 在对话框中选择“移去”。

创建并添加视图

视图用于显示一个或多个表中的记录,并可用来更新源表中的数据。如果想在数据库中加入一个本地视图,可以基于当前数据库所包含的表或视图建立一个新视图,或者从当前数据库以外的自由表中建立新视图。如果所需信息在远程数据源上,还可以从中创建一个远程视图,并将它合并到当前的数据库中。

因为视图只能存在于数据库中,所以必须在数据库中创建视图,并将它合并到您自己的数据库中。

有关建立本地和远程视图的详细内容,请参阅第五章“使用视图更新数据”

在数据库中查找表或视图

如果数据库中有许多表和视图,有时需要快速找到指定的表。可以使用寻找命令加亮显示所需的表或视图。

若要寻找数据库中的表

如果只想显示表或只想显示某些视图,可选择仅显示表或仅显示视图。

若要仅显示表或视图

关联表

通过链接不同表的索引,“数据库设计器”可以很方便地建立表之间的关系。因为这种在数据库中建立的关系被作为数据库的一部分保存了起来,所以称为永久关系。每当您在“查询设计器”或“视图设计器”中使用表,或者在创建表单时在“数据环境设计器”中使用表时,这些永久关系将作为表间的默认链接。

准备关系

表之间创建关系之前,想要关联的表需要有一些公共的字段和索引。这样的字段称为主关键字字段和外部关键字字段。主关键字字段标识了表中的特定记录。外部关键字字段标识了存于数据库里其他表中的相关记录。还需要对主关键字字段做一个主索引,对外部关键字字段做普通索引。

支持两表关系的索引

若要决定哪些表需要这类字段,需要考虑数据与记录数目的关联方式。例如,一个客户可能有多个订单。因此,客户表应包含主记录,订单表包含相关记录。

为准备两个关系表中的主表,需要在主表中添加主关键字字段(在本例中为 customer)。这是因为 customer 表中一条记录与 orders 表的多个记录关联。

若要在两个表之间提供公共字段,需要在带有关联记录的表中添加外部关键字字段(在本例中为 orders 表)。外部关键字字段必须以相同的数据类型与主关键字字段相匹配,而且一般用相同的名称。且以主关键字字段和外部关键字字段创建的索引必须带有相同的表达式。

有关主关键字字段,外部关键字字段及关系的详细内容,请参阅《程序员指南》中第七章“处理表”

若要准备关系

  1. 决定哪个表中包含有主记录,哪个表中包含有关联记录。

  2. 对有主记录的表,添加一个整型字段,再对该字段添加一个主索引。

  3. 对包含有关联记录的表,添加一个与主记录表中关键字匹配的字段,再对该新字段添加一个普通索引。

    注释 两个索引要用相同的表达式。例如,如果在主关键字字段的表达式中使用一个函数,在外部关键字字段表达式中也要使用同一个函数。

创建和编辑关系

定义完关键字段和索引后,即可创建关系。如果表中还没有索引,需要在“表设计器”中打开表,并且向表中添加索引。有关添加表中索引的详细内容,请参阅第二章“创建表和索引”

若要在表间建立关系

设置完关系之后,在数据库设计器中可看到一条连接了两表的线。

注释 只有在“数据库属性”对话框中的“关系”选项打开时,才能看到这些表示关系的连线。可以打开“数据库属性”对话框,方法是从“数据库设计器”的快捷菜单中选择“属性”。

关系线表示了两个表之间的关系

您也可编辑关系

若要编辑表间的关系

“编辑关系”对话框

所建关系的类型是由子表中所用索引的类型决定的。例如,如果子表的索引是主索引候选索引,则关系是一对一的;对于唯一索引普通索引,将会是一个一对多的关系。

定义字段显示

将表添加到数据库后,便可以立即获得许多在自由表中得不到的属性。这些属性被作为数据库的一部分保存起来,并且一直为表所拥有,直到表从这个数据库中移去为止。

通过设置数据库表的字段属性,您可以:

以下部分说明了属性的一些内容。有关更详细内容,请参阅《程序员指南》中第七章“处理表”

设置字段标题

通过在表中给字段建立标题,可以在“浏览”窗口中或表单上显示出字段的说明性标签。

若要给字段指定一个标题

  1. 在“数据库设计器”中选定表,然后在“数据库设计器”工具栏中选择“修改表”。

  2. 选定需要指定标题的字段。

  3. 在“标题”框中,键入为字段选定的标题。

  4. 选择“确定”。

例如,某字段名为“Cust_ID”,当使用“Customer Number”作为标题显示该字段时,浏览窗口中原来的“Cust_ID”字段名被替换为“Customer Number”。由于您可以用自己命名的标题取代原来的字段名,这为显示表单中的表提供了很大的灵活性。

基于标题的列名

为字段输入注释

在建立好表的结构以后,您可能还想输入一些注释,来提醒自己或他人表中的字段所代表的意思。在“表设计器”中的“字段注释”框内输入信息,即可对每一个字段进行注释。

为字段作注释

若要为一个字段作注释

  1. 在“表设计器”中,选定字段。

  2. 在“字段注释”框中键入注释内容。

  3. 选择“确定”。

控制字段数据输入

可使表中的数据输入更容易一些,方法是提供字段的默认值,定义输入到字段中值的有效性规则。

设置默认字段值

若要在创建新记录时自动输入字段值,可以在“表设计器”中用字段属性为该字段设置默认值。例如,如果买主大部分来自一个特殊地区,可把该地区名称设为地区字段的默认值。

若要设置字段的默认值

  1. 在“数据库设计器”中选定表。

  2. 从“数据库”菜单中选择“修改”。

  3. 在“表设计器”中选定要赋予默认值的字段。

  4. 在“默认值”框中键入要显示在所有新记录中的字段值(字符型字段应用引号括起来)。

  5. 选择“确定”。

例如,您可以使 Products 表中的所有新记录都有一个默认值为“15”的 reorder_at 字段。

设置字段的默认值

设置有效性规则和有效性说明

如果在定义表的结构时输入字段的有效性规则,那么可以控制输入该字段的数据类型。例如,可以限制某字段可接受的输入项:某些州、购货订单的数量、合法的 ID 号等等。

若要为字段设置有效性规则和有效性说明

  1. 在“表设计器”中打开表。

  2. 在“表设计器”中选定要建立规则的字段名。

  3. 在“规则”方框旁边选择对话按钮。

  4. 在“表达式生成器”中设置有效性表达式,并选择“确定”。

  5. 在“信息”框中,键入用引号括起的错误信息。

  6. 选择“确定”。

例如,建立一个简单的地址表,并限制在“Country”字段中只能输入“UK”或“USA”。

Customer.country = "UK" OR Customer.country = "USA"

如果输入的信息不能满足有效性规则,则在“有效性说明”中设定的信息便会显示出来。例如,可以显示如下信息:

"Country must be USA or UK. Please reenter value."

建立有效性规则时,必须创建一个有效的 Visual FoxPro 表达式,其中要考虑到这样一些问题:字段的长度、字段可能为空或者包含了已设置好的值等等。表达式也可以包含结果为真或假的函数。

例如,假设现在正使用 Visual Studio …\Samples\Vfp98\Data 目录下的 Customer 表,并想确保新记录的 Customer ID 代码少于 6 个字符,则可在 Cust_ID 字段的“规则”框中,输入:

LEN(ALLTRIM(CUST_ID)) < 6

然后在“信息”框中输入下述错误提示:

"Customer ID must be less than 6 characters. Please reenter."

如果您以后输入的 Customer ID 太长,就会出现一个对话框,其中显示有效性说明。

当输入非法数值时,屏幕上会显示有效性说明

控制记录的数据输入

不但可以给表中的字段赋予数据库的属性,而且可以为整个表或表中的记录赋予属性。在“表设计器”中,通过“表”选项卡可以访问这些属性。

设置表的有效性规则

向表中输入记录时,若要比较两个以上的字段,或查看记录是否满足一定的条件时,可以为表设置有效性规则。

若要设置有效性规则

  1. 选定表,然后选择“数据库”菜单中的“修改”。

  2. 在“表设计器”中选择“表”选项卡。

  3. 在“规则”框中,输入一个有效的 Visual FoxPro 表达式定义规则。或选择对话按钮来使用“表达式生成器”。

  4. 在“信息”框中输入提示信息。当有效性规则未被满足时,将会显示该信息。

  5. 选择“确定”。

  6. 在“表设计器”中选择“确定”。

例如,假如您正在使用 Visual Studio …\Samples\Vfp98\Data 目录下的 Customer 表,并且不希望华盛顿州客户的定单超过 10,000 美元,则可以在“表”选项卡的“规则”框中键入下述表达式:

IIF(Customer.region = "WA" and Customer.maxordamt > 10000, .F.,.T.)

“信息”框内的文字可以是:

"Orders from WA state customers cannot exceed $10,000"

按照有效性规则,某些输入将被拒绝

设置触发器

触发器是一个在输入、删除或更新表中的记录时被激活的表达式。通常,触发器一般需要输入一个程序或存储过程,在修改表时,它们被激活。有关触发器的详细内容,请参阅《程序员指南》第七章“处理表”中的“使用触发器”。

管理数据库记录

建立关系后,也可设置管理数据库关联记录的规则。这些规则控制参照完整性。例如,如果添加一个供应商记录,您可能想在产品表中自动添加关于供应商产品的信息。为了帮助设置规则,控制如何在关系表中插入、更新或删除记录,您可使用“参照完整性设计器”。

在“编辑关系”对话框中的“参照完整性”按钮

若要使用“参照完整性生成器”

  1. 在“数据库设计器”中建立两表之间的关系,或者双击关系线来编辑关系。

  2. 在“编辑关系”对话框中选择“参照完整性”按钮。

  3. 在“参照完整性生成器”中选择更新、删除或插入记录时所遵循的若干规则。

  4. 选择“确定”,然后选择“是”保存所做的修改,生成“参照完整性”代码,并退出参照完整性生成器。