数据库.doc
《数据库.doc》由会员分享,可在线阅读,更多相关《数据库.doc(19页珍藏版)》请在三一文库上搜索。
1、数据库(Data Base)目录1数据库的发展过程31.1手工管理阶段31.2文件系统阶段31.3数据库系统阶段42数据库的基本概念4数据4数据库(DB)43数据库模型53.1数据库模型的分类53.2关系数据库53.3实体53.4联系53.5关键字63.5.1组合关键字63.5.2唯一关键字63.5.3主关键字63.6索引63.6.1索引的优缺点63.7视图63.7.1什么是视图63.7.2视图的优缺点73.7.3视图的作用73.7.4视图的创建73.7.5删除视图73.8存储过程73.9触发器84范式84.1第一范式(1NF)84.2第二范式(2NF)84.3第三范式(3NF)94.4范式应
2、用105 PL/SQL116 Oracle中四大语言类型116.1什么是Oracle116.2ORACLE产品结构及组成126.2.1 ORACLE数据库系统的体系结构126.2.2ORACLE数据库的特点126.2.3 Oracle数据库工作原理136.3DDL(数据定义语言)136.3.1创建create136.3.2更改alter146.3.3删除drop和截断truncate146.4DML(数据操纵语言)156.4.1查询数据156.4.2插入数据166.4.3修改数据166.4.4删除数据166.5TCL(事务控制语言)166.6DCL(数据控制语言)167oracle开发中序列的
3、使用177.1建立序列命令177.2更改序列命令177.3删除序列命令17数据库1数据库的发展过程数据管理经历了从低级到高级的发展过程,这一过程大致可分为三个阶段:手工管理阶段、文件系统阶段和数据库系统阶段。1.1手工管理阶段在五十年代中期以前,计算机主要用于科学计算,计算机上没有操作系统,没有管理数据的专门软件,也没有像磁盘这样的设备来存储数据。这个时期数据管理的特点是:l 数据不保存。l 程序和数据联系在一起l 没有软件系统对数据进行管理 图1-1手工管理阶段1.2文件系统阶段 数据管理从五十年代后期进入文件系统阶段。操作系统中已经有了专门的管理数据的软件,一般称为文件系统。所谓文件系统是
4、一种专门管理数据的计算机软件。这个时期数据管理的特点是:l 将数据从程序中分离出来,组成相互独立的数据文件l 使用于科学计算及简单的数据管理l 数据和程序相互依赖l 数据冗余大l 数据的不一致性 图1-2文件系统管理阶段1.3数据库系统阶段20世纪60年代后期以来,这时硬件方面已有了大容量磁盘,硬件价格下降;软件则价格上升,为编制和维护系统软件及应用程序所需成本相对增加;在处理方式上,联机实时处理要求更多,并开始提出和考虑分布处理,在这种背景下,以文件系统作为数据管理手段已经不能满足应用的需求,于是为解决多用户、多任务共享数据的要求,使数据为尽可能多的应用服务,数据库技术便应运而生,出现了统一
5、管理数据的专门软件系统数据库管理系统。这个时期数据管理的特点是:l 数据结构化l 数据共享l 可控冗余度l 统一的管理和控制l 数据独立性 图1-3数据库系统阶段2数据库的基本概念数据:就是描述事物的符号,在我们的日常生活中数据无所不在,数字、文字、图表、图像、声音等都是数据。人们通过数据来认识世界,交流信息。数据库(DB):就是数据存放的地方。在计算机中,数据库是数据和数据对象的集合。所谓数据库对象是指表、视图、存储过程、触发器等。数据库管理系统(DBMS): DBMS是帮助用户建立、使用和管理数据库的软件系统。包括:DDL(Data description language)、 DML(d
6、ata manipulation language)和 其他管理和控制程序。数据库系统(DBS):以计算机系统为基础,以数据库方式管理大量共享数据的综合系统构成:数据库应用系统(DBAS):3数据库模型数据库模型描述了在数据库中结构化和操纵数据的方法,模型的结构部分规定了数据如何被描述(例如树、表等);模型的操纵部分规定了数据的添加、删除、显示、维护、打印、查找、选择、排序和更新等操作。3.1数据库模型的分类l 概念模型对真实世界中问题域内的事物的描述,不是对软件设计的描述。l 层次模型用树型(层次)结构表示实体类型及实体间联系的数据模型。l 网状模型用有向图结构表示实体类型及实体间联系的数据
7、结构模型。 l 关系模型用二维表的形式表示实体和实体间联系的数据模型。3.2关系数据库关系数据库就是基于关系模型的数据库。3.3实体实体是指现实世界中具有区分于其它事物的特征或属性并与其它实体有联系的对象。在关系模型中实体通常是以表的形式来表现的。表的每一行描述实体的一个实例,表的每一列描述实体的一个特征或属性。3.4联系联系是指实体之间的关系,即实体之间的对应关系。联系可以分为三种:() 一对一的联系。如:一个人只有一种性别,一个性别为一对一的联系;() 一对多的联系。如:相同性别的人有许多个,性别人为一对多的联系;() 多对一的联系。如:很多人有同一个性别,人一个性别为多对一的联系。通过联
8、系就可以用一个实体的信息来查找另一个实体的信息。关系模型把所有的数据都组织到表中。表是由行和列组成的,行表示数据的记录,列表示记录中的域。3.5关键字关键字是可用来标识或存取特定行的一组列。3.5.1组合关键字由不止一列组成的关键字称为组合关键字。在具有组合关键字的表中,组合关键字中各列的排序不受这些列在表中排序的约束。3.5.2唯一关键字唯一关键字被定义为它的任何值都不相同。唯一关键字的列不能包含空值。在执行 INSERT 和 UPDATE 语句期间,数据库管理程序强制执行该约束。一个表可以有多个唯一关键字。唯一关键字是可选的,并且可在 CREATE TABLE 或 ALTER TABLE
9、语句中定义。3.5.3主关键字主关键字是一种唯一关键字,表定义的一部分。一个表不能有多个主关键字,并且主关键字的列不能包含空值。主关键字是可选的,并且可在 CREATE TABLE 或 ALTER TABLE 语句中定义。3.6索引数据库索引好比是一本书前面的目录,能加快数据库的查询速度。 例如这样一个查询:select * from table1 where id=44。如果没有索引,必须遍历整个表,直到ID等于44的这一行被找到为止;有了索引之后(必须是在ID这一列上建立的索引),直接在索引里面找44(也就是在ID这一列找),就可以得知这一行的位置,也就是找到了这一行。可见,索引是用来定位
10、的。3.6.1索引的优缺点l 优点:方便了查询,在数据量大时排序更易查询。 l 缺点:查询时需要进行重新排序,减少了效率。物理索引缺点 建立索引效率低,只能建一个。3.7视图3.7.1什么是视图 视图是查看数据库表中数据的一种方法; 视图提供了存储预定义的查询语句作为数据库中的对象以备以后使用的能力; 视图只是一种逻辑对象,并不是物理对象,因为视图不占物理存储空间; 在视图中被查询的表称为视图的基表; 视图可以由以下任意一项组成::一个基表的任意子集;两个或两个以上的基表的合集;两个或两个以上基表的交集;一个或者多个基表运算的结果集合;另一个视图的子集.3.7.2视图的优缺点 优点:l 视点集
11、中 l 简化操作 l 定制数据 l 合并分割数据 l 安全性 缺点:l 如果试图连接复杂,查询起来需要花费时间l 视图是只读的,更新时需要更新原表,数据更新对用户来说很麻烦3.7.3视图的作用l 简单性:看到的就是需要的l 安全性:通过视图用户只能查询和修改他们所能见到的数据l 逻辑数据独立性:视图可帮助用户屏蔽真实表结构变化带来的影响3.7.4视图的创建 创建视图需要CREAE VIEW系统权限,视图的创建语法如下: CREATE OR REPLACE FORCE|NOFORCE VIEW 视图名(别名1,别名2.) AS 子查询 WITH CHECK OPTION CONSTRAINT 约
12、束名 WITH READ ONLY 其中: OR REPLACE 表示替代已经存在的视图。 FORCE表示不管基表是否存在,创建视图。 NOFORCE表示只有基表存在时,才创建视图,是默认值。 别名是为子查询中选中的列新定义的名字,替代查询表中原有的列名。 子查询是一个用于定义视图的SELECT查询语句,可以包含连接、分组及子查询。WITH CHECK OPTION表示进行视图插入或修改时必须满足子查询的约束条件。后面的约束名是该约束条件的名字。WITH READ ONLY 表示视图是只读的。 3.7.5删除视图删除视图的语法如下: DROP VIEW 视图名;删除视图者需要是视图的建立者或者
13、拥有DROP ANY VIEW权限。视图的删除不影响基表,不会丢失数据。3.8存储过程存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。3.9触发器触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。
14、4范式构造数据库必须遵循一定的规则,在关系数据库中这种规则就是范式(NF Normal Form)。范式是符合某一种级别的关系模式的集合。关系数据库中的关系必须满足一定的要求,即满足不同的范式。目前关系数据库有六种范式:第一范式(1NF)、第二范式、第三范式、第四范式、第五范式和第六范式。满足最低要求的范式是第一范式,在第一范式的基础上进一步满足更多要求的称为第二范式,其余范式依次类推。一般说来数据库只需满足第三范式就行了。4.1第一范式(1NF)在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。 所谓第一范式(1NF)是指数据
15、库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。简而言之,第一范式就是无重复的列。例如,如下的数据库表是符合第一范式:字段1字段2字段3字段4?而这样的数据库表是不符合第一范式的: 字段1字段2字段3字段4?字段3.1字段3.2?4.2第二范式(2NF)第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式
16、(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。这个唯一属性列被称为主关键字或主键、主码。 第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。简而言之,第二范式就是非主属性非部分依赖于主关键字。例如,假定选课关系表为SelectCourse(学号, 姓名, 年龄, 课程名称, 成绩, 学分),关键字为组合关
17、键字(学号, 课程名称),因为存在如下决定关系: (学号, 课程名称) (姓名, 年龄, 成绩, 学分) 这个数据库表不满足第二范式,因为存在如下决定关系: (课程名称) (学分) (学号) (姓名, 年龄)即存在组合关键字中的字段决定非关键字的情况。 由于不符合2NF,这个选课关系表会存在如下问题: (1) 数据冗余: 同一门课程由n个学生选修,学分就重复n-1次;同一个学生选修了m门课程,姓名和年龄就重复了m-1次。 (2) 更新异常: 若调整了某门课程的学分,数据表中所有行的学分值都要更新,否则会出现同一门课程学分不同的情况。 (3) 插入异常: 假设要开设一门新的课程,暂时还没有人选修
18、。这样,由于还没有学号关键字,课程名称和学分也无法记录入数据库。 (4) 删除异常: 假设一批学生已经完成课程的选修,这些选修记录就应该从数据库表中删除。但是,与此同时,课程名称和学分信息也被删除了。很显然,这也会导致插入异常。把选课关系表SelectCourse改为如下三个表: 学生:Student(学号, 姓名, 年龄); 课程:Course(课程名称, 学分); 选课关系:SelectCourse(学号, 课程名称, 成绩)。 这样的数据库表是符合第二范式的,消除了数据冗余、更新异常、插入异常和删除异常。另外,所有单关键字的数据库表都符合第二范式,因为不可能存在组合关键字。4.3第三范式
19、(3NF)在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。所谓传递函数依赖,指的是如果存在A B C的决定关系,则C传递函数依赖于A。因此,满足第三范式的数据库表应该不存在如下依赖关系: 关键字段 非关键字段x 非关键字段y 假定学生关系表为Student(学号, 姓名, 年龄, 所在学院, 学院地点, 学院电话),关键字为单一关键字学号,因为存在如下决定关系: (学号) (姓名, 年龄, 所在学院, 学院地点, 学院电话) 这个数据库是符合2NF的,但是不符合3NF,因为存在如下决定关系: (学号) (所在学院) (学院地点, 学院电话) 即存
20、在非关键字段学院地点、学院电话对关键字段学号的传递函数依赖。 它也会存在数据冗余、更新异常、插入异常和删除异常的情况,读者可自行分析得知。 把学生关系表分为如下两个表: 学生:(学号, 姓名, 年龄, 所在学院); 学院:(学院, 地点, 电话)。 这样的数据库表是符合第三范式的,消除了数据冗余、更新异常、插入异常和删除异常。4.4范式应用我们来逐步搞定一个论坛的数据库,有如下信息: (1) 用户:用户名,email,主页,电话,联系地址 (2) 帖子:发帖标题,发帖内容,回复标题,回复内容 第一次我们将数据库设计为仅仅存在表: 用户名 email 主页 电话 联系地址 发帖标题 发帖内容 回
21、复标题 回复内容 这个数据库表符合第一范式,但是没有任何一组候选关键字能决定数据库表的整行,唯一的关键字段用户名也不能完全决定整个元组。我们需要增加发帖ID、回复ID字段,即将表修改为: 用户名 email 主页 电话 联系地址 发帖ID 发帖标题 发帖内容 回复ID 回复标题 回复内容 这样数据表中的关键字(用户名,发帖ID,回复ID)能决定整行: (用户名,发帖ID,回复ID) (email,主页,电话,联系地址,发帖标题,发帖内容,回复标题,回复内容) 但是,这样的设计不符合第二范式,因为存在如下决定关系: (用户名) (email,主页,电话,联系地址) (发帖ID) (发帖标题,发帖
22、内容) (回复ID) (回复标题,回复内容) 即非关键字段部分函数依赖于候选关键字段,很明显,这个设计会导致大量的数据冗余和操作异常。 我们将数据库表分解为(带下划线的为关键字): (1) 用户信息:用户名,email,主页,电话,联系地址 (2) 帖子信息:发帖ID,标题,内容 (3) 回复信息:回复ID,标题,内容 (4) 发贴:用户名,发帖ID (5) 回复:发帖ID,回复ID 这样的设计是满足第1、2、3范式和BCNF范式要求的,但是这样的设计是不是最好的呢? 不一定。 观察可知,第4项发帖中的用户名和发帖ID之间是1:N的关系,因此我们可以把发帖合并到第2项的帖子信息中;第5项回复中
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库
链接地址:https://www.31doc.com/p-5022967.html