当前位置:文档之家› 第1章Oracle11g数据库系统

第1章Oracle11g数据库系统

第1章Oracle 11g数据库系统Oracle数据库系统是世界领先的数据库管理系统,Oracle数据库以其功能强大和配置灵活而著称,同时也因有一定的操作难度,让很多初学者望而却步。

本书将由浅入深,以简单易懂的示例带领读者拨开Oracle的神秘面纱。

目前在Oracle世界主要有两类人员:一类是Oracle数据库管理人员,简称DBA;一类是Oracle开发人员。

Oracle DBA主要的工作是负责日常的数据库维护和性能优化管理。

由于Oracle系统较庞大、复杂,要成为一名合格的DBA,需要掌握的知识较多,比如要掌握Oracle体系结构和性能优化等方面的知识,相对其他数据库而言入门门槛较高,但是薪酬一般也较丰厚。

Oracle开发人员的主要工作是使用Oracle提供的SQL语言和PL/SQL 结构化程序设计语言操作数据库,主要职责是操纵Oracle数据库对象,不需要对Oracle系统结构有深入了解,入门较容易。

当Oracle开发人员积累了一定的开发知识后,可以通过学习Oracle DBA方面的知识向数据库管理员转型。

1.1 关系型数据库系统介绍1970年6月,IBM公司的研究员E.F.Codd博士(中文名:埃德加·弗兰克·科德),发表了名为“大型共享数据库的关系模型”的论文,受到了学术界和产业界的高度重视和广泛响应,使得关系型数据库系统很快成为数据库市场的主流。

E.F.Codd博士被誉为“关系数据库之父”,其照片如图1.1所示。

图1.1 关系数据库之父埃德加·弗兰克·科德第1章 Oracle 11g 数据库系统·3·1.1.1 什么是关系型数据模型关系型数据库简而言之就是使用关系或二维表存储信息。

以公司的人员信息管理为例,为了存储公司内部的员工信息,人事部门一般会建一份列表,在公司未引入信息化管理系统时,大多数人事职员会使用Excel 来保存员工信息,例如图1.2是一份简单的人员信息列表的Excel 文件。

这种Excel 存储数据的方式,将人员的所有信息都包含在一张表中,随着Excel 中的栏位和记录数越来越多,这份人员信息表会变得越来越繁杂,这种存储数据的方式称为平面文件数据模型。

为了简化修改与维护的复杂性,关系型数据库设计人员通过使用实体关系模型进行数据库建模,例如人员信息表可以分为员工表和部门表,通过部门编号进行关联,ER 模型如图1.3所示。

图1.2 Excel 人员信息列表 图1.3 人员信息表ER 关系模型 由图1.3中可以看到,通过将员工和部门分别存储在不同的二维表格中,使用主键(PK )和外键(FK )进行关联,使得获取和维护数据变得更容易,这就是关系型数据模型。

上述ER 图的3个关键组件分别如下所示。

❑ 实体:需要了解的信息,比如部门和员工信息。

❑ 属性:一般也称为列或字段,描述实体必须或可选的信息,比如员工表中的工号和姓名等。

❑ 关系:实体之间指定的关联,比如员工的部门编号关联到了部门表的编号属性。

关系型数据模型还涉及一些较复杂的组成元素,涉及较多的数学知识,有兴趣的读者可以参考一些理论性的读物。

1.1.2 数据库系统范式为了规范化关系型数据模型,关系型数据库系统在设计时必须遵循一定的规则,这种规则称为关系型数据库系统范式。

了解范式是每个数据库设计或开发人员必须具备的基本功,范式的主要目的是降低数据冗余,设计结构合理的数据库。

目前较常用的范式有如下3种。

第1篇 PL/SQL 开发入门·4·1.第一范式(1NF ):字段必须具有单一属性特性,不可再拆分如果字段中的值已经是无法再分割的值,则符合第一范式,即1NF 。

例如,在员工表中,姓名字段一般仅包含员工的正式姓名,这是符合第一范式的,但是如果要在姓名字段中包含中文名、英文名、昵称、别名等信息,就意味着姓名字段是可再拆分的。

因此员工名的设计可以如图1.4所示。

图1.4 修改后的员工表以匹配1NF 范式2.第二范式(2NF ):表要具有唯一性的主键列第二范式(2NF )要求数据库表中的每个实例或行必须可以被唯一地区分,为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。

第二范式是在第一范式的基础上的进一步增强,在数据库设计时一般使用唯一性主键来唯一地标识行。

比如在员工表中定义了以工号作为主键,因为公司员工的工号通常用来识别某个员工个体,不能进行重复;在部门表中通过部门编号作为主键,来唯一地区分一个部门。

3.第三范式(3NF ):表中的字段不能包含在其他表中已出现的非主键字段第三范式(3NF )是在前两个范式的基础上的进一步增强,主要用来降低数据的冗余。

比如,员工表中包含了部门编号,它引用到部门表中的部门编号这个主键,符合第三范式。

如果在员工表中又包含一个部门名称,那么表中的字段就包含了其他表中已出现的非主键字段,造成了数据的冗余,不符合第三范式。

范式主要用来规范数据库的设计,使得设计出来的数据库结构清晰,简洁易懂,避免了数据冗余和操作的异常。

在设计数据库模型时,灵活地应用范式是创建一个优秀的数据库系统的基石。

1.1.3 关系型数据库管理系统关系型数据库管理系统,简称DBMS ,是基于关系型数据库理论而开发的软件系统。

