1、1,第三部分 Visual FoxPro 6.0基本操作,第6章 创建数据库,2,本章内容提要,数据库表间的关系 创建数据库 使用数据库中的数据表 数据库中数据表间的关联,3,Visual FoxPro的数据库,VFP的突出特点是其高效实用的数据库机制。与传统的微机数据库管理系统相比,VFP的数据库功能已不仅仅是存储数据表,而且可以在表间建立联系、设置属性、数据有效性规则、说明及缺省值,使关联的表协同工作。 只有当数据表包含在数据库中时,才能充分利用参照完整性,保持相关联表中记录的一致性,最大限度地减少冗余。 数据库中的数据表比自由表具有更强的功能,4,6.1 数据库表间的关系,1.一对一关系
2、 在一对一关系中,表A的一个记录在表B中只能对应一个记录,而表B中的一个记录在表A中也只能有一个记录与之对应。 数据表间建立一对一关系,是在两个数据表中选一个相同的索引字段作为关键字段,把其中一个数据表称为父表,其关键字段称为原始关键字段,该字段值是唯一的,而把另一个数据表称为子表,其关键字段称为外来关键字段,该字段值是也唯一的。,5,一对一关系实例,父表 原始关键字段 值唯一,子表 外来关键字段 值唯一,6,6.1 数据库表间的关系,2.一对多关系 在一对多关系中,表A的一个记录在表B中可以有多个记录与之对应,而表B中的一个记录在表A中只能有一个记录与之对应。 数据表间建立一对多关系,是在两
3、个数据表中选一个相同的索引字段作为关键字段,把其中一个数据表称为父表,其关键字段称为原始关键字段,该字段值是唯一的,而把另一个数据表称为子表,其关键字段称为外来关键字段,该字段值是重复的。,7,一对多关系实例,子表 外来关键字段 值不唯一,父表 原始关键字段 值唯一,8,6.1 数据库表间的关系,3.多对一关系 数据表间建立多对一关系,是在两个数据表中选一个相同的索引字段作为关键字段,把其中一个数据表称为父表,其关键字段称为原始关键字段,该字段值是重复的,而把另一个数据表称为子表,其关键字段称为外来关键字段,该字段值是唯一的。 总之,如果作为父数据表的关键字段值是唯一的,与之关联的子数据表的关
4、键字段值是重复的,两个数据表间为一对多关系;如果作为父数据表的关键字段值是重复的,与之关联的子数据表的关键字段值是唯一的,则两个数据表间为多对一关系;,9,多对一关系实例,父表 原始关键字段 值不唯一,子表 外来关键字段 值唯一,10,6.1 数据库表间的关系,4.多对多关系 在多对多关系中,表A的一个记录在表B中可以对应多个记录,而表B中的一个记录在表A中也可以对应多个记录。 数据表间建立多对多关系,是在两个数据表中选一个相同字段作为关键字段,把其中一个数据表的关键字段称为原始关键字段,该字段值是重复的,而把另一个数据表中的关键字段称为外来关键字段,该字段值也是重复的。,11,多对多关系实例
5、,多对多,12,多对多关系实例,通常在处理多对多关系时,通过一个“中间表”将多对多关系分解成两个不同的一对多关系,或两个不同的多对一关系,以减少冗余。,关键字段: 学号*课程编号,13,6.2 创建数据库,创建数据库就是把若干个相关联的数据表有效地存储在一起,使它们更好地发挥作用。 建立数据库时,自动形成数据库文件名的后缀为 .dbc 建立数据库时,自动形成注释文件的后缀为.DCT(文件名与数据库同名) 建立数据库时,自动形成索引文件的后缀为.DCX(文件名与数据库同名) 建立独立的自由表时,自动形成表文件后缀为 .dbf 建立独立的自由表时,自动形成备注文件后缀为 .FPT 建立独立的自由表
6、结构时,自动形成索引文件后缀.CDX 在独立的自由表中,对字段排序形成索引文件后缀 .IDX 备份文件后缀为 .BAK 数据程序文件 .PRG,14,6.2.1 数据库的建立,建立新数据库步骤: (1)单击“文件”菜单的“新建”,进入“新建”对话框; (2)选择“数据库”,再按“新建文件”按钮,进入“创建”对话框; (3)输入数据库名,按“保存”,进入“数据库设计器”窗口。,15,6.2.2 打开数据库,打开已有数据库步骤: (1)单击“文件”菜单的“打开”,进入“打开”对话框; (2)在“打开”对话框中,先在“文件类型”下拉列表中选择“数据库”类型,再输入要打开的数据库名字,按“确定”按钮,
7、进入 “数据库设计器”窗口。 数据库打开后,操作数据库有两种方法: 方法1:在功能菜单“数据库”下拉菜单中选择有关操作 方法2:在“数据库设计器”对话框,单击鼠标右键,打开“数据库”快捷菜单。,16,6.2.3 向数据库添加数据表,向数据库中添加数据表步骤: (1)打开要添加数据表的数据库文件,进入 “数据库设计器”窗口; (2)选择“数据库”菜单的“添加表”,进入“打开”对话框; (3)依此选择要添加的数据表,“确定”。 注意: 数据库中的数据表只能属于一个数据库文件 .dbc数据库文件仅存储指向表文件的路径指针,17,操作实例,例:向xsda.dbc数据库中添加数据表xsda.dbf、xs
8、cj.dbf、kc.dbf,18,6.3 使用数据库中的数据表,6.3.1 设置数据表中字段的显示标题 自由表中字段名的最大长度只有10个字符,有时难以概括清楚该名下数据的属性及含义。 如:某保险单中的“主险保险单号码”、“保险责任起止时间”等栏目 为简化编程,程序内部字段名常设计为代码。 如:XM、XB、NAME、SEX等,19,6.3.1 设置数据表中字段的显示标题,(1)打开数据表所在的数据库文件,进入 “数据库设计器”窗口; (2)选中某数据表,再选择主菜单“数据库/修改” ,进入“表设计器”窗口(注意:和自由表界面不同!); (3)先定位好字段,然后在“显示“框“标题”处输入新的字段
9、显示标题,“确定”,并再次确认“是否永久性地更改表结构?”。 (4)选择“数据库”菜单的“浏览”进入“浏览”窗口; 例:将“出生日期”字段的显示改为“生日”,20,6.3.2 设置数据表中字段的注释,(1) (2)同上,进入“表设计器”窗口 (3)选定要加注释的字段,再选择“字段注释(F)”文本框,输入注释内容后“确定”(默认文件扩展名为.DCT)。 例:为“出生日期”加日期格式的注释 6.3.3 设置数据表中字段的默认值 (1) (2)同上,进入“表设计器”窗口 (3)选定要设置默认值的字段,再选择“字段有效性”“默认值”文本框,输入默认值内容后“确定”。 注意:字符串要加定界符 例:设置“
10、民族”字段的默认值“汉”(追加记录时起作用),21,6.3.4 设置数据表中字段有效规则,(1) (2)同上,进入“表设计器”窗口 (3)选定要加入有效规则的字段,再选择“字段有效性“框中“规则”文本框,输入一个有效规则后“确定”。 例:使XSDA数据库中的XSDA数据表的“学号”字段数据的第3、4个字符不为“99”。在“规则”栏输入:SUBSTR(学号,3,2)“99” 对输入的不符合规则的数据,系统提示“违反了字段的有效性规则”,不能退出当前字段,直至修改正确。可在“表设计器”的“字段有效性”框中“信息”栏输入自己的错误提示信息(要加定界符)。,22,SUBSTR( )函数,格式:SUBS
11、TR(, ,) 功能:在的起截取长的子字符串。 例: ? substr(“经管系工商管理专业“,1,6) 结果为:经管系 ? substr(“经管系工商管理专业“,7,8) 结果为:工商管理 ? substr(“经管系工商管理专业“,7) 结果为:工商管理专业,23,6.4 数据库中数据表间的关联,通过链接不同表的索引,“数据库设计器”可以很方便地建立表之间的关系。因为这种在数据库中建立的关系被作为数据库的一部分而保存起来,所以称永久关系。 永久关系具有以下性能: 在“查询设计器”和“视图设计器”中,自动作为默认连接条件; 在“数据库设计器”中显示为联系表索引的线; 作为表单和报表的默认关系,
12、在“数据环境设计器”中显示; 用来存储参照完整性信息,24, 强调一下索引的概念 ,索引一般分为主索引、候选索引、唯一索引和普通索引 主索引:主索引通常是表的关键字索引。因此,主索引只能在数据 库表中,而不能使用于自由表中,且索引不允许有重复 值。一个表只能建立一个主索引。,候选索引:就是候选关键字,与主索引一 样,候选索引不允许有重 复值。候选索引与主索引的唯一区别是:候选索引可以 有多个索引。,唯一索引:主索引是唯一索引,但唯一索引不一定是主索引。唯一 索引表示索引值只能取一个,如果出现两个或两个以上 的索引值,只取其中一个。由此可见,唯一索引可能丢 掉一些表记录。,普通索引:普通索引是允
13、许重复索引值的索引,普通索引没有前面 几种索引的约束条件。普通索引可以用在数据库表中, 也可使用于自由表中。,25,6.4.1 建立数据表间的关联,1.准备关联 确定关联表的父子关系 确定共同的索引字段,父表中的主(原始)关键字段做主索引或候选索引。 所建关系的类型由子表中的外来关键字段所用的索引类型决定。若是主索引或候选索引,则为一对一关系;若为普通索引或唯一索引,则为一对多关系。,26,6.4.1 建立数据表间的关联,2.创建关联 (1)打开数据库文件,进入“数据库设计器”窗口; (2)首先激活父数据表的主索引字段,拖曳鼠标到与其建立关联的子数据表中的对应字段处,松开左键即可。此时,在两表
14、间显示一条“连线”。 注意:只有当“数据库/属性/关系”对话框中“关系”复选框选中时,才显示“连线”。,27,实例,例:在XSDA数据库中,让XSDA(主索引)与XSCJ(普通索引)数据表间按“学号”关键字段建立“一对多”关联;让XSCJ(普通索引)与KC (主索引)数据表间按“课程编号”关键字段建立“多对一”关联关系。 结果:,28,6.4.2 设置参照完整性,“参照完整性生成器”中的参照完整性规则控制相关数据表中记录的插入、删除或修改。 实施参照完整性可防止下面情况发生: 当父表中没有相关记录时,把记录添加到相关的子表中; 改变父表的值,从而导致在相关子表中出现孤立记录; 删除在相关子表中
15、有匹配记录的父表记录,29,步骤:,(1)打开数据库文件,进入“数据库设计器”窗口; (2)单击两数据表间的关系连线,使之加粗(在线外面再单击一下复原); (3)关系连线加粗后,打开主菜单“数据库/编辑关系”(或双击关系连线),进入“编辑关系”对话框; (4)选择“参照完整性”按钮,进入“参照完整性生成器”对话框。 也可直接在“数据库”菜单中选择“编辑参照完整性”,30,31,“更新规则”选项卡,当父表中的关键字值被修改时,应用以下规则: 级联:对父表中的主关键字段或候选关键字段的更改,会在相关的子表中反映出来。 限制:若子表中有相关记录,则禁止更改父表中的主关键字段或候选关键字段中的值,这样
16、在子表中就不会出现孤立的记录。 忽略:即使在子表中有相关的记录,仍允许更新父表中的记录。对父表中的主关键字段或候选关键字段的更改不会在相关的子表中反映出来。,32,“删除规则”选项卡,当父表中的记录被删除时,应用以下规则: 级联:如果为一个关系选择了“级联”,无论何时删除父表中的记录,相关子表中的记录自动删除。 限制:若子表中有相关的记录,则禁止删除父表中的记录,并产生“触发器失败”的错误提示。 忽略:即使在子表中有相关的记录,仍允许删除父表中的记录。,33,“插入规则”选项卡,指定在子表中插入新的记录,或者在子表中更新已存在的记录时所用的规则。 限制:禁止在子表中添加记录,这些记录在父表中没有相匹配的记录。如果为一个关系选择了“限制”,那么当父表中没有相匹配的记录时,则在子表中添加记录的尝试就会产生一个错误。 忽略:允许向子表中插入记录,而不管父表中是否有匹配的记录。,