Visual FoxPro 是一个关系型数据库管理系统,在每个独立的表中存储的数据之间具有一定的关联。可以在这些表之间定义关系,而Visual FoxPro 可以利用这些关系来查找数据库中有联系的信息。
为使Visual FoxPro 更有效的工作,数据库的每个表都必须有一个或一组字段可用来唯一确定存储在表中的每个记录,通常使用唯一的标识号作为这样的字段,如学号、身份证号等,这就是主关键字。Visual FoxPro 利用主关键字迅速关联多个表中的数据,并把数据组合在一起,如图3-30所示。
图3-30 表间的关系
根据两个表中记录的匹配情况,可以将表之间的关系分为3类,即“一对一”、“一对多”和“多对多”的关系。
在“一对一”的关系中,表1中的一条记录只能与表2中的一条记录相匹配,同时表2中的一条记录也只能与表1中的一条记录相匹配,那么称表1和表2是“一对一”关系,一般记作“1:1”。这种对应关系比较简单,但在实际中并不常用。
当两个数据库表的连接关系是一对一的时候,主表和从表中的索引类型都必须是主索引标识或关键字,或者是候选索引标识或关键字。
Visual FoxPro数据库中最常用的关系类型就是“一对多”关系。假设有表1和表2,如果表1中的一条记录能够与表2中的多条记录匹配,而表2中的一条记录只能和表1中的一条记录匹配,那么称表1和表2是“一对多”关系,一般记作“1:n”。
索引标识或关键字的类型决定了要建立的数据表关系的类型。在一对多关系中,“一”方必须是主索引标识或关键字,或者是候选索引或关键字;而“多”方则使用普通索引标识或关键字。
如果表1中的一条记录能与表2中的多条记录相匹配,同时表2中的一条记录也能与表1中的多条记录匹配,则称为“多对多”关系,一般记作“m:n”。它们之间的关系一般只能通过定义第三个表来完成,这第三个表称为“联结表”,或称为“纽带表”。
例如,表2中某个记录对应表1中多个记录,同时表2中另一记录对应表3中多个记录,那么称表1和表3是“多对多”关系。
定义表之间关系的种类,主要取决于两个表之间的相关字段是如何选取的,其基本原则如下:
(1)如果两个表的相关字段中只有一个是主关键字,则应创建“一对多”关系。
(2)如果两个表的相关字段分别是两个表的主关键字或者只有一个是关键字,则应创建“一对一”关系。
(3)如果两个表都能通过第三个表创建“一对多”关系,第三个表的主关键字包含来源于这两个不同表中的关键字,则这两个表应创建“多对多”关系。
参照完整性是Visual FoxPro定义的一个规则系统,系统通过使用这个规则来确保相关表中记录之间关系的有效性,并且不会意外地删除或更改相关数据。
在打开的“数据库设计器”窗口中,单击鼠标右键,在弹出的快捷菜单中选择“编辑参照完整性”命令,则系统会弹出如图3-31所示的“参照完整性生成器”对话框,然后进行相应的设置即可。
图3-31 “参照完整性生成器”对话框
设置参照完整性时需要符合下列条件:
(1)来自于主表的匹配字段是主键或具有唯一索引。
(2)相关的字段具有相同的数据类型。
(3)两个表属于同一个Visual FoxPro数据库。
在使用参照完整性时需要遵循以下一些原则:
(1)不能在相关表的关键字段中输入不存在该主表主键中的值。
(2)如果在相关表中存在匹配的记录,则不能从主表中删除这个记录。
(3)如果某个表记录有相关的记录,则不能在主表中更改主键值。
对于实施参照完整性的关系,也可以指定是否允许自动对相关记录进行级联更新和级联删除。如果设置了级联更新和级联删除,则在删除记录或更改主表中主键的值时,Access会对相应表做必要的更改。
当设定了“级联更新”后,则不管何时更改主表中记录的主键,Access都会自动在所有的相关记录中将主键更新为新值。
在Visual FoxPro中,建立表间的关系是建立在两个表的索引机制上的。建立两个表之间的关系,首先须将表分为主表和子表。具有关联性的两个数据表中,一般称被引用关联的数据表为主表,而被用来进行引用设置的数据表为子表。主表中的索引必须是主索引或者是候选索引;而子表中的索引可以是主索引、候选索引和普通索引。
建立表间关系的操作是:在数据库设计器中单击主表的索引,然后拖动鼠标到子表的索引上,松开鼠标后,就在主表和子表之间建立了一个关系,用线连起来。如果是一对多的关系,则在主表处是“+”。
在数据库设计器中设置的表间关系是永久关系。永久关系是存储在数据库文件中的数据库表间的关系,永久关系不必在每次使用时重新建立。
永久关系有以下性能:
(1)在查询设计器和视图设计器中,自动作为默认链接条件。
(2)在数据库设计器中,显示为联系表索引的线。
(3)作为表单和报表的默认值关系,在数据环境设计器中显示。
(4)用来存储参照完整性信息。
如果发现表之间的关系定义有误,用户可以方便地对已有的关系进行编辑和删除操作。
用户可以随时编辑修改已经创建好的关系。首先单击需要修改的关系线,然后选择“数据库”→“编辑关系”命令,或者单击鼠标右键,在弹出的快捷菜单中选择“编辑关系”命令,如图3-32所示,此时弹出如图3-33所示的“编辑关系”对话框。
图3-32 在快捷菜单中选择“编辑关系”
图3-33 “编辑关系”对话框
可以在此对话框中重新设置表间的关系。例如,想要使用其他的索引字段来创建两表之间的链接,可以分别打开左右的下拉列表框,选择新的连接字段。完成需要的编辑后,单击“确定”按钮即可。
要删除两个表之间的关系链接,首先单击需要删除的关系线,单击鼠标右键,在弹出的快捷菜单中选择“删除关系”命令即可,此时“数据库设计器”中两个表之间的连接线会消失,表示已经删除了表间的链接。也可以先单击连接线,该连接线将会变粗,表示已经选中,再按Delete键删除连线。