目前比较热门的关系型数据管理系统有:Oracle 、Microsoft SQL Server 、Access 、MySQL 及PostgreSQL 等。

数据库管理系统是用于建立、使用和维护数据库,对数据库进行统一的管理和控制,保证数据库的安全性和完整性的一套大型的电脑程序。

数据库管理系统功能第1章 Oracle 11g 数据库系统·5·结构示意图如图1.5所示。

图1.5 数据库管理系统功能结构示意图如图1.5所示,一个数据库管理系统通常要提供如下所示的几项功能。

❑ 定义数据库结构:DBMS 提供数据定义语言来定义(DDL )数据库结构,用来搭建数据库框架,并被保存在数据字典中。

❑ 存取数据库内容:DBMS 提供数据操纵语言(DML ),实现对数据库数据的基本存取操作,即检索、插入、修改和删除等。

❑ 数据库的运行管理:DBMS 提供数据控制功能,即数据的安全性、完整性和并发控制等,对数据库运行进行有效的控制和管理,以确保数据正确有效。

❑ 数据库的建立和维护:包括数据库初始数据的装入,数据库的转储、恢复、重组织,系统性能监视、分析等功能。

❑ 数据库的传输:DBMS 提供处理数据的传输,实现用户程序与DBMS 之间的通信,通常与操作系统协调完成。

有了关系型数据库管理系统,开发人员就可以在数据库中创建数据库、创建表、存取数据库内容、对数据库进行备份和管理,只需要理解常用的系统相关的操作,而不用去研究关系型数据库系统内部深奥难懂的数据方面的理论知识。

1.1.4 使用SQL 语句与数据库管理系统通信关系型数据库管理系统提供了SQL 语言,允许用户操纵数据库。

SQL 语言的全称是结构化查询语言(Structured Query Language ),它是高级的非过程化编程语言,允许用户在高层数据结构上工作。

它不要求用户指定对数据的存放方法,也不需要用户了解其具体的数据存放方式,其操作示意图如图1.6所示。

尽管SQL 语言已经被ISO 组织定义了具有国际标准的SQL 规范,但是各种数据库系统厂商在其数据库管理系统中都对SQL 规范做了某些编改和扩充。

所以,实际上不同数据库系统之间的SQL 不能完全相互通用,目前比较流行的两大类SQL 语言分别是微软的第1篇 PL/SQL 开发入门·6·T-SQL 和Oracle 的PL/SQL ,这两类SQL 既有相似之处又有不同之处。

图1.6 使用SQL 操作数据库管理系统SQL 语言主要又分为如下两大类。

❑ DML 数据操纵语言,主要是完成数据的增、删、改和查询的操作。

❑ DDL 数据定义语言,主要用来创建或修改表、视图、存储过程及用户等。

除此之外,还包含称为DCL 的数据控制语言。

数据库管理员,即DBA ,通常使用DDL 来管理数据库的对象,而数据操纵语言DML 则主要由数据库开发人员使用来操纵数据。

举个例子,如果想要在数据库中创建如图1.4所示的关系模型,可以使用代码1.1的DDL 语句来实现。

代码1.1 使用DDL 语句创建列和键 --创建员工表CREATE TABLE 员工表(--定义员工表列工号 INT NOT NULL,中文姓名 NVARCHAR2(20) NOT NULL,英文姓名 VARCHAR2(20) NULL,别名 VARCHAR2(20) NULL,年龄 INT DEFAULT 18,入职日期 DATE NULL,部门编号 INT NULL,--定义员工表主键CONSTRAINT PK_员工表 PRIMARY KEY(工号));--创建部门表CREATE TABLE 部门表(--定义部门表列部门编号 INT NOT NULL,部门名称 NVARCHAR2(50) NULL,部门经理 INT NOT NULL,部门描述 NVARCHAR2(200) NULL,工号 INT NOT NULL,--定义部门表主键CONSTRAINT PK_部门表 PRIMARY KEY(部门编号));第1章Oracle 11g数据库系统--为员工表添加外键引用ALTER TABLE 员工表 ADD (CONSTRAINT FK_部门编号FOREIGN KEY (部门编号)REFERENCES 部门表 (部门编号));--为部门表添加外键引用ALTER TABLE 部门表 ADD (CONSTRAINT FK_部门经理FOREIGN KEY (部门经理)REFERENCES 员工表 (工号));代码使用DDL语句CREATE TABLE,创建了员工表和部门表,并指定了表列及列的数据类型,同时为每个表都创建了主键。

在创建了表之后,使用ALTER TABLE语句为表指定了表间的主外键关系。

说明:--表示SQL中的注释语句。

一旦创建好了表结构,数据库开发人员就可以使用DML语句来操纵这些表数据,比如下面的代码分别向部门表和员工表插入了一些数据:--张三是理财部的经理,他不属于任何部门INSERT INTO 员工表VALUES(100,'张三','San Zhang','老三',20,date'2011-01-01', null);--李四是财务部职员INSERT INTO 员工表 VALUES(101,'李四','Li Si','老四',20,date'2011-01-01', 100);--部门表INSERT INTO 部门表 VALUES(100,'财务部',100,'理财部',0);--让张三属于财务部UPDATE 员工表 SET 部门编号=100 WHERE 工号=100;上面的代码使用DML语句INSERT向表中插入了3条记录,最后使用了UPDATE语句对员工表中的记录进行了更新。

相关主题