数据库基础与应用 授课人:张志新 [email protected] 第一章数据库系统概述 学习目标 了解数据处理技术的各个阶段的不同特点; 了解和掌握实体、联系、属性、码等概念的含义, 以及ER图的应用; 了解数据库设计中的各种逻辑结构模型和特点, 特别是关系数据模型的特点; 了解数据库系统的构成,数据库用户的分类,数 据库体系结构,存取数据库中数据的大致工程等 内容。 1.1数据处理技术发展经历 基本概念: 数据:是人们描述客观事务及其活动的抽象符号 表示。是人们互相之间进行思想文化交流的工 具。 是数据库系统研究和处理的对象。通常指用符号 记录下来的、可以识别的信息。 数据可以是声音、文字、图形、绘画、图像等。 基本概念: 数据处理:是对数据进行加工的过程,对数 据进行的查找、统计、分类、修改、变换 等运算都属于加工。 数据处理是指从某些已知的数据出发,推导 加工出一些新的数据,这些新的数据又表 示了新的信息。 数据处理手段的发展: 人工管理 文件管理 数据库管理 分布式数据库管理 1.1.1人工管理阶段 人工管理阶段的数据管理有下列特点: ① 数据不保存在计算机内。 ② 没有专用的软件对数据进行管理。 ③ 只有程序(program)的概念,没有文件 (file)的概念。数据的组织方式必须由程 序员自行设计与安排。 ④ 数据面向程序。即一组数据对应一个程序。 1.1.2文件管理阶段 文件系统阶段的数据管理有以下特点: ① 数据以“文件”形式可长期保存在外部存储器的磁盘上。 ② 数据的逻辑结构与物理结构有了区别,但比较简单。 ③ 文件组织已多样化。有索引文件、链接文件和直接存取文 件等。 ④ 数据不再属于某个特定的程序,可以重复使用,即数据面 向应用。 ⑤ 对数据的操作以记录为单位。 随着数据管理规模的扩大,数据量急剧增加,文件系统显露 出三个缺陷: ① 数据冗余(redundancy) ② 数据不一致(inconsistency) ③ 数据联系弱(poor data relationship) 1.1.3数据库管理阶段 数据库阶段的数据管理具有以下特点: ① 采用数据模型表示复杂的数据结构。 ② 数据共享。 ③ 有较高的数据独立性。 ④ 增加了系统的灵活性,数据粒度缩小。 ⑤ 数据库系统为用户提供了方便的用户接口。 ⑥ 数据库管理系统提供以下四方面的数据控制功能: 数据安全性,数据的一致性,数据库的并发控制 和数据库的恢复。 1.1.4分布式数据库管理阶段 分布式数据库系统主要有以下特点 • 数据库的数据物理上分布在各个场地,但逻辑 上是一个整体。 • 每个场地既可以执行局部应用(访问本地DB), 也可以执行全局应用(访问异地DB)。 • 各地的计算机由数据通信网络相联系。本地计 算机单独不能胜任的处理任务,可以通过通信 网络取得其它DB和计算机的支持。 1.2概念数据模型 概念数据模型: 是人们对现实世界的认识和抽象,不考虑在计算 机上的具体实现,也可以说与计算机的具体实现 无关,而只考虑数据本身的结构和相互之间的自 然联系。 表示概念数据模型最常用的工具:实体联系(Entity Relationship)模型,简称ER模型。由于是以图形方 式表现,又称为实体联系图,简称ER图。 1.2.1 ER模型的有关概念 1、实体:是现实世界中存在的可以相互区别的事 务或活动的抽象(数据描述)。通常,直接称事 务或活动为实体。例如:一本书。 实体集:是指同一个实体的集合。例如:一个 班级的学生。 实体型:是对同类实体的共有特征的抽象定义。 例如:人的共有特征为姓名、年龄、籍贯、职业、 学历等由此可以定义‘人’这个实体型。 实体值:就是符合实体型定义的每个具体实体。 例如:由上面实体型定义{张三、35、江苏、教 师、研究生} 实体、实体集、实体型、实体值在以后的叙述 中均用‘实体’一词代替。 2、联系:是实体之间的相互联系,它通常表 示一种活动。例如:在一张订单中涉及商 品、顾客和销售员之间的关系,即某个客 户从某个销售员手里订购某件商品。 联系集:是同一类联系的集合。例如:一 次展销会上的全部订单。 联系型:是对同类联系的共有特征的抽象 定义。 联系、联系集、联系型在本课程中也将由 ‘联系’一词代替。 3、属性:是描述实体或联系中的一种特征, 一个实体或联系通常具有多个特征,需要 多个相应属性来描述。例如:描述‘人’ 需要使用姓名、年龄、籍贯、职业、学历、 住址、电话等属性。 码:或称键是实体间互相区别的一种唯一 标识。例如:人的身份证号码。主属性与 非主属性 域:是实体中相应属性的取值范围。例如: 性别E{男,女} 4、联系分类:是讨论两实体型之间的联系情况。 按照一个实体型中的实体个数与另一个实体型中 的实体个数的对应关系,可分类为:1对1联系、1 对多联系、多对多联系。 (1) 1对1联系 若一个实体型中的一个实体至多与另一个实体型 中的一个实体发生关系,同时另一个实体型中的 一个实体至多与该实体型中的一个实体发生关系, 则这两个实体型之间的联系被定义为1对1联系, 简记为1:1。 例如:一个学生与其学生证号码。 (2)1对多联系 若一个实体型中的一个实体与另一个实体型中的任 意多个实体(含0个)发生关系,而另一个实体型 中的一个实体至多与该实体型中的一个实体发生 关系,则这两个实体型之间的联系被定义为1对多 联系,简记为1:n。例如:一个班级对多个学生。 (3)多对多联系 若一个实体型中的一个实体与另一个实体型中的 任意多个实体(含0个)发生关系,而另一个实体 与该实体型中的任意多个实体(含0个)发生关系, 则这两个实体型之间的联系被定义为多对多联系, 简记为m:n。例如:一个学生选修多门课程;一 门课程被多个学生选修。 1.2.2 ER模型 ER模型是人们描述数据及其联系的概念数 据模型,是数据库应用系统设计人员和普 通非计算机专业用户进行数据建模和沟通 与交流的有力工具。特点:直观易懂、简 单易行。 进行数据库应用系统设计时,首先要根据 用户需要建立合理的ER模型,然后再建立 与计算机管理系统相匹配的逻辑数据模型 和物理数据模型,最后才能在计算机系统 上安装、调试和运行数据库。 1、ER模型中的基本构件 矩形--实体,框内标注实体名 菱形--联系,框内标注联系名 椭圆型--属性,框内标注属性名 连线表示实体、联系与属性之间的所属关 系或实体与联系之间的相连关系。 2、各种联系的ER图表示 1对1 实体1 1 联系 1 实体2 1对n 实体1 1 联系 n 实体2 m对n 实体1 m 联系 3、使用ER模型举例 book page16 n 实体2 1.3逻辑数据模型 数据库的逻辑数据模型又称为结构数据模 型,或直接简称为数据模型,相继出现: 层次、网状、关系和对象四种数据模型。 1.3.1层次数据模型 层次数据模型是最早出现和使用的数据模型,层 次模型是一个树型结构模型,整个树有且只有一 个根结点;其余结点都是它的孩子或子孙;每个 结点只有1个双亲结点,但可以有0~n个孩子结点, 没有孩子的结点被称为叶子结点。每个结点对应 一个记录型,即概念模型中的一个实体型。 层次模型有两个缺点:一是只能表示1:N联系,虽 然系统有多种辅助手段实现M:N联系但较复杂, 用户不易掌握;二是由于层次顺序的严格和复杂, 引起数据的查询和更新操作很复杂,因此应用程 序的编写也比较复杂。 1.3.2网状数据模型 网状数据模型是一个图结构模型,是对层次 模型的扩展。允许有多个结点无双亲,允 许每个结点无双亲。层次模型是网状模型 的一个特例。 网状模型的特点是记录之间联系通过指针实 现,M:N联系也容易实现(一个M:N联系可 拆成两个1:N联系),查询效率较高。 网状模型的缺点是数据结构复杂和编程复杂。 1.3.3关系数据模型 关系数据模型是数据库产品的主导数据模型。它是 建立在集合论、数理逻辑、关系理论等数学理论 基础之上。关系数据模型结构简单,符合人的思 维逻辑。 关系模型是一种简单的二维表格结构,概念模型 中的每个实体和实体之间的联系都可以直接转化 为二维表格形式。每个二维表称为一个关系。表 头称为关系的型;表体称为关系的值;每一行数 据称为一个元组;每一列数据称为属性,列标题 称为属性名。 采用关系模型建立数据库具有的特点: 1、数据结构单一 二维表,符合人的习惯,也便于计算机实现。 2、采用集合运算 操作对象是关系,结果依然是关系,对关系的操 作可以一次一集合。 3、数据完全独立 用户对数据库的查询和更新,只要知道数据的逻辑 表示以及数据间的逻辑结构,就可以直接操作数 据库中的数据。 4、数学理论支持 关系模型具有严格的数学定义,具有成熟的数学 理论依据。 1.3.4对象数据模型 对象数据模型是数据库技术与面向对象程序设计 的方法相结合的成果。主要适用于一些特殊领域, 处理对象不仅是数值、文本还包括图形、图像、 声音等多媒体数据信息。面向对象数据模型表达 信息的基本单位为对象。 面向对象模型中也有型和值的区别。对象型(类) 是对具有共同特征的事务的抽象定义。对象值是 对象型中的一个具体事务。 面向对象模型区别于传统数据模型的本质特征在 于对象具有封装性、继承性和多态性。 1.4数据库系统简介 1.4.1数据库系统构成 数据库系统是安装了数据库和数据库管理系统的 计算机系统。 数据库管理系统在计算机操作系统的支持下对保 存在外部存储器上的数据库进行有效的管理、维 护和使用。在数据库管理系统之上通常需要数据 库应用系统开发工具软件,应用程序系统。数据 库应用系统通常提供可视化操作界面共终端用户 使用。 1.4.2数据库系统用户 数据库系统用户通常包括四种: 数据库管理员DBA:负责数据库系统的建立、管理、 运行、维护、监控等系统工作,以及用户登记、 存取数据权限分配等服务性工作。 数据库设计员:根据用户的需求,负责建立相应的 数据库。 应用程序员:负责相关数据库的程序开发。 终端用户:使用数据库的群体,是建立数据库为之 服务的对象。 1.4.3数据库体系结构 三级模式结构和两级存储结构 概念模式是数据库中全部数据的整体逻辑结构的描 述。 外模式是用户与数据库系统的接口,是用户用到的 那部分数据的描述。 内模式是数据库在物理存储方面的描述,定义所有 内部记录类型、索引和文件的组织方式,以及数 据控制方面的细节。 模式/内模式映象存在于概念级和内部级之间,用 于定义概念模式和内模式之间的对应性。 外模式/模式映象存在于外部级和概念级之间,用 于定义外模式和概念模式之间的对应性。 数据库系统的三级模式和两级映像确保了 数据的逻辑独立性和物理独立性。 数据的逻辑独立性是当数据库的整体逻辑 结构发生变化时,通过调整外模式和模式 之间的映像使得外模式中的局部数据及其 结构(外模式定义)不变,从而使外模式 上的应用程序也不用修改。 数据的物理独立性是当数据库的存储结构 (内模式定义)发生变化时,通过调整模 式和内模式之间的映像,仍然能够保持数 据库的整体模式不变,当然其所有的外模 式及应用程序都不变。 1.4.4 DBMS的主要功能 1、数据的定义和操纵 DBMS提供数据定义语言DDL和数据操纵语言DML及其相应的编 译或解释程序,使用户能够进行数据库系统的各级模式定义, 并能够对数据库进行查询、插入、删除、修改等操纵数据库的 操作。 2、数据库管理控制 DBMS提供一组数据库管理控制程序,用以控制数据库系统的 正常运行。 3、数据库辅助服务 DBMS提供一组数据库服务程序,完成诸如数据库初始创建、 数据库转存、数据库恢复等辅助服务。 4、提供使用数据库工具 DBMS提供一组高效、简单方便的使用数据库的工具,帮助用 户按照提示内容操作完成各种相应的任务。 5、建立和维护数据字典 数据库系统的三级模式定义都被DBMS保存到数据字典。DBMS 的每一步操作都得到数据字典的检查和验证,以确保数据库操 作的合法、安全、有效。 1.4.5使用数据库系统存取数据过程 Book page29 1.4.6关系数据库系统简介 Book page30 第二章 关系运算 学习目标 了解和掌握关系数据结构中涉及到的域、 笛卡尔积、关系、关系模式等有关内容的 含义。 掌握关系的实体完整性和参照完整性的定 义。 掌握关系代数中的并、交、差、笛卡尔积 运算,以及选择、投影和连接运算。 2.1关系数据结构 关系数据结构非常单一,它就是一张具有行列结 构的二维表。 1、域:是具有相同特性的数据集合。 例如:{东、南、西、北} 2、笛卡尔积:是定义在一组域上的集合。 例如:一组域D1、D2…Dn,笛卡尔积表 示为D1xD2x…Dn 笛卡尔积的每个元素由下式求出: D1xD2x…Dn=|(d1,d2…dn)| di E Di,1<=i<=n,n>=1 3、关系:是笛卡尔积的一个子集,若笛卡尔积具有 n个域,则该笛卡尔积上的关系被称为n元关系。 一个n元关系具有下面六个性质: (1)关系中每列的数据属于同一个域,每一列称 为一个属性,列名称为属性名,每一列的值称为 属性值,同一关系中的所有属性名必须是可区分 的。 (2)不同列允许对应同一个域,此时列名不宜直 接采用域名,当一个列对应一个域时,既可以直 接采用域名,也可以重新命名。 (3)一个关系中属性的次序在理论上可以任 意。 (4)一个关系中的任意两个元组不允许完全 相同。 (5)一个关系中的元组的次序可以任意。 (6)一个元组中的每个属性值都必须是单值, 不可再分。 4、关系模式:是一个关系的型,即一个关系 的具体结构,通常被形式化定义为: R(U, D, DOM, F, I) R为关系名; U为该关系中的所有属性名集合; D为该关系的所有定义域的集合; DOM为属性向域映射的集合,给出属性和域之 间的对应关系; F为该关系中各属性之间的数据依赖的集合; 属性间的数据依赖的分析主要是找出关系的主码 属性。 I为该关系中所定义的完整性规则的集合。 关系的完整性规则的建立是为了保证数据 库数据的正确性和一致性。 一个关系模式可以简化为R(A1、A2、...An) R为关系名;A1、A2、...An为各属性名; 主码属性下用下划线标记。 一个关系可以只有模式而没有值(空关 系),但不能没有模式只有值。 5、码:又称为键 (1)超键:关系中能唯一标识每个元组属性或属性 组。 (2)候选码:关系中能唯一标识每个元组的最少属 性或属性组。 (3)主码:从候选码中选择一个作为该关系的主码, 数据库系统将按主码标识和排序每个元组。 (4)备用码:除了主码之外的所有候选码。 (5)外码:在关系R1中的属性或属性组在关系R2 中作为主码。 (6)主属性和非主属性:包含在任何候选码中的属 性称为主属性,其他属性称为非主属性。 2.2关系完整性 关系完整性就是关系模型中的数据的正确性、 一致性和有效性。 1、实体完整性 在一个关系中,主码是对象的唯一标识, 若主码为空,则表明该对象无法表示,主 码绝对不能为空值。 实体完整性规则:关系的主码不能取空值。 2、参照完整性 在一个关系模型中,关系R1的外码对应关系 R2的主码,外码与主码不仅要定义在同一 个域上,而且外码的取值不能超出主码的 取值,否则将为非法数据。 参照完整性规则:在两个参照和被参照关系 中,参照关系中每个元组的外码或者为空, 或者等于被参照关系中的某个元素的主码。 3、用户定义完整性 当用关系模型来描述对象时,关系中的每 个属性除了用定义域或对应的数据类型进 行取值约束外,有时还需要定义一些附加 条件。 用户定义完整性规则包括对每个关系每个属 性的取值限制的具体定义,它和其它两个 完整性规则都被记录在DBMS的数据字典中。 2.3关系运算 关系是元组的集合,因此关系比一般的集 合运算复杂,对关系运算不仅可以采用传 统的集合运算,还可以采用专门的运算。 2.3.1传统的集合运算 传统的集合运算包括并(∪)、 交(∩)、差(-) 和笛卡尔积(ⅹ)。 设一个元组变量t t属于关系R:t∈R; t不属于关系R:t∈R; 假定关系R中一个属性A,则t.A表示属性A在元组t 中的值; 六个比较运算符(θ运算符): 大于(>)、小于(<)、大于等于(>=)、 小于等于(<=)、等于(=)、不等于(<>) 逻辑表达式由与∧、或∨、非-连接比较运算符构 成 1、并运算 设两个关系R和S具有完全相同的结构,则R和S并 仍是一个关系,结构与R和S相同,值是R和S的所 有元组组成的集合。(R和S的共同元组,则结果 只出现一个) R∪S={t|t∈R∨t∈S} (满足交换率R∪S=S∪R) 2、交运算 设两个关系R和S具有完全相同的结构,则R和S交 仍是一个关系,结构与R和S相同,值是R和S共同 具有的元组组成的集合。 R∩S={t|t∈R∧t∈S} (满足交换率R∩S=S∩R) 3、差运算 设两个关系R和S具有完全相同的结构,则R和S差 仍是一个关系,结构与R和S相同,值是从R中去 掉S中同时出现的元组后,有R中剩余的元组组成 的集合。 R-S={t|t∈R∧t∈S} 4、笛卡尔积 设一个具有n个属性的关系R和另一个具有m个属 性的关系S,则R和S的笛卡尔积仍是一个关系, 结构是R和S的结构之连接,即前n个属性来自R, 后m个属性来自S,属性个数为n+m,值是R中每 个元素连接S中每个元素构成的元组集合。 RⅹS={tRtS|tR∈R∧tS∈S} 2.3.2专门的关系运算 专门的关系运算包括选择(σ)、投影( π )、连接(⋈) 和除(÷)。 1、选择运算(select) 单目运算,它从一个关系R中选择满足条件的所有元组, 同R具有相同的结构。选择运算提供横向划分关系的手段。 设F(t)为元组逻辑表达式 σF(R)={ t | t∈R ∧ F(t)= true } 2、投影运算(project) 单目运算,它从一个关系R中按所需顺序选择若干个属性 构成新关系,新关系的元组数小于等于原关系的元组数。 选择运算提供纵向划分关系的手段。 πA(R)≡{ t.A|t∈R } 3、连接运算(join) 双目运算,把两个关系R和S按相应的属性值的比 较条件连接起来,它是R和S的笛卡尔积的一个子 集。比较条件就是比较运算表达式,相应的连接 就称为该运算符连接。 4、除法(division) 设关系R和S的元数分别为r和s(设r>s>0),那么 R÷S是一个(r-s)元的元组的集合。(R÷S)是 满足下列条件的最大关系:其中每个元组t与S中 每个元组u组成的新元组<t,u>必在关系R中。 2.3.3综合运算举例 Book Page 47 第三章 关系规范化基础 学习目的: 会根据一个关系的定义,分析出属性间的 各种函数依赖,并能够得出相应的最小函 数依赖集。 掌握关系的第一、第二、第三以及BC范式 的定义,会根据一个关系的最小函数依赖 集确定它的规范化级别。 会对一个具体关系进行规范化,使之达到 所要求的规范化级别。 3.1数据依赖 每一种类型的数据和数据之间的联系,在 关系数据库系统中都是利用相应的关系来 描述的。这样事务之间以及事务内部的各 特征之间的相互依赖和相互制约关系就自 然反映到关系数据库中的各个关系之间和 关系内部的各属性之间。因为关系是由属 性构成的,所以数据依赖的基础是属性之 间的数据依赖。 数据依赖包括函数依赖和多值依赖,本课 只讨论函数依赖。 定义1: 设一个关系为R(U),X和Y为属性集U上 的子集,若对于元组中X上的每个值都有Y 上的一个唯一值与之对应,则称X和Y具有 函数依赖关系,并称X函数决定Y,或称Y函 数依赖于X,记作X->Y,称X为决定因素。 例如:身份证号码->姓名 定义2: 设一个关系为R(U),X和Y为属性集U上 的子集,若X->Y且Y不属于X,则称X->Y 为 非平凡函数依赖,否则若Y属于X则必有X>Y ,称此X->Y 为平凡函数依赖。 例如:身份证号->姓名 非平凡函数依赖 {身份证号、性别}->性别 平凡函数依赖 定义3: 设一个关系为R(U),X和Y为属性集U上的 子集,若X->Y,同时X的一个真子集X’也能 够函数决定Y,即X’ ->Y,则称X部分函数决 定Y,或Y部分函数依赖于X,记作XP>Y,否 则若不存在一个真子集X’,使得X’也能够函 数决定Y,则称X完全函数决定Y,或Y完全函 数依赖于X,记作XF>Y。 X->Y的部分函数依 赖也称为局部函数依赖。 例如:book page 53 定义4: 设一个关系为R(U),X、Y和Z为属性集U 上的子集,其中X->Y、 Y->Z,但Y十> X,Z 不属于Y,则存在X->Z,称为传递函数依赖, 即X传递函数决定Z,Z传递函数依赖于X。 必须强调Y十> X,否则X->Z则称为直接函数 依赖,而非传递函数依赖。同理必须强调Z不 属于Y。 例如:学号->系号;系号->系主任; 则学号->系主任 定义5: 设一个关系为R(U),X、Y和Z为属性集 U上的子集,若X->Y,则存在XZ->YZ和 XZ->Y。(增广性规则) 例如:职工号->职务 则(职工号、性别)->(职务、性别) 定义6: 设一个关系为R(U),X和Y为属性集U上 的子集,若X->Y,并且为完全非平凡函数 依赖,同时Y为单属性,则称X->Y为R的 最小函数依赖。由R中所有最小函数依赖 构成R的最小函数依赖集,其中不含有冗 余的传递函数依赖。 例如: book page 54 例3-4、3-5 定义7: 设一个关系为R(U),X为U的子集,若X 能够函数决定U中的每个属性,并且X的任 何真子集都不能函数决定U中的每个属性, 则称X为关系R的一个候选码。 例如:book page 55 例3-7 分析一个关系的函数依赖,完全是根据关 系模式的语义进行,绝不能根据一个关系 的某个实例来判定。例如属性在元组上是 否可以为空或重复,由语义决定而非实例。 函数依赖的一些常用规则: (1)自反性 (2)增广性 (3)传递性 (4)合并性 (5)分解性 (6)伪传递性 (7)复合性 (8)自增性 3.2关系规范化 在关系数据库中的每个关系都需要进行规 范化,使之达到一定的规范化程度,从而 提高数据的结构化程度、共享性、一致性 和可操作性。 关系规范化分为六个级别,从低到高: 第一范式、第二范式、第三范式、BC范式、 第四范式、第五范式 通常只要求规范到第三范式,再向后有可能 破坏数据的无损连接性和函数依赖性。 3.2.1第一范式 定义8: 设一个关系为R(U),若U中的每个属性都 是不可再分的,或者都是不被其他属性所 包含的独立属性,则称关系R(U)符合第 一范式(1NF)。 关系数据库中的每个关系都必须达到第一 范式(最低要求),否则称为非规范化的 关系。若一个关系数据库中的所有关系都 达到第一范式要求,则称为第一范式数据 库。 3.2.2第二范式 定义9: 设一个关系为R(U),它满足第一范式,若R中不 存在非主属性对候选码的部分函数依赖,则称关 系符合第二范式(2NF)。 一个关系只满足第一范式,那可能会带来数据冗 余和操作异常。操作异常具体包括插入异常、删 除异常和修改异常。操作异常又常常称为更新异 常或存储异常。 若一个关系的所有候选码都是单属性,满足第一 范式也就满足第二范式。 1、修改异常。譬如教师教三门课程,在关系中就会 有三个元组。如果他的地址变了,这三个元组 中的地址都要改变。若有一个元组中的地址未 更改,就会造成这个教师的地址不惟一,产生 不一致现象。 2、插入异常。如果一个教师刚调来,尚未分派教学 任务,那么要将教师的姓名和地址存储到关系 中去时,在属性课程和课程号上就没有值(空 值)。在数据库技术中空值的语义是非常复杂 的,对带空值元组的检索和操作也十分麻烦。 3、删除异常。如果要取消教师的教学任务,那么就 要把这个教师的元组删去,同时也把教师的地 址信息从表中删去了。这是一种不合适的现象。 3.2.3第三范式 设一个关系为R(U),它满足第一范式, 若R中不存在非主属性对候选码的传递函数 依赖,则称关系符合第三范式(3NF)。 若关系R中不存在非主属性对候选码的传递 函数依赖,也就不包括部分函数依赖。因 此若达到第三范式也就包括达到第二范式。 若关系只满足第二范式,而不满足第三范 式,则仍然存在由传递依赖带来的数据冗 余和操作异常问题。 3.2.4 BC范式 定义11: 设一个关系为R(U),它满足第一范式,若R中不 存在任何属性对候选码的传递函数依赖,则称关 系符合BC范式(BCNF)。 等价描述:若R中的所有属性都完全直接依赖于候 选码,或者说R的最小函数集中的的所有函数依赖 的决定因素都是候选码,则R符合BCNF。 BCNF要求去除第三范式中因主属性存在部分依 赖或传递依赖而带来的数据冗余和操作异常。 若一个第三范式关系的都只存在单个候选码,满 足第三范式也就满足BC范式。 小结: 关系规范化的过程就是合理分解关系的过程,就是 概念单一化的过程,就是把不适当的属性依赖转 化为关系联系的过程。在建立和设计数据库时, 要切记概念单一化的原则,即用一个关系反映一 个对象,每个关系的所用属性都是对主码的具体 描述,或者是依附于主码的,另外在必要时附加 一些联系属性,作为外码使用。千万不要让一个 关系大而全的包含许多对象的信息,出现不是直 接描述主码的属性的存在。 第四章 结构化查询语言SQL 学习目标 掌握数据库模式的建立和删除的命令格式与作用。 掌握基本表结构的建立、修改与删除的命令格式 与作用。 掌握基本表内容的插入、修改与删除的命令格式 与作用。 掌握图的建立、修改与删除的命令格式与作用。 熟练掌握查询语句的格式与各个选项的作用,能 够按照查询要求写出相应的查询语句。 SQL是Structued Query Language的缩写,是美国 国家标准局(ANSI)从1986年首次推出的一种关 系数据库语言。 SQL具有数据定义(DDL)、数据操纵(DML)和 数据控制(DCL)等丰富功能。它定义有一组操 作命令(语句),用户通过命令交互方式或程序 执行方式使用命令能够实现相应功能。 SQL的数据定义功能能够定义数据库的三级模式 结构,即外模式、全局模式和内模式结构。其中 外模式又叫试图(View),全局模式简称模式 (Schema)或数据库(Database),内模式由系 统根据数据库模式自动实现。 在SQL中,每个关系又叫基本表或表(Table),每个 关系中的属性又叫做字段(Field)或列(Column), 元组又叫做行(Row)。一个数据库由若干基本表组 成,通常一个基本表对应存储在外存数据库空间的一 个存储文件中。每个视图也是一个关系,它由基本表 产生,有自己独立的结构定义,但没有独立的数据存 在,它的数据来自基本表,间接地来自存储基本表的 数据存储文件。所以,视图又称为虚表。 SQL的数据操纵功能包括对基本表和视图的数据查询、 插入、删除和修改,特别具有很强的数据查询功能。 SQL是一种高度非过程化的面向集合的语言。 SQL的数据控制功能主要是对用户的访问权限加以控 制,以保证系统的安全性。 4.1数据库模式的建立和删除 4.1.1 建立数据库模式 语句格式: CREATE {SCHEMA|DATABSAE} <数据库名> 〔AUTHORRIZATION<所有者名>〕 语句功能: 在计算机系统中建立一个只有名字的空数据库, 并定义出它的所有者名称。 语句举例: Create schema xuesh authorization 刘勇 Create database 教学库 4.1.2删除数据库模式 语句格式: DROP {SCHEMA|DATABSAE} <数据库名> 语句功能: 从计算机系统中删除(撤销)一个数据库。 语句举例: Drop database xuesh 在设计操作中建立和删除数据库模式通常是通过 窗口界面实现。 4.2 表结构的建立、修改和删除 4.2.1建立表结构 语句格式: CREATE TABLE [<数据库名>.<所有者名>.]<基本表名> (<列定义>,…[,<表级完整性约束>,…]) 语句功能: 在当前或给定的数据库中定义一个表的结构(即关系模式)。 语句举例: Create table stu( stu_no char(7)primary key, stu_name char(6)not null unique, stu_sex char(2)not null check(stu_sex=‘m’ or str_sex=‘f’), stu_birth datetime check(stu_birth<‘1993-12-31’), stu_dep chat(10), stu_grade int check(stu_grade>=1 and stu_grade<=4 ) ) Create table course ( course_no char(4)primary key, course_name char(10)not null unique, course_point int check (course_point>=1 and course_point<=6) ) Create table select_courses ( stu_no char(7), course_no char(4), grade int check(grade>=0 and grade<=100 ), primary key (stu_no,course_no), Foreign key(stu_no)reference stu(stu_no), Foreign key(course_no)reference course(course_no) ) 4.2.2修改表结构 语句格式: ALTER TABLE [<数据库名>.<所有者名>.]<基本表名> {ADD (列定义),…|ADD <表级完整性约束>,… |DROP COLUMN <列名>,…|DROP <约束名>,…} 语句功能: 向已定义过的表中添加一些列的定义或一些表级完整性 约束,或者从已定义过的表中删除一些列或一些完整性约 束。 语句举例: alter table stu add 籍贯 char(6) alter table stu drop column 籍贯 4.2.3 删除表结构 语句格式: DROP TABLE [<数据库名>.<所有者名>.]<基本表名> 语句功能: 从当前或给定的数据库中删除一个表,在删除表结构的同 时也删除全部内容。 语句举例: drop table stu 4.3 表内容的插入、修改和删除 4.3.1插入记录 (单行插入)语句格式: INSERT [INTO] TABLE [<数据库名>.<所有者名>.]<基本表名> (<列名>,…) VALUES (<列值>,…) (多行插入)语句格式: INSERT [INTO] TABLE [<数据库名>.<所有者名>.]<基本表名> (<列名>,…) <SELECT子句> 语句功能: 向一个表中所指定的若干列插入一行或多行数据。 语句举例: insert into stu(stu_no,stu_name)values (’0001’,’tom’) insert into stu(stu_no,stu_name) select stu_no,stu_name from stu1 where stu_sex=‘m’ 4.3.2 修改记录 语句格式: UPDATE [<数据库名>.<所有者名>.]<目的表名> SET <列名>=<表达式>,…[FROM <原表名>][WHERE <逻辑表达式>] 语句功能: 按条件修改一个表中一些列的值。 语句举例: update 职工 set 年龄=年龄+1 update 职工 set 基本工资=职工1.基本工资+职工1.加班津贴 from 职工1 where 职工.职工号=职工1.职工号 update 职工 set 基本工资=基本工资*1.2 where 职工号=‘0001’ 4.3.3 删除记录 语句格式: DELETE [FROM] [<数据库名>.<所有者名>.]<目的表名> FROM <原表名>][WHERE <逻辑表达式>] 语句功能: 删除一个表中满足条件的所有行。 语句举例: delete from 职工 where 年龄>45 delete 职工 from 职工1 where 职工.职工号=职工1.职工号 delete 职工 4.4 视图的建立、修改和删除 视图(view)是在基本表之上建立的表,它的结 构(即所定义的列)和内容(即所有数据行)都 来自基本表,它依据基本表存在而存在。一个视 图可以对应一个基本表,也可以对应多个基本表。 视图是基本表的抽象和在逻辑意义上建立的新关 系。 在数据库三级模式结构中,基本表属于全局模式 中的表,是实表;视图属于局部模式的表,是虚 表。视图的建立和删除只影响视图本身,不影响 对应的基本表,而对视图内容的更新直接影响基 本表(一般只允许对非主属性修改,不许做插入 和删除的操作)。 4.4.1 建立视图 语句格式: CREATE VIEW <视图名>(<列名>,…)AS <SELECT子句> 语句功能: 在当前数据库中根据select子句的查询结果建立一个视图, 包括视图的结构和内容。 语句举例: create view 成绩视图 (学生号,姓名,课程号,课程名,成绩) as select 选课.学生号,姓名,选课.课程号,课程名,成绩 from 学生,课程,选课 where 学生.学生号=选课.学生号 and 课程.课程号=选课.课程号 and 专业=’电子’ 4.4.2 修改视图内容 语句格式: UPDATE [<数据库名>.<所有者名>.]<视图名> SET <列名>=<表达式>,… [FROM <原表名>,…][WHERE <逻辑表达式>] 语句功能: 按照一定条件对当前或指定数据库中的一些列值进行修改。 语句举例: update 成绩视图表 set 成绩=80 where 学生号=’0001’ and 课程号=’f001’ 4.4.3 修改视图定义 语句格式: ALTER VIEW <视图名>(<列名>,…) AS <SELECT子句> 语句功能: 在当前数据库中修改已知视图的列,它与select子句的查 询结果相对应。 语句举例: create view 学生视图表 (学生号,姓名) as select 学生号,姓名 from 学生 alter view 学生视图(学生号,专业) as select 学生号,专业 from 学生 4.4.4 删除视图 语句格式: DROP VIEW <视图名> 语句功能: 删除当前数据库中一个视图。 语句举例: drop view 学生视图表 4.5 SQL 查询 SQL查询只对应一条语句,即select语句。 该语句带有丰富的选项,每个选项由一个 特定的关键字标识,后跟一些需要用户指 定的参数。 4.5.1 select语句格式 SELECT [ALL|DISTINCT] { <表达式1> [ [AS]<列名1>] [, <表达式2> [ [AS]<列名2>]…| * | <表别名>.* } [INTO <基本表名>] FROM <表名1> [ [AS]<表别名1>] [, <表名2> [ [AS]<表别名2>]…] [WHERE <逻辑表达式1>] [GROUP BY <分组列名1>] [, <分组列名2>…] [HAVING <逻辑表达式2>] [ORDER BY <排序列名1>[asc/desc] [,<排序列名2>[asc/desc]… ] 语句功能: 根据一个或多个表按条件进行查询,产生出一个新 表(即查询结果),该新表被显示出来或者被命名 保存起来。 语句说明: Select选项给出在查询结果中每一行所包含的列。 Into选项决定是否把查询结果以基本表的形式保存。 From选项提供用于查询的基本表和视图,均可带表别名, 这些表称为源表,查询结果称为目的表。 Where选项用来指定不同源表之间记录的连接条件和每个源 表中记录的筛选条件。 Group by选项用于使查询结果只包含按指定列的值进行分组 的统计信息。 Having子句通常同group by选项一同使用,筛选出符合条件 的分组统计信息。 Order by选项用于将查询结果按指定列值的升序或降序排列。 4.5.2 select选项 在该选项中,all/distinct为任选项。All为允许结果出现重 复,distinct在结果中不允许重复,系统默认all。 select语句中使用的函数: count(<列名>) 统计个数 max(<列名>) 求最大值 min(<列名>) 求最小值 avg(<列名>) 求平均数 sum(<列名>) 求和 例:book page 88-92 4.5.3 from选项 该选项提供用于查询的基本表和视图,并可以为 每个基本表起一个别名,此别名只限于该select语 句使用,作为列名的前缀限定符。 例: Select x.stu_no,x.stu_name from stu x 4.5.4 where 选项 该子句的功能是指定源表之间的连接条件 和对记录的筛选条件。条件之间需用and运 算符连接成一个逻辑表达式。 例:book page 94 在新版sql中,查询连接条件从where选项 转移到from选项中,并且丰富了连接的功 能。 中间连接 from<表名1>inner join<表名2> on <表名1>. <连接列名1><比较符><表名2>. <连接列名2> 左连接 from<表名1>left[outer] join<表名2> on <表名1>. <连接列名1><比较符><表名2>. <连接列名2> 右连接 from<表名1>right[outer] join<表名2> on <表名1>. <连接列名1><比较符><表名2>. <连接列名2> 每一种连接都隐含着双重循环的执行过程。 中间连接: 外循环依次扫描第一个表中的每个元组,内循环 依次扫描第二个表中的每个元组,当满足连接条 件时就连接起来形成中间表中的一个新元组。 左连接: 按中间连接形成中间表的新元组外,还把第一个 表中没有形成连接的所有元组也加入到中间表中, 这些元组在第二个表上所对应的列值被自动置为 空。 右连接: 按中间连接形成中间表的新元组外,还把第二个 表中没有形成连接的所有元组也加入到中间表中, 这些元组在第一个表上所对应的列值被自动置为 空。 用于查询语句中的专门比较式又称为判断 式,它实现单值与集合数据之间的比较。 常用的有六种格式。 1、<列名><比较符>ALL(<子查询>) <子查询>是一条完整的select子句,被嵌套在该比 较式中使用。当<子查询>的查询结果中的每一个 值都满足所给的比较条件时,此比较式的值才为 真,否则为假。 例: Select * from stu where age>all (select age from stu) 2、<列名><比较符>{ANY|SOME}(<子查询>) 当<子查询>的查询结果中的任一个值满足所给的比较条件 时,此比较式的值才为真,否则为假。 例: Select * from stu where age= some (select age from stu) 3、<列名>NOT BETWEEN <开始值>AND<结束值> 此格式中<开始值>要小于等于<结束值>。当由<列名> 所指定列的当前值在(或不在,用NOT关键字)所指定的 <开始值>和<结束值>之间(包括两个端点的值)时,此 时比较式的值才为真,否则为假。 例: Select * from stu where age between 18 and 20 4、[NOT] EXIST (<子查询>) 当子查询结果中至少存在着一个元组时,表明查询结果非 空,此时判断式的值才为真,否则为假;但是当判断式中 带有NOT关键字时,情况刚好相反,即当查询结果为空时, 判断式的值才为真,否则为假。 例: Select * from stu where exist (select * from course where course.no=stu.no ) 5、<列名>[NOT] IN {(<常量表>)|(<子查询>)} 当<列名>所指定列的当前值包含在由<常量表>或<子查 询>的结果所给定的值之内时,此时判断式的值才为真, 否则为假,出现NOT关键字则判断结果相反。 Select * from stu where age in(18,19,20) 6、<字符型列名>[NOT] LIKE <字符表达式> 当<字符型列名>的当前值与<字符表达式>的值相匹配时, 此时判断式的值才为真,否则为假,出现NOT关键字则判 断结果相反。下划线_代表任一字符;百分号%代表任意 多个字符。 Select * from stu where name like ‘王%’ 4.5.5 GROUP BY选项 语句执行时将按该选项中所给的分组列对 连接和选择得到的所有元组进行分组,使 得分组列值相同的元组为一组,形成结果 表中的一个元组。当该选项含有多个分组 时,则首先按第一个列值进行分组,若第 一个列值相同再按第二个列值进行分组, 依此类推。 例:统计每一年龄选修课程的学生人数 SELECT AGE,COUNT(DISTINCT S.S#)FROM S,SC WHERE S.S#=SC.S# GROUP BY AGE; 4.5.6 HAVING选项 该选项是一个筛选条件。通常跟在GROUP BY子句 后面用来从分组统计中筛选出部分统计结果,因 此该选项中的逻辑表达式通常带有字段函数。 4.5.7 ORDER BY选项 选项中的<排序列名1><排序列名2>等是需要使 查询结果按其进行排序的列,它们可以是源表中 的列名,也可以是select选项中所给表达式的顺序 号或定义的列名。当该选项含有多个分组时,则 首先按第一个排序列名进行排序,若列值相同再 按第二个排序列名进行排序,依此类推。ASC代 表升序排序(默认);DESC代表降序排序。 例:求基本表S中男同学的每一年龄组(超过50人) 有多少人?要求查询结果按人数升序排列,人数 相同按年龄降序排列。 SELECT AGE,COUNT(S#)FROM S WHERE SEX='M'GROUP BY AGE HAVING COUNT(*)> 50 ORDER BY 2,AGE DESC; 4.5.8 INTO选项 此选项根据查询结果自动建立一个基本表, 通常作为临时表使用,可以根据需要任意 建立和删除。# 例: select stu_no,stu_name from stu into stu_no_name order by stu_no 第五章 数据库应用系统设计 学习目标 了解数据库应用系统开发过程相继经过的六个阶段, 以及每个阶段的任务和目标; 能够对实际应用的简单系统进行需求分析,画出数据 流图,得到各种数据表和对数据处理的各种要求; 能够根据需求分析结果进行概念设计,画出相应的ER 图; 能够根据概念设计的结果进行逻辑设计和物理设计, 给出相应的基本表和视图的定义; 能够根据数据需求分析、概念设计、逻辑设计和物理 设计的结果进行机器实现,按照处理要求编写出相应 的应用程序(主要指查询语句)。 一个数据库应用系统的设计是十分复杂的过程。 数据库应用系统开发的人员主要由以下人员组成: 1、熟悉数据库设计理论的专家。 2、熟悉某一种或几种数据库管理系统的专家。 3、熟悉某一种或几种数据库应用系统开发工具的 专家。 4、熟悉面向数据库应用的具体业务管理专家。 对于一些小型数据库应用系统以上角色往往由一 个人承担。 5.1 数据库应用系统开发过程概述 一个数据库应用系统开发(设计)过程大 致包括六个阶段:需求分析、概念设计、 逻辑设计、物理设计、机器实现、运行维 护。 5.1.1 需求分析阶段 需求分析阶段的主要任务是:了解和掌握数据库应 用系统开发对象的工作业务流程和每个岗位、每 个环节的职责,了解和掌握信息从开始产生或建 立,到最后输出、存档或消亡所经历的传递和转 换过程,了解和掌握各种人员在整个系统活动过 程中的作用;通过同用户充分地交流和沟通,决 定哪些工作应由计算机来做,哪些工作仍由手工 来做,决定各种人员对信息和处理各有什么要求, 对视屏操作界面和报表输出格式各有什么要求, 对数据的安全性和完整性各有什么要求,等等。 需求分析阶段的主要目标是画出数据流图, 建立数据字典和编写需求说明书。 数据流图(data flow diagram)是描述实际 业务管理系统工作流程的一种图形表示法, 它使用带箭头的连线表示数据的流动方向 或者表示前者对后者的作用,用圆圈表示 进行信息处理的一个环节,用双线段或开 口矩形表示存档文件或实物,用矩形表示 参与活动的人员或部门。 例:book page 114 数据字典(data dictionary)是对系统工作流程中数 据和处理的描述。在数据库应用系统设计中,它是最 原始的数据字典,以后在概念设计和逻辑设计中的数 据字典都由它依次变换和修改得到。 需求说明书是系统总体设计方案,它包括上述的数据 流图和数据字典,包括系统设计总体目标,系统适宜 采用的计算机系统和数据库管理系统及相应配置情况, 包括系统开发人员组成、开发费用和时间,包括划分 系统边界,即哪些数据和处理由计算机完成,哪些仍 由人工完成,包括对用户使用系统烦人要求等许多方 面的详细内容。 需求说明书是开发单位与用户单位共同协商达成的文 档,一般要经过有关方面的专家进行评审和通过。它 是以后各阶段进行开发和设计的主要依据,也是最终 进行系统鉴定和评价的依据。是以后所有工作的基础 和凭证。 5.1.2 概念设计阶段 概念设计阶段的主要任务和目标是根据需求分析 的结果找出所有数据实体,包括一般实体和联系 实体、画出对应的ER图。对于较为复杂的系统, 先画出各个局部ER图,然后把各个局部ER图综合 起来进行整体设计和优化,形成统一的整体ER图。 概念设计也要贯彻单一化原则,即一个实体只用 来反映一个事实,一个实体中的所用属性都是用 来描述码的,而不是用来描述其他非码属性,甚 至其他实体中的属性的。若实体中存在部分依赖 和传递依赖,则应进行分解,使之消除这些依赖。 5.1.3 逻辑设计和物理设计阶段 逻辑设计阶段的主要任务和目标是根据概念设计 的结果设计出数据库的逻辑结构模式,包括全局 模式和各个外模式。鉴于关系型数据库管理系统 应用普遍,所以设计的数据库逻辑模式也就指关 系型的逻辑结构模式。 物理设计阶段的任务和目标是根据数据库的逻辑 设计结果设计出相应的内模式。对于关系型数据 库系统,它能够自动把用户设计好的数据库全局 模式转换为相应的内模式,至多需要用户考虑是 否建立索引,使用什么方式的索引等简单问题, 所以一般不对数据库的物理设计进行专门的讨论。 设计数据库的逻辑结构模式时,首先要设计好全 局模式,然后再设计好各个外模式。 关系数据库系统中的全局模式由若干个基本表组 成,表与表的联系通过定义的主码和外码来实现, 每个表都要根据需要达到一定的规范化程度,一 般要达到第三范式。关系数据库中的各个外模式 都是在基本表上,根据不同用户的不同要求而产 生视图,它的定义和数据都来自基本表,通过访 问视图能够浏览和更新基本表中的有关内容。 在设计数据库的全局模式时,就是要确定该模式 需要包含哪些基本表,每个基本表包含哪些属性, 每个属性采用什么合适的名称、类型和长度,每 个属性的完整性约束包含哪些方面,等等。 在将概念设计的结果转换为逻辑设计的结果 时,原来的实体被转换为对应的基本表或 视图,原来1对1或1对多联系通常不需要专 门转换为对应的基本表,因为这能够通过 在表中使用主码和外码约束来实现;原来 的多对多联系通常需要转换为对应的基本 表,该表中的主码是两端实体的主码的联 合体,在需要时还可以通过增加标识符属 性得到单属性候选码,并可以随时被指定 为主码。 5.1.4 机器实现阶段 机器实现阶段主要任务和目标是在设计的计算机 系统中建立数据库应用系统。它包括建立数据库 模式,通过装入数据建立真是的数据库,按照需 求分析中规定的对数据的各种处理要求,结合特 定的DBMS和开发环境编写出相应的应用程序和开 发出相应的操作界面。也就是,在机器上得到一 个满足设计要求的、功能完善和操作方便的数据 库应用系统。本阶段还包括反复的调试和分析系 统的运行情况,并要求专家和用户对系统按需求 说明进行评价和测试,判定通过则正式交付使用。 5.1.5 运行维护阶段 本阶段主要靠数据库管理员DBA做日常的 系统管理和维护工作,他需要经常听取用 户意见,需要利用专门的系统测试和分析 软件对系统运行状态进行检测,以便更好 的维护系统。 5.2 数据库应用系统设计应用举例 Book page 119 第六章 Access数据库管理系统的简单应用 学习目标 了解Access数据库系统的特点、操作界面和 七个操作对象的基本概念; 掌握Access数据库的建立和使用方法; 掌握表对象的创建方法和有关操作; 掌握查询对象的创建方法和有关操作; 掌握窗体对象的创建方法和有关操作; 了解报表对象的创建方法和有关操作。 6.1 系统概述 6.1.1 特点 Access是微软Office办公套件中一个极为重 要的组成部分。Access数据库管理系统是一 种关系型数据库管理系统,利用Access系统 开发数据库管理软件,一般不需要编写程 序,只要根据任务提出的要求,通过键盘 和鼠标,选择必需的命令,就能开发出简 单、实用、美观大方的应用软件,有效处 理日常数据。 Access的主要特点: (1)存储文件单一(所以数据包含在以mdb 为后缀的数据库文件中)。 (2)支持长文件名,便于标识和查找。 (3)面向对象的开发方式。 (4)处理多种数据信息。 (5)界面友好、工作方式灵活。 (6)强大的网络功能。 6.1.2 Access用户操作界面 通常Access的用户操作界面由无部分组成,即:标 题栏、菜单栏、工具栏、状态栏和工作区。 1、标题栏 用来显示软件标题名称的地方。 2、菜单栏 它提供实现系统功能的各种菜单选项。 3、工具栏 它提供很多工具按钮,工具栏内容随窗口显示的不 同而变化。 4、工作区 它用来显示数据库的窗口,各种工作窗口在这里打 开。 5、状态栏 状态栏用于显示数据库管理系统的工作状态。 6.1.3 操作对象 Access数据库包含七个数据库操作对象: 1、表:也称数据表,是数据库中用来存放数 据的场所,是数据库的核心和基础。 2、查询:是在数据库的一个和多个表中检索 所需信息的手段。 3、窗体:用于显示、输入、编辑数据和控制 应用程序执行的操作界面。它使得数据的 显示和输入更为灵活、方便。 4、报表:用于控制显示或打印数据的输出格 式。报表可以基于一个或多个表,也可以 基于查询,报表可以包括图表、图形等, 并可以对数据进行统计汇总等操作。 5、页:也称为数据访问页,是特殊的Web页, 用来查看和操作Internet上的数据。 6、宏:是对若干Access操作命令系列的定义。 执行宏实际是由系统自动执行宏定义的一 系列命令。 7、模块:是用Access提供的VBA语言编写的 程序段。 6.1.4 数据库的建立和打开 1、数据库的建立 Access提供了两种创建数据库的方法: 一种是先创建空数据库,再添加对象。使用本方 法前必须设计数据库中的每个对象(如数据库应 该包含多少表、什么字段、表与表之间关系等)。 另一种方法是使用Access提供的各种数据库向导 创建包含各种数据库对象的数据库,并可以同时 建立各个对象,即通过对向导所提出的选项和不 同选择来设计窗体、查询和报表等,从而建立一 个完整的数据库。 例:book page 132 2、数据库的打开 在Access中,如果要使用已经存在的数据 库,必须首先确认它是否打开。 打开步骤: 1、启动Access,在”Microsoft Access“对话 框中将最近打开过的数据库文件。 2、选择”打开已有文件“单选项,在列表框 中点击要打开的数据库文件名,然后点击” 确定“即可。 6.2 表操作 6.2.1 表的创建 表是Access数据库的操作对象之一,是数据库中 用来存放数据的场所,是Access数据库中最基本、 最重要的一部分。其他数据对象都在表的基础上 建立和使用。 1、表的结构 定义字段就是确定表的结构。 (1)字段名称 字段是表的基本存储单元,是同类型数据的标识 符,为字段命名可以方便地使用和识别字段。 (2)字段的数据类型 数据类型 可存储数据 大小 文本 文本或文本与数字组合 最长255字符 备注 长文本或文本与数字组合 最长64000字符 数字 数值 1、2、4或8字节 日期/时间 日期或时间值 8字节 货币 货币数据 8字节 自动编号 自增序号 4字节 是/否 逻辑值 1位 OlE对象 链接或嵌入的对象 最大1GB 超级链接 保存超级链接的字段 最长64000字符 查阅向导 使用组合框选择另一个表或列表中 与主关键字长度相同, 的值。从数据类型列表框中选择, 该字段也是查阅字段, 打开向导进行定义。 4字节 (3)字段的属性 字段的属性包括字节、整型、长整型、单 精度型、双精度型、标题、默认值、有效 性规则等。 字段大小:定义字段的长度; 格式:决定数据的打印格式和显示方式; 小数位:决定小数位的位数; 有效性规则:决定字段的取值范围; 索引:加快检索的速度,且索引字段不允 许重复值。 (4)字段说明 字段说明是字段的简要说明信息,它主要是便于 以后的数据库系统维护。 (5)主键的概念和作用 在数据库中,常常有多个表,这些表之间不是相 互独立的,在这些表的沟通过程中,就需要一个 字段作为联系的‘桥’,通过这个字段中不同的 值可以区别各条记录,该字段称为主键。每个表 至少要有一个主键,主键是能使表中记录唯一的 字段,它的作用是用于与其它表取得关联,是数 据检索与排序的依据,具有唯一性。因此应根据 数据库设计知识选择一个能够唯一标识记录的字 段作为主键。 2、创建表 Book page 135 3、主键和索引的创建 Book page 137 6.2.2 表中数据的输入和编辑 Book page 138 6.2.3 建立表间联系 Book page 142 6.3 查询操作 Book page 143 6.4 窗体操作 Book page 152 6.5 报表操作 Book page 160 第七章 Access数据库管理系统的高级应用 学习目标 了解宏、模块、数据访问页的概念; 了解数据库的安全措施; 掌握宏的创建和使用; 了解模块的创建和使用方法; 了解数据访问页的创建和使用方法; 了解数据的导入和导出方法。 7.1 宏操作 7.1.1 宏的概念和功能 1、宏的概念:我们把那些能自动执行某种操 作的命令统称为‘宏’,其中每个操作能 自动实现特定的功能,它是一个或多个操 作命令的集合。宏是一种特殊的代码,也 是一种操作命令,它和菜单操作命令类似, 只是它们对数据库施加作用的时间有所不 同,作用时的条件也有所不同。宏命令在 数据库的执行过程中使用,并且可以自动 运行。 在access中,一共有53种基本宏操作,可 以组合很多其他的‘宏组’操作。实际使 用中,常常将基本宏命令组成一组,按顺 序执行,以完成一种特定任务。通过窗体 中控件的某个事件操作来实现,或在数据 库运行过程中自动实现。 2、宏的功能: (1)打开、关闭表单或报表,打印报表,执行查询。 (2)筛选、查找记录。 (3)模拟键盘动作、为对话框或别的等待输入的任务提供 字符串输入。 (4)显示信息框和响铃警告。 (5)移动窗口,改变窗口大小。 (6)实现数据的导入和导出。 (7)定制菜单。 (8)执行任意的应用程序模块、甚至包括MS-DOS模块。 (9)为控制的属性赋值。 7.1.2 Book 7.1.3 Book 7.1.4 Book 宏的建立 page 168 宏的编辑 page 170 宏的运行 page 171 7.2 模块操作 7.2.1 模块的概念和功能 1、模块的定义和作用 模块是将visual basic语言的声明、语句和过程集 合在一起,作为一个命名单位的程序。它通过嵌 入在access中的程序设计语言编辑器和编译器实 现了与access的结合。 visual basic可以把模块理解为是装有visual basic 程序代码的容器,它是由一个或多个过程组合的, 每个过程可以实现一种或几种功能。 模块克服宏的缺点(运行速度慢;不能直接 运行很多windows程序;不能自定义一些函 数),由VBA(visual basic application)语 言实现,当某段VBA程序编译通过后,将这 段程序保存在access中的一个模块里,并通 过类似在窗体中激发宏的操作那样来启动 这个‘模块’。 2、模块的类型 (1)类模块 类模块是可以定义新对象的模块。新建一 个类模块,也就是创建了新的对象,如窗 体、报表都是类模块,而且它们各自与某 一个窗体或报表相关联。它可以独立存在, 也可以与窗体和报表同时出现。 (2)标准模块 标准模块包含的是通用过程和常用过程, 这些通用过程不与任何对象相关联,常用 过程可以在数据库中的任何位置运行。 7.2.2 模块的建立 Book page 173 7.3 数据访问页 7.3.1 数据访问页的概念和功能 access数据访问页是access数据库中的一个 数据库对象。Access2000进一步增强与因 特网的集成,用户可以通过因特网共享 access数据库,可以方便的使用来自于网络 的数据,也可以在网上发布自己的数据。 界面采用IE浏览器的界面,发布内容来自数 据库中的数据。这种链接是动态的,不需 要创建很多的页面,一切繁琐的工作由 access完成。 7.3.2 Book 7.3.3 Book 7.3.4 Book 数据访问页的建立和使用 page 175 编辑数据访问页 page 177 在IE中查看数据访问页 page 178 7.4 数据库的安全措施 数据库的安全性是维护数据的重要前提,当建好 一个数据库后,数据的安全是否能得到保证就是 一个非常重要的问题。Access通过设置数据库密 码、设置用户权限等来保护数据库的安全。 7.4.1 用户密码的操作 Book page 179 7.4.2 用户管理 Book page 181 7.4.3 加密和解密数据库 Book page 183 7.5 数据的导入和导出 7.5.1 数据导入和导出的概念 在access中,可以用‘获取外部数据’命令来获 取数据库或其他格式文件的数据,对于不同的外 部数据库可以用不同的获取方式。同时,access 数据库中的数据也可被导出到其他数据库或其他 格式的文件。 7.5.2 数据导出 Book page 184 7.5.3 数据导入 Book page 186 7.6 综合应用举例 教师教学信息管理系统 Book page 192 第八章 SQL Server数据库管理系统概述 学习目标 了解SQL Server数据库管理系统的全貌和基本使 用方法; 能够在所选定的操作系统上正确安装、配置、运 行SQL Server数据库管理系统,并具备对安装过 程中可能出现的一些常见问题的分析和解决能力; 学会企业管理器、查询分析器这两种工具的使用; 掌握SQL Server中的基本数据类型和Transact SQL语言的基本使用方法。 8.1 SQL Server的发展历程及特点 8.1.1 SQL Server的发展历程 SQL Server是微软公司出品的关系型数据库管理系统 (RDBMS)软件。 1988年 微软与Sybase等公司开发基于OS/2操作系统的关系型数据库管 理系统。 1992年 微软与Sybase开发基于Windows NT操作系统的SQL Server4.2 版本。 1995年 微软单独开发基于Windows NT操作系统的SQL Server6.0版本。 1996年 推出SQL Server6.5版本。 1999年 推出SQL Server7.0版本 2000年 推出SQL Server2000问世。 8.1.2 SQL Server的主要特性 随着用户数量的增加,SQL Server在易用 性、可收缩性和可靠性、数据仓库等方面 作了重大创新,它在RDBMS领域具有很多 新颖和有创造性的特点,已经成为一种领 先的数据库管理系统,但其只能运行在 windows平台上,不能在UNIX等其他操作 系统上运行,移植性较差。 1、客户/服务器体系结构 SQL Server采用客户/服务器计算模型,通过中央 服务器来集中存储数据资源,该服务器可以被多 台客户机访问,数据库应用的处理过程分布在客 户机和服务器上。采用这种方式的好处有: (1)数据集中存储在服务器上,而不是分开存储在 各客户机上,使所有用户都可以访问到相同的数 据。这种方式一方面可以较方便地实现数据共享, 另一方面所有客户机硬件不需要具备存储和处理 大量数据的能力,而服务器不需要具备数据表示 功能,这样极大节省了硬件的开销。最后,这种 方式也较易实现数据备份和恢复工作。 (2)业务逻辑和安全规则可以在服务器上定义一次, 而后被所有的客户使用,便于安全和业务逻辑的 统一规划管理。 (3)关系数据库服务器仅返回应用程序所需要的数 据,这样可以减少网络流量。 2、易用的管理工具,动态的自我管理和配置 SQL Server为数据库管理员提供了许多管理数据 库系统的工具,比如:企业管理器(Enterprise Manager)、查询分析器(SQL Qery Analyzer)。 这些都是基于图形的管理工具,从而大大简化了 安装、管理和使用SQL Server数据库的过程,操 作简单直观,交互性好。 SQL Server还提供了动 态的自我管理机制, 能够动态配置运行环境,优 化和简化许多服务器配置选项。 3、自动实现数据库的并发控制 并发问题是在多个用户同时访问数据库时 产生的问题。并发控制通常利用数据封锁 机制完成。 SQL Server对数据库实施的是 行级封锁,它会根据不同的情况动态调整 数据封锁的力度,以使数据封锁和数据共 享达到最佳效果。例如SQL Server会根据查 询操作的实际情况,自动加行级锁或页级 锁。 4、强大的编程接口和开发工具 SQL结构化查询语言是关系数据库的重要组 成部分。 SQL Server采用的结构化查询语 言成为Transact SQL,它与ANSI 92 SQL标 准兼容,并对其进行了扩充。利用Transact SQL可以完成创建和管理数据库对象、访问 和修改数据、数据集合、管理安全性和权 限等操作。在程序开发阶段可以利用SQL Server提供的查询分析器作为编写Transact SQL脚本程序的开发工具,在脚本嵌入应用 程序中,就可以完成几乎所有数据库管理 和操纵任务。 此外,SQL Server还 支持大多数常用的数据 库应用编程接口(API),如ADO、OLE DB、 ODBC等,这可以使应用程序直接与数据库 进行交互,提高数据库应用程序开发的速度, 降低难度。 SQL Server包含诸如SQL DMO(分布式管理 对象)、SQL DTS(数据转换服务)和数据 库复制组件等OLE自动对象。 SQL Server提 供的企业管理器就是为利用这些对象而开发 的,用户可以利用这些对象编写类似的管理 工具。 5、与操作系统的高度集成特性 SQL Server与Windows NT、Windows2000 等操作系统完全集成。以Windows2000为 例,可以使用Windows2000的用户和域账 号作为SQL Server的注册账号,也就是 Windows认证。 集成特性是SQL Server的重要特性,包括: 邮件集成、访问因特网集成。 8.2 SQL Server的安装与启动 Book Page 200 8.3 SQL Server管理工具简介 Book page 203 8.4 SQL Server的系统结构 8.4.1 存储结构 SQL Server的数据存储在数据库中,数据被组织 到用户可以看见的逻辑组件中,而在磁盘上则作 为两个或更多的物理文件来实现。 1、数据库对象:逻辑存储结构 SQL Server数据库中的数据分别存储在几个不同 的对象中,而这些对象是用户在操作数据库时, 实际能够看到和接触到的,属于逻辑存储结构。 2、数据库文件:物理存储结构 在物理层面上, SQL Server数据库是由多个操作 系统文件组成,所有数据、对象以及数据库操作 日志均存储在这些操作系统文件中。根据文件的 作用,分为三种: (1)主数据文件 一个SQL Server数据库在磁盘上可以由一个或多 个文件组成。当有多个数据库文件时,有一个被 定义为主数据文件,扩展名为mdf。主文件是数 据库的起点并指向数据库的其余文件,每个数据 库只有一个主文件。 (2)次数据文件 次文件是主文件的辅助文件,扩展名为ndf,它包 括主文件中不包含的所有数据。次文件不是必须 的,它的意义在于不同的物理磁盘上创建辅助数 据库文件并将数据存储其中,提高数据处理的效 率,同时可以防止主文件过大。 (3)事务日志文件 每个数据库至少要有一个日志文件,扩展名为ldf, 主要用于存储数据的更新情况等事务日志信息。 所有对数据库的更新操作都会记录在此文件中。 (很重要) 3、数据库文件组 为了便于分配和管理, SQL Server允许将多个数据文 件归纳为一组,并赋予一个名称,这就是文件组。使用文 件组可以提高数据库的查询性能。 SQL Server文件组共有 以下两种: (1)主文件组 包含主数据文件和任何其他不属于另一个文件组的文件, 数据库的系统表都包含在主文件组中。 (2)用户定义文件组 在CREATE DATABASE或ALTER DATABASE语句中使用 FILEGROUP关键字指定的任何文件组。 一个文件只能存在于一个文件组中,一个文件组也只能被 一个数据库使用;日志文件是独立的,它不作为任何文件 组的成员。文件组的使用可以大大提高查询效率。 8.4.2 系统数据库 SQL Server使用系统数据库来管理系统,每个SQL Server系统都拥有四个系统数据库以及一个或多 个用户数据库。 在安装SQL Server时,系统会自动建立Master、 Model、Tempdb、Msdb四个系统数据库和Pubs、 Northwind两个用户数据库(主要供用户学习使 用)。 1、Master数据库 Master数据库包含SQL Server系统中的所有系统 级信息,主要包括:所有注册账户和密码、所有 用户数据库的存储位置和初始化信息、系统配置 参数、是否存在其他数据库以及是否存在其他的 SQL Server等。 2、Tempdb数据库 Tempdb是一个临时数据库,它只是为临时表和其 他临时存储需要提供一个工作空间,属于全局资 源,没有专门的权限限制。Tempdb中的数据都是 临时的,并在SQL Server重新启动时,按默认大 小重建Tempdb。 3、Model数据库 Model数据库是用户建立新数据库的模板,它包含 将复制到每个用户数据库中的系统表。每当用户 创建数据库时,SQL Server服务器都会将Model数 据库中的内容拷贝到新数据库中。 4、Msdb数据库 Msdb数据库主要用来进行复制、作业调度 和管理报警等活动。 与这四个系统数据库有关的主数据文件和事 务日志文件,默认情况下存储在SQL Server 安装目录的Data子目录下。 主文件 Master: Master.mdf Model: Model.mdf Msdb: Msdb.mdf Tempdb:Tempdb.mdf 日志文件 Masterlog.ldf Modellog.ldf Msdblog.ldf Templog.ldf 8.4.3 系统表 在逻辑层次上,数据库使由表、视图、存 储过程等一系列数据对象组成。每当创建 数据库时, SQL Server都会自动创建一些 数据对象,其中比较重要的是系统表。 系统表记录了SQL Server数据库服务器信 息,组成了SQL Server系统利用的数据字典。 在应用中应防止对它们的损坏。 只存储在Master中的系统表:book page 212 存储每个数据库中的系统表:book page 213 8.5 Transact SQL语言简介 8.5.1 Transact SQL的主要功能简介 Transact SQL语言是SQL Server对标准SQL 的扩展,是SQL Server功能的核心,它扩展 的主要功能是: (1)加入程序控制结构,如if…else;while语句等。 (2)加入局部变量、全局变量等一些功能。 用户可以籍此编写出复杂的查询语句,也可以建立驻 留在SQL Server服务器上的数据库对象。 Transact SQL不区分大小写,一般大写用于保留关键字。 8.5.2 Transact SQL批处理及执行过程简介 用户可以通过可视化界面完成数据库的管 理工作,但最终必然提现为Transact SQL语 言。所有通过企业管理器的操作结果均可 自动生成对应的Transact SQL语句。各种语 言编写数据库应用程序,最终都表现为向 SQL Server服务器发送一组Transact SQL语 句,由服务器根据要求完成相应的操作。 一般通过查询分析器工具,编辑、执行 Transact SQL语言。 1、批处理的概念 批处理是指从客户机传递到服务器上的一 组完整的数据和SQL语句。在一个批处理中, 可以只包含一条SQL语句,也可以包含多条 SQL指令。 在查询分析器中,当Transact SQL的编译器 扫描到go语句时自动把前面的所有语句当 作一个批处理送往服务器。 2、客户端执行过程 一个批处理是一次发送给服务器的一组SQL 语句。每个应用程序都设有一种机制,用 来告诉服务器一个批处理中的所有语句。 3、服务器端的执行过程 当SQL Server服务器收到一个SQL批处理语 句后按照以下过程处理: 分析过程-再优化过程-编译过程-执行过程 8.6 SQL Server的主要数据类型 在SQL Server中,数据类型通常是指字段列、存 储过程参数和局部变量的数据特征。 8.6.1 数值数据类型 1、整数类类型 (1)bigint:-263到263-1的整型数据。 (2)int: -231到231-1的整型数据。 (3)smallint: -215到215-1的整型数据。 (4)tinyint: 0到255的整型数据。 2、精确数值类型 主要有decimal和numeric两种,用法基本相同。 在数据表中,只有numeric才能带有IDENTITY关 键字。使用这两种数据类型可以精确的指定总位 数,即精度;小数位数,即刻度。最大精度可达 38位。Decimal可以简写为dec。 3、浮点数值类型 浮点型也属于一种精确数值类型,只不过它的取值 范围更大。 (1)float:-1.79x10308到1.79x10308。 (2)real: -3.04x10308到3.04x10308。 4、货币类型 货币类型是带有四位小数位的浮点型。 (1)money:-263到263-1。精确万分之一。 (2)smallmoney: -231到231-1。精确万分之一。 8.6.2 字符型 1、char类型 长度固定。长度未达到定义长度时,字段尾部添加空格以 达到固定的字符数。 2、varchar类型 长度可变。 3、text类型 可存储长度超过8000个字符,最大长度231-1个字符。 8.6.3 日期时间型 1、datetime类型 范围从1753年1月1日到9999年12月31日,精 确到千分之一秒,占8个字符。 2、smalldatetime类型 范围从1900年1月1日到2079年6月6日,精确 到分,占4个字符。 当用户没有指定时间数据时,SQL Server自动 设置datetime和smalldateime数据的时间为 00:00:00,此时它们仅代表日期数据。 8.6.4 二进制数据类型 主要用来存储二进制数据,如图形图像、word文 档等。 1、binary和varbinary类型 最大长度8000字符,前者长度固定,后者长度可 变。 2、image类型 长度超过8000字符时使用,最大长度2GB。 8.6.5 位型bit 用来存储1和0两种代码,一个字节。 8.6.6 特殊数据类型 1、双字节数据类型 SQL Server提供nchar、nvarchar、ntext三种双字 节数据类型,是一种unicode数据类型,以2个字 节代表一个字符,其优点可以方便的处理多国语 言。 2、时间戳数据类型 时间戳数据类型是SQL Server根据事件的发生次 序自动生成的一种二进制数据。可以作为进行恢 复工作的重要部分。利用时间戳数据还可以替代 传统的数据库加锁技术。 8.7 SQL Server函数 SQL Server的Transact SQL提供了许多内部函数, 大致可以分为数学函数、字符串函数、日期函数、 系统函数、统计函数以及其他函数(如数据类型 转换函数)、用户自定义函数等几类。 8.7.1 数学函数 Book page 220 8.7.2 字符串函数 Book page 221 8.7.3 日期函数 Book page 221 8.7.4 系统函数 SQL Server所提供的系统函数主要供高级用户使 用,通过调用这些系统函数可以获得有关服务器、 用户、数据状态等系统信息,常见的系统函数有: user、system_user、host_id 8.7.5 统计函数 SQL Server中的统计函数主要用于对数据表的查 询操作之中,使用方法几乎一样,即应首先执行 一条select语句,最常见的统计函数有:SUM、 AVG、MIN、MAX、COUNT等。 8.7.6 其他常用函数 (1)ISDATE(表达式) 用来判断指定的表达式是否是一个合法的 日期。1为真,0为否。 (2)ISNULL(表达式1,表达式2) 如果表达式1的值为null,则返回表达式2的 值,否则返回表达式1的值,表达式1和表 达式2的类型必须相同。 (3)NULIF(表达式1,表达式2) 当表达式1与表达式2相等时,返回null值, 否则返回表达式1的值。 (4)ISNUMERIC(表达式) 表达式的值是合法的int、float、money等数字数 据类型时,返回1,否则返回0。 (5)COALESCE(表达式1,表达式2……) 判断在给定的一系列表达式中是否有非null的值, 如果有,则返回第一个不是null的表达式的值;如 果所有的表达式都是null,则返回null值。 (6)CAST(表达式AS数据类型) 将表达式的值从一个数据类型变为另一个数据类 型。 (7)CONVER(数据类型[(length)],表达式[style]) 功能与CAST相同,但更全面一些。 8.8 SQL Server的标识符及命名规则 8.8.1 标识符分类 SQL Server服务器、数据库以及表、视图、列、 索引、触发器、存储过程、规则、默认值和约束 等数据库对象都可以拥有一个标识符。对绝大多 数对象来说,标识符是必不可少的,但某些对象, 比如约束,是规定标识符是可选的。对象的标识 符一般在创建对象时定义,并供用户作为引用该 对象的工具使用。 1、界定标识符 界定标识符是那些使用双引号或者方括号 等起界定作用的符号的标识符,使用了界 定标识符,既可以遵守标识符的命名规则, 也可以不遵守标识符命名规则。 2、常规标识符 常规标识符严格遵守标识符命名规则,所 以在Transact SQL语句中凡是常规标识符都 不必使用界定符。 8.8.2 标识符格式规则 (1)标识符的首字母必须是Unicode2.0所定义的字 母,以及下划线、@、数字符号#。 (2)标识符首字母以后的字符可以是Unicode2.0所 定义的字母;来自基本拉丁字母或其他国家,地 区脚本的十进制数字;@、¥、数字符号或下划 线。 (3)标识符不能是Transact SQL的保留字,保留字 不区分大小写。 (4)标识符内不允许有空格或特殊字符。 @开头的标识符是局部变量或函数的参数。 #开头的标识符是临时表或存储过程。 8.8.3 对象命名规则 SQL Server的数据库对象名可以由1~128个字符 组成,不区分大小写。一个数据库对象的全名应 该由服务器名、数据库名、拥有者名和对象名四 个部分组成,基本格式如下: [[[server.][database].][owner_name].]object_name 实际使用过程时,服务器名、数据库名、拥有者 名可以省略,而使用默认值。在SQL Server中不 允许存在四部分完全相同的数据库对象。 第九章 SQL Server数据库简单应用 学习目标 能够运用SQL Server企业管理器和查询分析 器两种工具管理数据库; 能够在前五章学习的基础上,熟练掌握 Transact SQL的具体应用方法; 能够在SQL Server数据库管理系统的支持下 编写出简单的批处理应用程序。 9.1 数据库的创建与管理 数据库是SQL Server存放数据和数据对象的容器, 一般通过两种方法对它进行管理:一是通过企业 管理器所提供的可视化界面进行管理;二是使用 Transact SQL语句,通过查询分析器进行管理。 9.1.1 创建数据库 Book page 229 9.1.2 查看数据库信息 Book page 232 9.1.3 修改数据库 Book page 234 9.1.4 删除数据库 Book page 235 9.1.5 备份和恢复数据库 Book page 236 9.2 表对象的创建和管理 9.2.1 创建表 Book page 238 9.2.2 查看与修改表结构 Book page 241 9.2.3 查看与维护表数据 Book page 242 9.2.4 删除表 Book page 243 9.2.5 创建视图 Book page 243 9.3 索引的创建与管理 索引是最为常用的改善数据库性能的技术。SQL Server引入索引主要是为了提高查询的效率,它 能够加速ORDER BY和GROUP BY子句的操作,保 证数据的唯一性,并加快表连接的速度。 9.3.1 索引的概念和创建原则 索引就是一个指向表中数据的指针,如果我们把 书比作数据,那么各个章节就相对于数据库中的 表,而书的目录就是索引了。 索引是在基本表的列上建立的一种数据库 对象,它和基本表分开存储,它的建立或 撤销对数据的内容没有影响。当索引建立 后,它便记录了被索引的每一个取值在表 中的位置。当表中加入新数据时,索引也 会增加相应的数据项。 在对建立了索引的基本表进行查询时,首 先在相应的索引中查找,如果找到就返回 该数据在基本表中的位置,再从基本表中 取出全部记录值。 索引一经创建,就完全由系统自动选择和维护。 因此,在创建索引时,务必注意下列问题: (1)基本表的记录数量越多,记录越长,越有必要 创建索引,这对加快查询速度十分有效。 (2)索引是为了加快查询速度而创建的,但同时会 影响基本表的插入、删除或修改等更新活动的速 度。因此只有那些对数据量大、查询频度高、实 时性要求强的基本表才创建索引,且一张基本表 上不要创建过多的索引。 (3)索引是建立在基本表列上的对象,对哪个列进 行索引,通常根据列在WHERE、ORDER BY、 GROUP BY子句中出现的频率决定。 不适合建索引的列的情况; 包含太多重复值的列; 查询中很少被引用的列; 值特别长的列; 具有很多null值的列; 需要经常插入、删除、修改的列; 记录较少的基本表; 需要进行频繁的大批量数据更新的基本表。 9.3.2 索引的类型 从列的使用角度可将索引分为单列索引、惟一索 引、复合索引三类;从是否改变基本表记录的物 理位置角度可分为聚集索引和非聚集索引两类。 实际的索引通常是这两大类五种方式的组合。 (1)单列索引 单列索引是对基本表的某一单独的列进行索引, 是最简单和最常用的索引类型,通常对基本表的 主关键字建立单列索引。 (2)惟一索引 惟一索引的建立,则不允许在表中相应的列插入 任何相同的取值。这样不但提高查询性能,还维 护了数据的完整性。 (3)复合索引 复合索引是针对基本表中的两个或两个以上列建 立索引。 (4)聚集索引 聚集索引会改变基本表中记录的物理存储顺序。 即表中记录的物理排序顺序不再按插入的先后排 列,而是根据索引列重新排序。 (5)非聚集索引 非聚集索引的表中记录的物理顺序与索引顺序不 同,即表中的记录仍按实际插入的先后顺序排列, 不按索引列排序。 9.3.3 聚集和非聚集索引的对比 是否采用聚集方式进行索引应从以下几点考虑: (1)存取速度 从建立了聚集索引的表中取出数据比建立了非聚集索引的 表快,但相对而言,聚集索引会降低对表的插入、删除和 修改数据的速度。 (2)索引的数据 对聚集索引的主要限制是每个表只能建立一个聚集索引, 但是可以有多个非聚集索引(最多249个)。一个表可以 同时建立聚集和非聚集索引。 (3)所需空间 非聚集索引需要较多的硬盘空间和内存。 9.3.4 创建和删除索引 Book page 247 9.4 Transact SQL编程基础 Transact SQL与标准ANSI SQL-92最大的不 同在于它提供了丰富的编程结构,用户可 以实现任意复杂的应用规则,可以编写出 任意复杂的查询。使用Transact SQL编写的 程序可以通过查询分析器运行,也可以嵌 入编程语言中。如果编写基于SQL Server数 据库的应用程序,那么Transact SQL是最优 选择,对于要在不同数据库平台上运行, 那么SQL语句应符合ANSI标准。 9.4.1 程序注释语句 注释就是用一般人所熟悉的汉语、英语等 自然语言,对程序语言进行说明。经常书 写程序注释语句是一种良好的编程习惯。 注释语句不是可执行语句,不参与程序的 编译,只是一些说明性的文字,主要对程 序代码的功能及实现方式进行简要的解释 和说明,以帮助程序人员理解Transact SQL 程序段。 SQL Server使用/*……*/注释多行语句; 使用--……注释单行语句。 9.4.2 变量 SQL Server支持两种形式的变量,即局部变量和 全局变量。 1、局部变量 局部变量的作用域局限在一定的范围内的 Transact SQL对象。一般来说局部变量在一个批 处理内被声明、定义后,这个批处理内的SQL语 句就可以设置、引用这个变量的值。可这个批处 理结束后,这个局部变量的生命周期也随之结束。 因此可以理解为:局部变量的使用范围局限于批 处理内,即两个go语句之间的那一部分。 (1)声明局部变量 DECLARE { @变量名 数据类型 [,…n] } 变量名必须以@打头;数据类型可以使用 除了text、ntext和image类型以外的所有系 统数据类型和用户定义数据类型。 (2)为局部变量赋值 两种方式: 1)Select方式 Select @变量名=表达式; Select @变量名=表达式 from 表名 […n] [where 条件表达式] 2)Set方式 一条set语句只能给一个变量赋值,set可以在 update语句中使用。 Delcare @nn int Set @nn=(select count(*) from stu) Update stu set @nn=stu_age 2、全局变量 全局变量用于记录SQL Server服务器活动 状态的一组数据,在7.0版本以前,全局变 量是系统提供且预先声明的变量,对用户 只读。7.0版本以后,全局变量变成一种特 殊形式的函数,以@@打头区别于局部变量。 SQL Server一共提供30多个全局变量,例 如: @@connections 返回启动SQL Server以来连接或试图连接 的次数。 @@error 返回Transact SQL语句的执行错误。 9.4.3 程序结构 Transact SQL语言为了提供程序设计功能, 引入条件分支、循环、顺序等程序结构。 1、IF… …ELSE条件结构 常见的语法结构: IF 逻辑表达式 单条语句 或 BEGIN…END语句组 ELSE 单条语句 或 BEGIN…END语句组 常见的逻辑判断结构: IF [[NOT] EXISTS] (select 语句) Transact SQL 语句组 ELSE Transact SQL语句组 例:book page 253 2、CASE多重分支结构 CASE结构提供比IF…ELSE结构更多的选择 和判断机会,避免编写多重IF…ELSE的嵌 套语句。 结构1: CASE WHEN: 逻辑表达式1 THEN 返回结果1 WHEN: 逻辑表达式2 THEN 返回结果2 ………… ELSE 返回结果n END 结构2: CASE 表达式 WHEN: 表达式值1 THEN 返回结果1 WHEN: 表达式值2 THEN 返回结果2 ………… ELSE 返回结果n END 例:book page 255 3、WHILE循环结构 语法结构: WHILE 逻辑表达式 BEGIN Transact SQL语句组 [BREAK] [CONTINUE] END 当逻辑表达式为‘真’时,SQL Server服务器重复执行 Transact SQL语句组。Break作用是在某些情况下,无条件 跳出循环;continue作用是在某些情况下,跳出本次循环, 开始执行下一次循环。 例:book page 256 4、RETURN返回语句 在批处理、语句块或存储过程中,使用 RETURN语句可以立即从当前程序结构中退 出,RETURN后面的语句也不会被执行。 RETURN语句在进行复杂逻辑编程时才会使 用到。语句结构: RETURN [整数表达式] 注意:所有系统存储过程返回0表示成功, 返回非0表示失败。RETURN用于存储过程 时,不能返回空值。 9.4.4 游标 1、游标的概念及用途 在多数情况下,Transact SQL命令都是面向 集合的,但是当有用户需要对这些数据集 合中的每一行进行‘个性化’的操作时, 就需要使用游标(Cursor)。 游标提供了一种在服务器内部处理结果集 的方法,具有类似于C语言指针一样的结构, 可以识别一个数据集合内指定的行,从而 可以有选择的按行操作。 2、声明游标 在使用游标之前首先要声明它,用法如下: DELCARE 游标名 [INSENSITIVE][SCROLL] CURSOR FOR select 语句 [FOR|READ ONLY|UPDATE[OF 列名1,列名2[…N]]|] 主要参数意义: 游标名:应遵守SQL Server标识符命名规则。 INSENSITIVE:使用这个参数定义游标会把提取出来的记录集 放在一个在Tempdb数据库里创建的临时表里。任何通过 这个游标进行的操作,都在临时表里进行。因此,在对该 游标进行提取操作时返回的数据不反映对基表的所做的修 改,并且该游标不允许修改。 SCROLL:使用该参数定义的游标,可以包括以下所有的 取数功能: FIRST:取第一个记录; LAST:取最后一个记录; PRIOR:取前一个记录; NEXT:取下一个记录; RELATIVE:按相对位置取记录; ABSOLUTE:按绝对位置取记录。 如果没有使用SCROLL关键字,则对游标只能使用 NEXT取数功能。 Select语句:是定义游标结果集的标准select语句。 在游标声明的select_statment内不允许使用关键 字COMPUTE、COMPUTE BY、FOR BROWSE和 INTO。 READ ONLY:声明只读游标,不允许通过只读游标 进行数据的更新操作。 UPDATE:定义游标内可更新的列。如果指定OF column_name[,…n]参数,则只允许修改所列出 的列。如果在UPDATE中未指定列的列表,则可以 更新所有的列。 例:book page 260 3、打开游标 在使用游标前,必须打开。语法如下: OPEN 游标名 当执行打开语句时,SQL Server服务器实际上是 执行了声明游标时的SELECT语句。当声明时使用 了INSENSITIVE关键字,那么服务器会在Tempdb 中建立一张临时表,作为该游标使用的实际的临 时复本。 4、关闭游标 当不使用游标时,一定要关闭它,以通知服务器释 放所占用的资源。语法如下: CLOSE 游标名 5、释放游标 游标结构本身也会占用一定的资源,所以在使用 完游标后,应该将其释放,以回收资源。用法如 下: DEALLOCATE 游标名 6、使用游标取数 游标打开后就可以利用它一次一个记录地提取数据了。用 法如下: FETCH [[NEXT|PRIOR|FIRST|LAST|ABSOLUTE {n|@nvar} |RELATIVE {n|@nvar}] FROM ] [INTO @局部变量1…@局部变量n] INTO:允许将提取的列数据放到局部变量中。列表中的各个 变量从左到右与游标结果集中的相应列相关联。类型必须 匹配或支持隐性转换。变量数目必须与游标选择列表中的 列的数目一致。 n或@nvar:表示游标相对于作为基准记录的偏离位置。n必 须为整型常量且@nvar必须为smallint、tinyint或int型的局 部变量。 7、两种与游标有关的系统全局变量 @@FETCH_STATUS返回被FETCH语句执行 的最后游标的状态,而不是任何当前被连 接打开的游标的状态。返回0表示FETCH语 句成功;-1表示FETCH语句失败或此行不在 结果集中;-2表示被提取的行不存在。 @@CURSOR_ROWS返回本次服务器连接 中,打开游标取回的数据行的数目。 8、利用游标修改数据 要使用游标进行数据修改,必须将该游标声明为 更新的游标,即在声明时不要使用READ ONLY关 键字。同时使用‘FOR UPDATE OF’关键字指明要 更新的列。 (1)更新操作 UPDATE 表名 {SET 列名=表达式}[,…n] WHERE CURRENT OF 游标名 (2)删除操作 DELETE FROM 表名WHERE CURRENT OF 游标名 其中CURRENT OF游标名表示要对当前的游标数 据行进行操作。 9.4.5 事务 1、事务的作用 事务是并发控制的基本单位,它反映了现 实世界中需要以一个完整的单位提交一项 工作。SQL Server通过事务机制,将逻辑相 关的一组操作捆绑在一起,以便服务器保 持数据的完整性。它是Transact SQL复杂程 序设计必不可少的内容。 要么全部处理;要么一行也不处理,恢复 操作前状态。这就是事务处理的作用。 2、事务处理的控制语句 SQL Server可以通过三个语句完成事务控制: (1)开始一个事务:BEGIN TRAN[SACTION] 事务名 (2)提交一个事务:COMMIT [TRAN[SACTION]] 事务名 (3)回滚一个事务:ROLLBACK [TRAN[SACTION]] 事务名 在数据库应用程序设计中,事务控制语句的一般用法是: 第一步:BEGIN TRAN 事务名; 第二步:对数据库进行增、删、改等操作; 第三步:提交事务或回滚。 基本逻辑是:如果没有发生异常情况,则通过COMMIT语 句提交事务,确认第二步的操作;否则执行ROLLBACK回 滚命令,撤销第二步的所有操作。 9.5 存储过程 9.5.1 存储过程的作用 存储过程是一组预先编译好的Transact SQL 代码,可以作为一个独立的数据库对象被 用户使用,被应用程序直接调用。由于存 储过程是已经编译好的代码,执行时不必 再次进行编译,所以使用存储过程可以使 基于SQL Server的数据库应用程序更有效率。 SQL Server的存储过程可以接收参数,并以输出参数的形式返 回多个参数给调用它的过程或批处理。使用存储过程的好处是: (1)执行速度快:存储过程在创建时就经过语法检查和性能优化, 因此在执行时不必再重复以上步骤。存储过程在经历一次调用 后,就驻留内存中,不必再经过编译和优化,所以速度很快。 (2)模块化的程序设计:存储过程经过一次创建后,可以被无数 次调用。用户可以独立于应用程序对存储过程进行修改,增加 数据库应用程序的易修改性。 (3)减少网络流量:存储过程可以包含大量Transact SQL语句, 但进行调用时客户端只需要使用一个语句就可以实现,所以大 大减少了网络上的数据流量。 (4)保证系统的安全性:存储过程的语句组存放在数据库服务器 端。对于某些关键数据,可以设置成只通过存储过程来访问, 不允许用户直接使用Transact SQL语句或企业管理器对数据进 行访问。 9.5.2 创建存储过程 在Master数据库中存储了一些SQL Server事先定义好的系 统存储过程,通常以sp_xxx作为存储过程的名字。用户创 建数据库时,也会自动生成一些事先定义好的存储过程, 通常以dt_xxxx作为名字。 (1)简单语法 CREATE PROC[EDURE] 存储过程名 [WITH {RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}] AS sql语句[…n] RECOMPILE:该过程运行时将重新编译。 ENCRYPTION:对访问这些数据的入口进行加密。 Sql语句:利用Transact SQL编写的程序。 Book page 266 9.5.3 执行存储过程 如果对存储过程的调用是批处理的第一条语句, 则直接使用存储过程的名字调用该存储过程。否 则用EXECUTE或EXEC关键字完成调用。语法如下: EXEC user_proc1。 9.5.4 修改存储过程 语法如下: ALTER PROC[EDURE] 存储过程名 [WITH {RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}] AS sql语句[…n] Book page 268 9.5.5 删除存储过程 语法如下: DROP PROC[EDURE] 存储过程名1[,存储过程名2]… 9.5 触发器 触发器是一种特殊的存储过程,它基于一个表的 创建,但可以针对多个表进行操作,与表紧密相 连,可以看作是表定义的一部分,主要用来保证 数据的完整性。 在SQL Server中一张表可以有多个触发器,用户 可以针对UPDATE、DELETE、INSERT语句分别设 置触发器,那么当用户进行UPDATE、DELETE、 INSERT等数据维护操作执行后,这些事先定义好 的触发器对象就会被‘触发’,并按事先定义好 的规则自动执行。 9.6.1 创建触发器 语法如下: CREATE TRIGGER 触发器名 ON 表名 [WITH ENCRYPTION] FOR{[DELETE][,] [INSERT][,] [UPDATE][,]} [NOT FOR REPLICATION] AS sql 语句 [RETURN] 主要参数含义: WITH ENCRYPTION: 使用该参数对访问syscomments表的入口进行加密。 NOT FOR REPLICATION: 表示复制进程更改触发器所涉及的表时,不执行该触发器。 例:book page 269 9.6.2 删除和修改触发器 语法如下: 删除触发器: DROP TRIGGER {触发器名} [,…n]。 当用户删除某个表格时,所有建立在该表上的触 发器都将被删除。 修改触发器: 其语法与参数的含义与CREATE TRIGGER相同。 9.7 数据库完整性管理 数据的完整性是指存储在数据库中的数据的正 确性和相容性。设计数据库完整性的目的是为 了防止数据库在不符合语义的数据,防止错误 信息的输入输出。SQL Server提供的用来实施数 据完整性的途径主要是约束(Constraint)、标 识列(Identity Column)、默认(Default)、 规则(Rule)、触发器(Trigger)、数据类型 (Data Type)、索引(Index)和存储过程 (Stored Procedure)等。 SQL Server实施完整性的主要途径 数据完整性类型 实施途径 实体完整性 Priamry key(主键) Unique key(惟一键) Unique Index(惟一索引) Identity Column(标识列) 值域完整性 Default(默认) Check(核查) Foreign Key(外键) Data Type(数据类型) Rule(规则) 参照完整性 Foreign Key Check Trigger(触发器) Stored Procedure(存储过程) 用户定义完整性 Rule Trigger Stored Procedure 9.7.1 使用约束实施数据的完整性 约束的用途是限制用户输入到表中的数据的值的 范围,一般分为列级约束和表级约束。列级约束 是行定义的一部分,只能应用在某个列上;表级 约束的定义独立于列的定义,可以应用到一个表 中的多个列上。SQL Server提供包括主键约束、 外键约束、惟一性约束、检查约束等。 存储过程:sp_helpconstraint 表名 可以浏览某张表格上的所有约束信息。 1、Primary Key约束(主键约束) 特征: (1)创建主键约束时,SQL Server会自动创建一个 惟一的聚集索引。 (2)定义了主键约束的字段的取值不能重复,并且 不能取null值。 (3)每个表只能定义一个主键约束。 (4)如果表中已经有了聚集索引,那么在创建主键 约束之前,要么指定所创建的是非聚集索引,要 么删除已有的聚集索引。 例:book page 272 2、Foreign Key约束(外键约束) 某列的取值必须参照另一个表的主码值, 在创建表时通过外键关键字完成定义。 特征如下: (1)一旦外键约束定义了某个字段,则该字 段的取值必须参照同一个表或另一个表中 的主键约束或惟一约束。 (2)外键约束不能自动建立索引。 例:Book page 273 3、Default 约束(默认约束) 当用户没有为定义了默认约束的字段输入 数据时,有默认约束提供默认数据。 特征如下: (1)每一个字段只能有一个默认约束。 (2)默认约束不能放在Identity字段上或 timestamp字段上。因为这两种字段都能够 自动插入数据。 例:book page 273 4、Unique 约束(惟一约束) 惟一约束的字段的值不能重复。 特征如下: (1)一个表可以有多个惟一约束。 (2)按照惟一约束的要求,在一个表中不允 许任意两处在被约束的字段上有相同的null 值,因此最好将被定义了惟一约束的列定 义为非空。 (3)创建惟一约束时,系统自动创建了非聚 集索引。 例:Book page 274 5、check 约束(核查约束) 核查约束限制了字段的取值范围。 特征如下: (1)限制了向特定的字段列输入数据的类型。 (2)表级定义的核查约束可以对多个字段列 进行核查。 例:book page 274 6、删除约束 如果需要将某个约束删除,可以使用以下语句。 语法格式: Alter table 表名 drop constraint 约束名 9.7.2 使用规则实施数据的完整性 规则(Rule)是单独存储的数据库对象, 它提供了一种加强列约束的机制,对列的 值进行规定和限制。当用户向绑定有规则 的数据列中INSERT和UPDATE数据时,规则 会检测修改值的完整性。 使用规则保证数据完整性的一般步骤是: 首先创建规则,其次将该规则与某个数据 列绑定在一起,最后当不再使用时删除它。 1、使用Transact SQL创建和删除规则 语法结构如下: CREATE RULE 规则名 AS 条件表达式 条件表达式可以是SELECT查询语句中的WHERE子 句中的任何有效的表达式,可以包含诸如算数运 算符、关系运算符和IN、LIKE、BETWEEN之类的 关键字。但规则中不能引用表中的数据列以及别 的数据库对象,同时在条件表达式中包含有一个 局部变量,该变量必须以字母@开头。 删除规则的语法: DROP 规则名 例:book page 275 2、使用Transact SQL绑定规则 绑定规则操作需要使用SQL Server提供的 系统存储sp_bindrule。语法如下: sp_bindrule 规则名,‘表名.列名’ 解除绑定语法: sp_unbindrule ‘表名.列名’ 例:book page 276 3、使用企业管理器管理规则 操作界面使用简单,自行练习。 9.7.3 使用默认实施数据完整性管理 1、使用Transact SQL创建和删除默认 语法如下: CREATE DEFAULT 默认名 AS 默认值 默认值可以是任意数据类型的常量。 2、使用Transact SQL语句绑定默认 语法结构: sp_binddefault ‘默认名’,‘表名.列名’ 解除绑定语法:sp_unbinddefault ‘表名.列名’ 3、使用企业管理器管理默认 操作界面使用简单,自行练习。 例:book page 276 9.8 SQL Server数据库安全性管理 作为一个企业级的关系数据库管理系统, SQL Server提供了内置的安全性和数据保护 机制,并且这种管理有效而操作简单,归 纳起来主要有以下四个等级:客户端操作 系统的安全、数据库的登录安全、数据库 使用安全和数据库对象的使用安全。 无论安全管理问题多么复杂,均可归结为 对‘锁’和‘钥匙’ 的管理问题,这就是 所谓的账户管理问题。SQL Server的安全管 理主要是围绕账户管理展开的。 9.8.1 数据库登录账号的管理 SQL Server的服务器级安全性是建立在登录账号 和口令的基础上的。在SQL Server中可以采用标 准SQL Server登录账号和集成Windows NT登录账 号两种方式,前者由SQL Server自身负责验证登 录账号的合法性,后者由Windows 2000/NT操作 系统管理和验证。无论哪种,用户要访问SQL Server的数据库服务器都必须提供正确的登录账 号和口令。 当采用SQL Server身份验证方式完成SQL Server安 装工作后, SQL Server就建立一个特殊账号sa, 它拥有对服务器和所有数据库的管理权限,可执 行服务器范围内的所有操作。 利用企业管理器管理登录账号:book page 278 9.8.2 数据库用户账号的管理 在实现了数据库的安全登录后,检验用户权限的 下一道门就是数据库的访问权限。数据库的访问 权限是通过映射数据库的用户账号和登录账号之 间的关系来实现的。 SQL Server中的数据库级别上有两个内置的特殊 用户,即dbo和guest。 dbo是数据库的拥有者,它在每个数据库中都存在, 并拥有对数据库的最高权利,可以在数据库范围 内执行一切操作。dbo用户对应于创建该数据库的 登录账号,所以当采用sa为登录账号进行安装时, 所以系统数据库的dbo都对应于sa账号。 guest用户可以使任何已经登录到SQL Server服务 器的用户都可以访问数据库,所有的系统数据库 除了Model以外都有guest用户。所有新建数据库 没有这个用户。 使用企业管理器管理数据库用户 book page 279 9.8.3 用户许可管理 当用户以某一登录账号登录SQL Server服务器, 并作为某一数据库用户创建了表、视图等数据库 对象后,他就拥有了对该数据库对象的访问权限。 但其他用户要想访问该对象必须首先获得拥有者 的许可,对表、视图等拥有者可以授予INSERT、 UPDATE、DELETE、SELECT等权限。 1、使用企业管理器进行许可管理 Book page 280 2、使用Transact SQL语言进行许可管理 (1)授权 语法如下: 语句授权:GRANT {ALL|语句命令[,…n]} [ON 表名] TO 数据库用户 对象授权: GRANT {ALL[PRIVILEGES]|权限许可[,…n]} {[(列名 [,…n])] ON {表名|视图名}} TO 数据库用户[,…n] TO 数据库用户 [,…n] [WITH GRANT OPTION] [AS{组|角色}] 说明: WITH GRANT OPTION表示可以将指定的对象权限授予其他 角色。 例:book page 281 (2)权限的收回 撤销以前所授予的权限语法如下: REVOKE [GRANT OPTION FOR] {ALL[PRIVILEGES]|权限[,…n]} {[(列名 [,…n])] ON {表名|视图名}} FROM 数据库用户[,…n] 撤销以前被授予的权限语法如下: REVOKE {ALL|语句命令[,…n]} [ON 表名] FROM 数据库用户[,…n] 例:book page 282 (3)拒绝访问 拒绝用户访问数据库对象语法如下: DENY {ALL[PRIVILEGES]|权限[,…n]} {[(列名 [,…n])] ON {表名|视图名}} TO 数据库用户[,…n] 撤销以前被授予语句许可的用户的访问语法如下: DENY {ALL|语句命令[,…n]} [ON 表名] TO 数据库用户[,…n] 例:book page 282 第十章 其他数据库系统与相关技术简介 学习目标 掌握这几个数据库管理系统软件的主要功 能、特点以及基本使用方法。 了解面向对象数据库提出的背景,它与传 统的关系数据库的不同之处。 了解面向对象数据库模型中的类、对象与 继承的概念。 了解常用数据库开发工具的特点。 10.1 Microsoft Visual FoxPro数据库管理 系统简介 Visual FoxPro数据库是一个关系型数据库。它是 由微软公司根据FoxBase发展起来的,主要用于 Windows环境。由于不需要用户编程就可以建立 一个面向对象的数据库应用程序,所以Visual FoxPro很快成为一种通用的数据库软件。1998年 微软推出6.0版本,无论在组织信息、运行查询、 创建集成的关系型数据库系统,还是为最终用户 编写功能全面的数据库管理应用程序,都可以提 供管理数据所必须的开发环境和工具。 10.1.1 Visual FoxPro的发展过程 1、dbase阶段 产生于20世纪80年代的dbase,具有简单、 易操作、功能较强、交互性好等特点。此 后形成了dbsae2、dbase3、dbase3+、 dbase4系列产品,功能也逐渐加强。Dbase 系列产品同时也存在运行速度慢、界面不 友好、早期版本不能解释执行等缺点。 2、Foxbase和FoxPro阶段 Book page 287 3、Visual FoxPro阶段 引入可视化编程技术的FoxPro。1995年推出3.0版 本,成为Xbase发展史上的又一个里程碑。它第一 次把Xbase产品数据库的概念和关系数据库理论接 轨。1996年推出5.0版本,在项目和数据库管理, 表、查询、视图设计等多方面进一步改进和增强, 此外还为用户提供了更多和更好的向导。1998年 推出6.0版本,在5.0版本的基础上加重了项目管 理器、向导、生成器、查询与视图、OLE连接、 ActiveX集成、帮助系统制作、数据的导入和导出 以及面向对象的程序设计等方面的技术力度。 10.1.2 Visual FoxPro6.0的功能和特点 1、 Visual FoxPro6.0de 基本功能 (1)可以为每一种类型的信息创建一个表,利用表存储相 应的信息。 (2)可以定义各个表之间的关系,从而很容易地将各个表 的数据有机的联系在一起。 (3)可以创建查询搜索那些满足条件的记录,也可以根据 需要对这些记录排序和分组、并根据查询结果创建报表、 表及图形。 (4)使用视图可以从一个或多个相关联的表中按一定条件 抽取一系列数据,并可以通过视图更新这些表中的数据; 还可以使用视图从网上取得数据,从而收集或修改远程数 据。 (5)可以创建表单来直接查看和管理表中的数据。 (6)可以创建一个报表来分析数据或将数据以特定的方式 打印出来。 2、Visual FoxPro的特点 (1)易于使用 (2)可视化开发 (3)事件驱动 通过与用户的交互实现程序的运行。 (4)面向对象编程 3、Visual FoxPro6.0的新特性 (1)Visual FoxPro基类和组件集 Visual FoxPro6.0带有Visual FoxPro基类,100多 个未编译、可重用类(满足许多应用程序的需 要),开发人员可以把它们方便地加到应用程序 中去,大大节省了开发人员的时间。 组件集通过可视化的方法组织和应用类来动态简 化类库管理。开发人员可以组织类库,将其分成 若干组,称为目录,从而易于实现对类的分组、 定位,以及在应用程序开发中使用类。组件集带 有许多缺省目录,覆盖所有的基本功能。开发人 员也可以创建自己的目录,把类和其他组件加进 去。 (2)应用程序向导和生成器 (3)严格的日期检测 (4)表面显示器 (5)访问方法与赋值方法 (6)项目挂钩 (7)在应用程序之间进行拖放 (8)活动文档 (9)微软传输服务器支持 (10)企业应用程序开发 10.2 IBM DB2数据库管理系统简介 Book page 292 10.3 Oracle数据库系统简介 Book page 302 10.4 面向对象数据库系统简介 Book page 311 10.5 应用开发开具简介 Book page 318
© Copyright 2024 ExpyDoc