3a494e6f0e8fe8b5076f42f6ecdf1c57.ppt
- Количество слайдов: 47
第 8章 表单高级设计 8. 1 多表单应用程序 n 应用程序界面 n n 单文档界面与多文档界面 顶层表单与子表单 非浮动表单和浮动表单 调用子表单:DO FORM命令 表单属性 Show. Window 属性值 功能 本表单作为顶层表单的子表单 2 本表单作为顶层表单显示在桌面上 . T. 子表单浮动 . F. Visible 本表单作为VFP主窗口的子表单 1 Desktop 0 子表单不浮动 . T. (默认) 表单是可见 . F. 表单不可见
[例8 -1] 为例7 -10设计的表单增加一个查页命令按钮, 要求单击它能 打开一个供用户输入记录号的窗口, 如图 8. 1所示。当指定记录号并单击 确定按钮后,新打开的窗口随即关闭,原表单也立即更新记录显示。 (1) 从例7 -10的表单文件SBXG. SCX复制出SBBD 1. SCX, 并将后者打开。 (2) 在SBBD 1. SCX的表单窗口Form 1中增加命令按钮Command 1。 (3) 创建表单文件SBBD 2. SCX, 并在其表单窗口Form 1中创建标签、文本框各1个。 (4) 属性设置:见表 8. 1。 图 8. 1 开出子窗口来指定记录
(5) 在Form 1(SBBD 1. SCX)的Init事件代码中增加公共变量jlh: Form 1(SBBD 1. SCX)的 Init事件代码中增加公共变量jlh: PUBLIC yh, mc(10, 1), jlh && 公共变量jlh用来表示记录号 COPY TO ARRAY mc FIELDS sb. 名称 && 保持原样 sb. GO 1 && 保持原样 (6) Form 1(SBBD 1. SCX)中Command 1的Click事件代码编写如下: Form 1(SBBD 1. SCX)中 Command 1的 Click事件代码编写如下: DO FORM sbbd 2 && 调用子表单 GO jlh && 记录指针指向在子表单中指定的记录 THISFORM. Refresh && 父表单更新 (7) Form 1(SBBD 2. SCX)中Command 1的Click事件代码编写如下: Form 1(SBBD 2. SCX)中 Command 1的 Click事件代码编写如下: jlh=THISFORM. Text 1. Value && 文本框值赋给公共变量(可事先在文本框中键入一个数) 文本框值赋给公共变量( 可事先在文本框中键入一个数) THISFORM. Release && 释放Form 1(SBBD 2. SCX) (8) Form 1(SBBD 1. SCX)的Unload事件代码编写如下: Form 1(SBBD 1. SCX)的 Unload事件代码编写如下: RELEASE jlh && 清除公共变量jlh, 程序运行结束公共变量不会自动清除 清除公共变量jlh, 表 8. 1 “查页”属性设置 表单 文件 对 象 属 性 属性值 说 SBBD 1. SCX Form 1 Show. Window 2 本表单 作为顶层 表单显 示在桌面上 Command 1 Caption 查页 Form 1 Caption 输入 Show. Window 1 Label 1 Caption 请输 入记录 号: Text 1 Value 1 Command 1 Caption 确定 SBBD 2. SCX 明 本表单 作为顶层 表单 的子表单 供键 入记录 号, 设 置初值 1
n表单集 n n n 使用表单集的优点 表单集的创建与删除 表单集的编辑 [例8 -3] 用表单集来实现查看设备大修情况。 (1) 从例7 -13产生的表单文件BG. SCX复制出BDJ. SCX, 并使后者打开, 表单设计器窗口中将会显示“SB表编辑 ”表单窗口。 (2) 为表单文件BDJ. SCX创建表单集:选定表单菜单的创建表单集命令。 (3) 向表单集添加表单:选定表单菜单的添加新表单命令, 表单设计器窗口中就会出现Form 2表单窗口。 (4) 在数据环境中添加DX表, 并将SB表与DX表按编号关联起来。 (5) 将数据环境中DX窗口的标题栏拖放到Form 2表单窗口, 该表单中就会产生一个关于大修的表格。 (6) 将Form 2表单的Caption属性值改为“大修情况”。 图 8. 3 查 看设备 大修情况
8. 2 用户定义属性与方法程序 n 用户定义属性 n 变量属性 n n n 作用域:对表单集中的所有表单都有效 n n 创建:打开表单设计器后, 选定表单菜单的新建属性 引用格式:THISFORMSET. 变量属性名 数组属性 多表单应用程序的有效参数 n n 用户在表单集中自定义的属性 n n 用PUBLIC设置的公共变量 父表单与子表单间的参数传递:DO FORM … WITH …TO命令 用户定义方法程序 n 创建:表单菜单中选定“新建方法程序”命令 n 过程代码的编辑 n 调用基本格式为:THISFORMSET. 方法程序名
8. 3 类 n 类的概念 n n n n 类的特征 n n 类(class)与对象(object) 基类(base class) 子类(subclass) 用户定义类(user-defined class) 容器类(container classes)和控件类(control classes) 类库(class library) 封装特征 子类特征 继承性特征 用户定义类 n 类的创建 将类添加到 具栏 n 类的编辑 n
[例8 -7] 创建一个带有确认功能的“退出按钮”类。 (1) 从Command. Button基类新建子类:选定文件菜单的新建命令 在新建对话框中选定“类”选项 按钮, 然后选定新建文件按钮 在如图 8. 7所示新建类对话框的类名文本框中键入类名:退出按钮;在“ 派生于”下拉列表框中选定基类Command. Button;在“存储于”文本框中键入类库的名字:用户控件 选定确定按钮关闭对话框。 (2) 在类设计器中为“退出按钮”类设置属性与事件: 新建类对话框关闭后, 随即会弹出一个类设 计器窗口(参阅图 8. 8)。类设计器窗口内显示一个“退出按钮” 窗口,这就是“退出按钮”类;“退出 按钮” 窗口中有一个“Command 1”按钮(在图 8. 8中Command 1已改作退出两个字),这是类的实例的模样。 在属性窗口中将“退出按钮” 类的Caption 属性由Command 1改为“退出”, 这将使按钮上显示“退出” 两个字(见图 8. 8)。 双击“退出按钮”窗口内部来打开代码窗口, 然后为Click事件键入如下代码: IF MESSAGEBOX("一定要退出吗? ", 4+48, "请确认")=6 && 信息框包含“是”和“否”按钮, 图标显示惊叹号, 按“是”按钮返回数值 6 THISFORM. Release CLEAR EVENTS && 停止处理事件(参阅10. 1节第三点) ENDIF (3) 关闭类设计器窗口。 图 8. 7 新建 类对话 框
图 8. 8 类设计 器
[例8 -8] 试将例8 -7创建的“退出按钮”类添加到表单控件 具栏中。 打开任一表单(参阅图 8. 10)——选定表单控件 具栏的查看类按钮——在弹 出菜单中选定添加命令——在如图 8. 9所示的打开对话框列表中选定可视类库文 件:用户控件. VCX——选定确定按钮关闭对话框, 表单控件 具栏中就会包含一 个“退出按钮”。 图 8. 9 选 定一个“可视类库 ”文件 图 8. 10 表单 控件 具栏 右端的按钮 就是退出按钮”类
第 9章 报表设计 9. 1 打印基础 n TO PRINTER 打印命令 n n n n LIST|DISPLAY STRUCTURE TO PRINTER LIST|DISPLAY MEMORY TO PRINTER 数组内容 LIST|DISPLAY STATUS TO PRINTER DIR TO PRINTER 的名字 TYPE <文件名. 扩展名> TO PRINTER 的内容 && 打印当前表的结构 && 打印当前表的内容 && 打印当前的变量和 && 打印VFP环境状态 && 打印当前目录中表 && 打印ASCII字符文件 定向输出命令 n n SET PRINTER ON | OFF SET PRINTER TO [<文件名. 扩展名> [ADDITIVE] | <打印端口>]
9. 2 报表设计器的基本操作 n 打开报表设计器窗口 MODIFY REPORT <报表文件名> n 快速制表 报表菜单中的快速报表命令 [例9 -3] 利用快速制表功能为SB. DBF设计一张包括编号、 名称和价格 3栏的报表。 (1) 打开报表设计器窗口:往命令窗口键入命令MODIFY REPORT SBJGB, 使屏 幕上出现报表设计器窗口(参阅图 9. 12)。 (2) 设置数据源:在报表设计器窗口击右键, 在快捷菜单中选定数据环境命 令, 在数据环境设计器窗口中添加SB表。 (3) 启动快速制表:选定报表设计器窗口, 然后在报表菜单中选定快速报表 命令, 使出现如图 9. 11所示的快速报表对话框。 (4) 设置快速报表属性:选定快速报表对话框的字段按钮, 在字段选择器对 话框(图略)中依次选出编号、名称和价格等3个字段, 选定确定按钮返回快速报表 对话框。选定确定按钮返回报表设计器窗口。 (5) 保存报表定义:选定文件菜单的保存选项, 将产生报表文件SBJGB. FRX及 其备注文件SBJGB. FRT。
图 9. 5 快速报 表对话 框 图 9. 6 设备 价格表“报 表设计 器”
n 页面预览 图 9. 7 预览 窗口与打印预览 具栏
n 命令方式打印报表 REPORT FORM <报表文件名> [ENVIRONMENT] [<范围>] [FOR <逻辑表达式>] [HEADING <字符表达式>] [NOCONSOLE] [PLAIN] [RANGE 开始页 [, 结束页]] [PREVIEW [[IN] WINDOW <窗口名> | IN SCREEN] [NOWAIT]] [TO PRINTER [PROMPT] | TO FILE <文件名> [ASCII]] [SUMMARY] n 菜单方式打印报表 “报表”菜单的“运行报表”命令
9. 3 报表设计器的高级操作 1. 页面设置 图 9. 9 页 面设 置对话 框
2. 设计报表带区 表 9. 1 报 表带 区的建立及作用 带 区名称 带 区产 生与删 除 控件打印周期 标题 报 表菜单 的标题 /总结 命令 整套报 表一次 最先, 可占一页 页标头 默认 存在 每页 一次 标题 后, 页 初 列标头 用文件菜单 的页 面设 置命令设 置列数 每列一次 页标头 后 组标头 报 表菜单 的数据分组 命令 每组 一次 页标头 、组标头 或组 注脚 后 细节 默认 存在 每记录 一次 页标头 或组标头 后 组 注脚 报 表菜单 的数据分组 命令 每组 一次 细节 后 列注脚 用文件菜单 的页 面设 置命令设 置列数 每列一次 页 注脚前 页 注脚 默认 存在 每页 一次 页末 总结 报 表菜单 的标题 /总结 命令 整套报 表一次 组 注脚后, 可占一页 控件打印位置
n 基本带区 [例9 -4] 在例9 -3所制报表的基础上, 设计如图 9. 11所示具有表格线的设备价格表。 图 9. 11 设备 价格表 图 9. 12 报 表表格线设计
n 标题与总结带区 n 数据分组与组标头/组注脚带区 n 报表菜单的数据分组命令 图 9. 13 标题 /总结对话 框 图 9. 14 数据分 组对话 框
n 由报表向导产生一个经过数据分组的报表 具菜单中向导选项的报表命令 [例9 -5] 打印如图 9. 15所示带费用总计的设备大修分类表。 图 9. 15 数据分组 后的分类情况 图 9. 16 向导 选 取对话 框
图 9. 17 报 表向导 (分组记录 )对话 框 图 9. 18 总结选项对话 框 图 9. 19 报 表向导产 生的报 表布局
n 创建报表控件 [例9 -6] 打印如图 9. 24所示设备大修费用表, 要求相同的设备编号仅输出第一个。 (1) 定义快速报表: 键入命令MODIFY REPORT DXFY来打开报表设计器窗口——在数据 环境中添加DX表→单击报表设计器窗口, 然后选定报表菜单的快速报表命令——选定快速报 表对话框的确定按钮, 使报表设计器窗口中出现编号、年月、费用等标签及字段控件。 (2) 增加总结带区: 选定报表菜单的标题/总结命令→在标题/总结对话框中选定总结 带区复选框。 (3) 调整带区高度及控件位置:将各带区调整至如图 9. 25所示的高度。 图 9. 24 设备 大修费 用表 图 9. 25 设备 大修 费 用表设计
(4) 在总结带区建立费用控件: 选定报表控件 具栏的域控件按钮——单击总结带区中 间,在报表表达式对话框(参阅图 9. 21)的表达式文本框内键入表达式费用——选定计算按 钮,在计算字段对话框中选定总和选项按钮(见图 9. 22)——选定确定按钮返回报表表达式 对话框→选定确定按钮返回报表设计器窗口, 费用控件就出现在总结带区之中。 (5) 修改编号字段区: 双击编号字段,在报表表达式对话框中选定打印条件按钮——在 打印条件对话框中选定“否”按钮(参阅图 9. 23), 使编号字段不打印重复的值——选定确定 按钮返回报表表达式对话框——选定确定按钮返回报表设计器窗口。 (6) 如图 9. 25所示画出表格线。 图 9. 21 报 表表达式对话 框
图 9. 22 计 算 字段对话 框 图 9. 23 打印条 件对话 框
n 报表变量 [例9 -7] 打印如图 9. 26所示的主要设备的设备役龄表, 要求包括记录序号和设备役龄, 部门 在打印时使用汉字部门名。 (1) 打开报表设计器窗口:键入命令MODIFY REPORT SBYL。 (2) 设置数据环境:在数据环境中添加SB表和BMDM表, 并使SB. 部门与BMDM. 代码关联( 从SB. 部门字段拖到BMDM. 代码索引)。 (3) 定义快速报表:选定报表设计器窗口, 然后选定报表菜单的快速报表命令→在快速报 表对话框中选定字段按钮→在字段选择器对话框的SB表中挑选编号、名称、部门 3个字段→ 选定确定按钮返回快速报表对话框→选定确定按钮, 使报表设计器窗口中出现编号、名称、 部门等标签及字段控件。 图 9. 26 设备 役龄 表 图 9. 27 设备 役龄 表报 表设计 器窗口
(4) 设置在SB表部门字段控件的位置上输出汉字部门名:双击部门字段控件→将报表 表达式对话框的表达式文本框中的SB. 部门改为BMDM. 名称→选定确定按钮返回报表设计器 窗口, 在该控件的位置上即能输出汉字部门名。 (5) 创建报表变量XH(用作序号): 选定报表菜单的变量命令→在如图 9. 28所示报表变 量对话框的变量列表中键入变量名XH→在“要存储值”文本框中键入表达式XH+1→选定确 定按钮关闭报表变量对话框。 (6) 创建XH变量控件: 选定报表控件 具栏的域控件按钮→单击细节带区左部→在报 表表达式对话框中选定表达式文本框右侧的对话按钮→在如图 9. 29所示表达式生成器对话 框的变量列表中双击报表变量XH→选定确定按钮返回报表表达式对话框→选定确定按钮返 回报表设计器窗口, XH变量控件便已产生。 图 9. 28 报 表变 量对话 框 图 9. 29 含有报 表变 量的表达式生成器
(7) 建立计算役龄的表达式控件: 选定报表控件 具栏的域控件按钮→单击细节带区右 部→在报表表达式对话框的表达式文本框内键入(DATE()-SB. 启用日期)/365→在格式文本 框内键入输入掩码99→选定确定按钮返回报表设计器窗口。 (8) 处理日期和页号:将页注脚带区的Date()控件、_PAGENO控件、“页”标签控件移 到页标头带区, 然后创建一个“第”标签控件。 (9) 画表格线和创建表名、序号、役龄等标签控件(步骤从略)。 (10) 打印:在命令窗口发命令REPORT FORM sbyl. frx FOR 主要设备, 打印结果如图 9. 26所示。
下篇——系统开发 10. 系统开发实例 (系统开发小结) 11. 关系数据库基本原理
“系统开发”篇包括第 10、11两章,依次讲述 “系统开发实例”和“关系数据库基本原理”。 n 第 10章结合“汽车修理管理系统”这一实例, 阐明了一个VFP 6. 0应用系统的整个开发与 发布过程,可供读者仿效与借鉴。 n 第 11章是“简明版”新增加的,目的是通过简 介关系数据库的初步原理,提高读者开发 DBAS的能力。 n
第 10章 系统开发实例 10. 1 开发VFP数据库应用系统的一般步骤 n 需求分析 n n n 数据库设计 n n n n n 应用程序的基本功能 用户界面设计 两类VFP应用程序及其 运行环境 VFP应用系统的主文件 n 图 10. 1 以处 理为 中心的 数据库应 用系统 开发 示意图 逻辑设计 物理设计 VFP创建数据库的优点 应用程序设计 n n 充分调研 写出需求规范说明书 运行环境初始化 控制事件循环 恢复先前的环境 软件测试 应用程序发布
10. 2 一个实例: “汽车修理管理系统”的开发 n 需求分析 n 开发目的: (1) 能对汽车修理有关的各类数据进行输入、修改与查询。 (2) 编制季度零件订货计划。 (3) 打印汽车修理发票和 资月报表。 n 数据需求 n n n 输入单据包括修车登记单、汽车修理单、零件入库单和零件出库单等4种 输出单据包括季度零件订货计划、汽车修理发票和 资月报表等3种。 功能需求 1. 数据登记 登记功能用于把各种手填单据中的数据及时登记到系统将要定义的表中, 还要求能进行修改。这些单据包 括修车登记单、汽车修理单、零件入库单和零件出库单。 2. 查询 能查询登记单、修理单、汽车、车主、修理 、零件库存的有关数据。 3. 编制并显示季度零件订货计划 编制零件订货计划需要找出要订货的零件, 订货条件为:零件库存量<最低库存量。 订货量可由用户输入或修改。 4. 打印发票 发票中除包含顾客、汽车及修理项目等数据外, 还要计算出修车费, 修车费包括修理费和零件费, 按下列各 式计算: 零件费= (零件价格×耗用数量) 修理费=小时 资×修理 时× 3 总计=零件费+修理费 5. 打印修理 资月报表 某修理 的月 资= 修理小时×小时 资。
n 数据库设计 逻辑设计 (1) 修理单: XLD(编号, 牌号, 号, 修理项目, 修理小时, 送修日期, 完 日期 ) (2) 汽车: QC(牌号, 型号, 生产厂, 车主名) (3) 车主: CZ(车主名, 地址, 电话) (4) 修理 : XLG( 号, 姓名, 地址, 电话, 出生日期, 进厂日期, 小时 资) (5) 零件用量: LJYL(编号, 零件号, 数量) (6) 零件库存: LJKC(零件号, 零件名, 成本, 价格, 库存量, 最低库存, 订货量) n 图 10. 9 表间关联的设计
n 物理设计 1. 修理单(C: QCXLXLD. DBF) xld(编号 c(4), 牌号 c(8), 修理项目 c(12), 送修日期 d, 完 日期 d, 号 c(4) 普通索引, 修理小时 n(4. 1)) 2.汽车(C: QCXLQC. DBF) qc(牌号 c(8) 普通索引, 型号 c(6), 生产厂 c(20), 车主名 c(8)) 3.车主(C: QCXLCZ. DBF) cz(车主名 c(8) 普通索引, 地址 c(16), 电话 c(7)) 4. 修理 (C: QCXLXLG. DBF) xlg ( 号 c(4) 普通索引, 姓名 c(8), 地址 c(16), 电话 c(7), 出生日期 d, 进厂日期 d, 小时 资 n(5. 2)) 5. 零件用量(C: QCXLLJYL. DBF) ljyl(编号 c(4) 普通索引, 零件号 c(6), 数量 n(2)) 6. 零件库存(C: QCXLLJKC. DBF) ljkc(零件号 c(6) 普通索引, 零件名 c(10), 成本 n(8. 2), 价格 n(8. 2), 库存量 n(3), 最低库存 n(3), 订货 量 n(3)) 7. 零件入库表为LJRK. DBF, 其结构与LJKC. DBF相同 8. 零件出库表(C: QCXLLJCK. DBF) ljck(零件号 c(6), 数量 n(2))
n 应用程序设计 总体设计 n 初始用户界面设计 n 模块设计与编码 1.主文件(QCXL. PRG) n SET TALK OFF SET DEFA TO c: qcxl && 设置文件默认路径, 本例所有文件都应装在该目录中 CLEA ALL SET VIEW TO sjhj. vue && 统一设置数据环境, 自动关闭所有的 作区后打开视图文件 PUBLIC xldh, zljf && xldh用于存储输入的修理单号; zljf存储总零件费, 打印发票时用 xldh=SPACE(4) DO FORM fm && 显示封面(参阅例7 -1, 并事先将fm表单复制到C: qcxl) KEYB '{CTRL+F 4}' && 关闭Command窗口 MODI WIND SCREEN TITL '汽 车 修 理 管 理 系 统' && 打开VFP主窗口并设置窗口标题 CLEA * 以上为初始化环境代码 DO qcxlcd. mpr && 菜单文件名定为QCXLCD(汽车修理菜单) READ EVENT && 建立事件循环 QUIT && 退出VFP 图 10. 10 总 体结 构图 图 10. 11 汽车 修理管理系统 的菜单
图 10. 12 汽车 修理管理系统 的数据环 境 2. 菜单程序(QCXLCD. MPR) 往命令窗口键入命令MODI MENU QCXLCD, 就会出现菜单设计窗口, 此时可按图 10. 11建立 菜单。 (1) “退出”菜单项的命令 CLEAR EVENTS && 停止事件循环, 转去执行READ EVENT后的命令 (2) 按图 10. 11设置调用各表单的命令, 例如对“修车登记”菜单项可键入命令DO FORM xcdj。 (3) 从菜单文件QCXLCD. MNX生成菜单程序QCXLCD. MPR。
3. “修车登记”表单(XCDJ. SCX) 图 10. 13 “修车 登记 ”表单 窗口 4.“输入修理单号”表 单 (SRXLDH. SCX) 图 10. 14 “输 入修理单 号”表单 窗口
5. “汽车修理”表单(QCXL. SCX) 6. “零件订货计划”表单(LJDH. SCX) 图 10. 15 “汽车 修理”表单 窗口 图 10. 16 “零件订货计 划”表单 窗口
7. “打印发票”表单(DYFP. SCX) 8. “发票”报表(FP. FRX) 图 10. 17 “打印发 票”表单 窗口 图 10. 18 “发 票” 报 表设计 器
n运行设计 n n 装载数据 设置应用系统程序项 (1) 进入Windows 98(或Windows 95); (2) 选定“开始”菜单中“设置”选项的“任务栏”命令——选定任务栏 属性对话框的开始菜单程序选项卡——选定添加按钮——在创建快捷方 式对话框中的命令行文本框中键入:c: vfp 6. exe c: qcxl –t ——选定下一步按钮——认同缺省文件夹programs, 选定下一步按钮—— 在为程序选定标题对话框中键入:汽车修理管理系统——选定完成按钮 返回任务栏属性对话框——选定确定按钮, “汽车修理管理系统”程序项 已建立在“开始”菜单的“程序”子菜单中。
10. 3 应用程序的管理与发布 n 应用程序管理 n 项目的建立 在命令窗口键入命令MODIFY PROJECT QCXLGL n n n 项目管理器中的主文件 连编 文件的包含与排除 图 10. 20 连编选项对话 框 图 10. 19 Qcxlgl项 目管理器窗口
n 应用程序发布 n 发布准备 n n n 在项目管理器中生成一个. exe可执行程序 创建发布树(目录) 创建发布磁盘 n 磁盘映象由安装向导生成在硬盘的磁盘映象目录中, 选定 具菜单的向导选项 的安装命令。 图 10. 21 安装向导对话 框
系统开发小结 开发应用系统的一般步骤 通常要经历下述 5 步,即 需求分析→数据库设计→应用程序设计→ 软件测试→应用程序发布 n 在VFP应用系统开发中,用户应 ⑴ 尽可能在项目管理器的管理下开发; ⑵ 充分利用VFP提供的各种设计器与生成器; ⑶ 在开发完成后建立安装磁盘或安装程序,实现应 用程序的商品化。 n
数据库设计 n n n 在应用系统的开发中,数据库设计通常是一 项独立的开发活动,而且总是安排在应用程序设 计之前完成。 数据库中的数据主要来源于手 操作时的输入数 据。但并非简单地把一张输入单据换成一个表; 数据模式的设计应该遵循 “关系规范化”的理论; VFP将表区分为数据表与自由表。在实际应用系 统中的表一般应定义为数据表,以便充分利用数 据词典的作用。
应用程序设计 VFP的应用程序设计要同时用到面向对 象程序设计与结构化程序设计两种方法, 体现了两类程序设计方法的结合 n 应用程序的总体设计可以使用结构化程序 设计中由顶向下按功能分类的方法 n 应用程序的模块设计可充分利用VFP提供的 可视化设计 具 ,通常以表单设计作为重点。
第 11章 关系数据库基本原理 11. 1 关系模型的基本概念 n 关系的数学定义 域(domain) NAME ={张三,李四,王二} SEX ={男,女} AGE ={17,18,19} 笛卡尔乘积(Cartesian product) n 笛卡尔乘积(Cartesian product) D 1×D 2×…×Dn={(d 1,d 2,…,dn) | di∈Di,i= 1,2,…,n} n 关系(relation) 在域D 1,D 2,…Dn上的关系是D 1×D 2×…×Dn的一个子集,可记 为R(D 1,D 2,…Dn)。其中R为关系名,n称为关系的度( degree)。 n 表文件与关系的对应 关系表现为表文件,元组相当于记录,属性相当于字段。 n
n 关系的性质 (1)在同一个关系中,任意两个元组(两行)不能完全相同。 (2)在关系中,元组(行)的次序是不重要的,可以任意交换。 (3)在关系中,属性(列)的次序也是不重要的,可以任意交换。 (4)在关系中,同一列中的分量必须来自同一个域,是同类型的数据。 (5)在关系中,属性必须有不同的名称,但不同的属性可以出自相同的域, 即它们的分量可以取值于同一个域。 (6)在关系中,每一分量必须是原子的(atomic),即不可再分的数据项。 n 关系数据库的描述 n 域的描述 在大多数情况下,域名和关系的属性名是一致的。但是在有些关系中,多 个属性可能取值于相同的域。 n 关系的描述 关系由“关系框架”(对应于表文件的结构)和若干元组(对应于数据记录) 组成。所谓关系的描述,其实就是对关系框架的描述。 【例11 -1】 定义SB关系。可以描述为: RELATION SB(编号,名称,启用日期,价格,部门,主要设备,备注,商标) KEY=编号
11. 2 关系数据操作 n 关系代数运算 n 传统的集合运算 R (a)并运算 n S R S b)交运算 (c)差运算 图 11. 1 用文氏图表示集合运算 专门的关系运算 选择 用于在关系的水平方向,选择符合给定条件的元组。 SELECT * FROM SB WHERE价格>10000. 00 投影 用于在关系的垂直方向找出含有给定属性全部值的子集。 PROJECT DX ON 年月,费用 连接 用于按给定的条件将两个关系中的所有元组用一切可能的组合方式拼 接为一个新的关系。 JOIN <关系 1> AND <关系 2> WHERE <条件>
n 关系完备性 (1)如果某一关系数据语言相对于关系代数语言所要求的各种运算都 有等价的成分,则可以认为该语言是关系上完备的; (2)直接支持选择、投影和连接 3种运算,是对任何关系数据语言的 最低要求。 n n 等价成分或直接支持,是指只需使用—条命令或函数,就可方便地实现 一种运算的功能 Visual Fox. Pro支持选择、投影、连接运算 ,对并、交、差等传统集合运 算不完全支持 ,缺乏直接支持除法运算的命令 。
3a494e6f0e8fe8b5076f42f6ecdf1c57.ppt