首页 -> 2008年第5期

数据库管理系统Visual FoxPro6.0中表的几种关系

作者:石玉芳




  表是Visual FoxPro6.0数据管理系统中的基本操作对象,要正确地操作表,就要弄清表的一些关系。
  
  (一)表的永久关系
  
  1.什么是永久关系?永久关系是两个以上数据库表之间建立的一种关系。这种关系将被作为数据库的组成部分而永久保存,不仅运行时存在,而且一直保留,不论库表是否打开此关系都存在。
  2.永久关系的建立。永久关系的建立是在数据库设计器中进行的,要在两表间建立永久关系,必须以一个表为父表,另一表为子表,在父表中以关键字建立主索引,子表中以同样的关键字建立普通索引,通过父表的主索引和子表的普通索引建立起两个表之间的联系。如下图中的“学生档案”表为父表,在该表中以“学号”字段为关键字建立了主索引,“成绩”表为子表,在该表中同样以“学号”为关键字建立了普通索引。
  建立两表间的永久关系的具体方法是:在数据库设计器中,单击父表中的主索引字段“学号”,保持按住鼠标左键不放,并拖动鼠标到子表的普通索引“学号”字段上,鼠标箭头会变成小矩形状,最后释放鼠标,则在父表的主索引与子表普通索引字段间出现一条连线,表示在两表间建立了永久关系,如图一所示。
  
  3.永久关系的作用: ①在许多场合可以作为默认的临时关系,在“查询设计器”或“视图设计器”中自动作为默认连接条件。②作为表单和报表的默认的临时关系,在“数据环境设计器”中显示。③用来存储参照完整性信息
  
  (二)表的临时关系(表的关联)
  
  1.什么是表的临时关系?用“setrelationto 关键字 into 子表名”命令建立的不同工作区数据表之间的联系,这种联系叫临时关系,也叫关联,或在“数据工作期”窗口建立。建立关联的表中,总有一个是父表,其余为子表。
  2.临时关系的作用 每个打开的表都有一个记录指针,用以指向当前记录。在不同工作区中打开的各个表的记录指针通常是彼此独立的,建立了临时关系后,不同工作区的记录指针建立起一种临时的联动关系,当父表的指针移动时,子表的记录指针也随之移动,表被关闭后,临时关系自动解除。
  3.永久关系与临时关系的相同点 都有“一对一”和“一对多”的关系,都有父表和子表之分。
  4.永久关系与临时关系的区别:
  (1)临时关系是用来控制在不同工作区中打开的两个以上表之间记录的访问;而永久关系主要是用来存储相关表之间的参照完整性,附带地可以作为默认的临时关系或查询中默认的连接条件。
  (2)临时关系在表打开之后使用“setrelationto 关键字 into 子表名”命令建立,随表的关闭而解除;永久关系永久地保存在数据库中而不必在每次使用表时重新创建。
  (3)临时关系可以在自由表之间、库表之间或自由表与库表之间建立,而永久关系只能在库表之间建立。
  (4)永久关系,父表指针移动时,子表的指针不动。即建立永久关系的表,不能控制不同工作区中表记录指针的联动。而临时关系,最突出的特点是能实现指针的联动,即是在不同工作区中建立两个表的记录指针的临时联动关系,当父表的子针移动时,子表的指针随之移动。
  (5)在建立两表间的永久关系前,必须先为父表和子表以相同的关键字建立索引。在父表中建立主索引,子表中建立普通索引,通过父表的主索引和子表的普通索引建立起两个表的关系。关系建立后,在两表的索引字段间有一条连线。建立两表的临时关系时,父表可以没有按建立临时关系的关键字段建立索引,但子表必须按建立临时关系的关键字段建立普通索引。
  
  (三)表之间的连接
  
  1.什么是连接?在对多个表或视图进行查询时,需要为这些表或视图之间建立关系,这种关系叫连接(连接)。连接是以表或视图间相同的字段建立的,建立了连接的表或视图间有一条连线。
  2.连接的作用:当用查询设计器或视图设计器对多个表或视图建立查询时,需要为这些表或视图之间建立连接。
  3.连接的建立:是通过查询设计器或视图设计器中的“连接”选项卡来设置连接表达式进行连接,建立连接条件的字段并不需要建立索引。这点不像永久关系和临时关系,表之间的关系是松散的。“连接”选项卡的作用是为匹配一个或多个表或视图中的记录指定连接条件(如字段的特定值,表间临时关系的连接条件)。图二是在查询设计器中为“成绩”表与“学生档案”表之间建立连接。
  
  图三为表连接的四种情况:
  (1)Inner Join (内部连接):指定只有满足连接条件的记录包含在结果中。此类型是默认的,也是最常使用的连接类型。永久关系就是默认的连接。
  (2)Right Outer Join(右连接):右表的某条记录与左表的所有记录依次比较字段值,如果有满足连接条件的,产生一个真实值记录;如果都不满足,则产生一个含Null值的记录,接着,右表的下一条记录与左表的所有记录依次比较字段值,重复上述过程,直到右表所有记录都比较完为止(即使不匹配连接条件)都包含在结果中。
  (3)Left Outer Join(左连接):左表的某条记录与右表的所有记录依次比较字段值,如果有满足连接条件的,产生一个真实值记录;如果都不满足,则产生一个含Null值的记录,接着,左表的下一条记录与右表的所有记录依次比较字段值,重复上述过程,直到左表所有记录都比较完为止(即使不匹配连接条件)都包含在结果中。
  (4)Full Join(完全连接)先按右连接比较字段值,然后按左连接比较字段值,重复记录不列入查询结果中。所有满足和不满足连接条件的记录都包含在结果中。此字段必须满足实例文本(字符与字符相匹配)。