1、关系型数据库
使用数据库的主要目的是存储和处理数据。
1.1 数据库管理系统
数据库管理系统(DBMS):控制数据库中数据的存储、组织和检索。
数据库应用(database application):通过DBMS访问和操作数据库中的数据。
数据库管理系统的早期类型:
Hierarchical database -- 数据组织在树状结构中,类似于文件系统,记录之间是一对多的关系;
network database -- 与前种类型相似,不同的是:记录之间是多对多的关系。
这两种数据库中的数据都是预先定义好的,并且缺乏数据定义和查询语言。
1.2 关系模型(Relational Model)
E.F.Codd在他1970年发表的论文《大型共享数据库数据的关系模型》中, 定义了一个基于数学集合理论的关系模型。 目前,最广泛接受的数据库模型就是关系模型。关系型数据库就是基于这种模型的。
关系模型三要素:关系数据结构、关系操作和关系完整性约束。
关系是一个元组的集合。 一个元组 是一些属性值的无序的集合。
表是一个关系的二维表示, 关系由行 (元组) 和列 (属性) 的形式构成。表中的每一行具有相同的列集。 关系数据库是一个将数据存储在关系 (表)中的数据库。
1.3 关系数据库管理系统(RDBMS)
RDBMS是基于关系模型的,实现了关系模型的三要素,并且区分下面两种操作:
逻辑操作 -- 数据库应用或用户通过SQL语句对数据库进行操作;
物理操作 -- 接到SQL命令之后,由RDBMS决定如何实现。
也就是说数据库应用或用户只需要在逻辑层面上进行操作数据,不用关心数据到底是如何存储的。
Oracle数据库是关系数据库管理系统,并且进行了扩展,实现了面向对象的特性。
1.4 Oracle数据库历史
2、模式对象
RDBMS的特点之一,是物理数据存储与逻辑数据结构的独立性。 在 Oracle 数据库中,数据库模式(database schema)是逻辑数据结构或模式对象(schema object)的集合。 数据库模式由一个数据库用户拥有,并与用户名具有相同的名称。
其中,最重要的模式对象是表(table)和索引(index)。
2.1 表
表描述的是现实世界的实体,比如:员工。表的定义包含:表名,列名和数据类型等。
比如:员工表是员工信息的集合。每一列标识员工的一个属性(例如,员工姓名),每一行代表一个员工。
另外,可以为表中的列设置规则(完整性约束)。比如,NOT NULL约束用来强制某列中必须有值。
2.2 索引
索引是在一列或多列上创建的可选数据结构。某些情况下,使用索引可以提高数据检索的性能。
3、数据访问
3.1 Structured Query Language (SQL)
SQL 是一种基于集合的声明性语言,提供一个到关系数据库(如 Oracle 数据库)的接口。
3.2 PL/SQL and Java
PL/SQL 是 Oracle SQL的过程化扩展。
4、事务管理
4.1 事务(Transactions)
事务是一个逻辑、 原子的工作单元,它包含一条或多条SQL 语句。一个事务中的所有SQL语句要么全部成功,要么全部失败,不能存在其它情况。
最简单的例子,就是转账的例子。比如A给B转账100元,至少包含两个操作:
1)从A的账户中减去100元;
2)从B的账户中增加100元。
这两个操作是一个整体,必须同时成功。
4.2 数据并发(Concurrency)
数据并发:多个用户同时访问相同的数据。
对于多用户RDBMS,控制数据并发是非常重要的。
管理并发的其中一种方法,就是让用户等待。但过多的等待会影响数据库的性能。
Oracle 数据库使用锁来控制对数据的并发访问。
4.3 数据一致性(Consistency)
在Oracle数据库中,每个用户必须看到数据的一致视图,包括用户自己的事务以及其他用户已提交的事务所做出的更改。
Oracle 数据库始终强制执行语句级读取的一致性,保证单个查询所返回的数据是已提交的,并与某个时间点一致。
数据库也可以为整个事务中的所有查询提供读一致性,这叫事务级读一致性。在这种情况下,事务中的每一个语句看见的都是同一个时间点的数据,这个时间点也就是事务开始之时。
5、Oracle数据库架构
5.1 数据库和实例
Oracle数据库服务(database server)包含一个数据库(database)和至少一个数据库实例(instance):
数据库 -- 一些存放在磁盘上的文件,用于存储数据。
数据库实例 -- 管理数据库文件的内存结构,包含共享内存区SGA和一组后台进程。实例可以独立于数据库文件而存在。

5.2 数据库存储结构
1)物理存储结构包含:
数据文件 -- 存放数据库的数据
控制文件 -- 存放数据库的物理结构,包含数据库库名称和数据文件的名称和位置
在线重做日志文件 -- 记录数据库数据的变化
2)逻辑存储结构包含:
数据块(Data block) -- 最小的存储单位和I/O单位。
扩展区(Extent) -- 最小的分配单位,包含一组逻辑上连续的数据块。
段(Segment) -- 为用户对象 (表或索引)、回滚数据、或临时数据等分配的一组扩展区。
表空间(Tablespace) -- 数据库由表空间组成,每个表空间至少包含一个数据文件。
5.3 数据库实例结构
1)Oracle数据库进程包含:
客户端进程
后台进程
服务器进程 -- 处理客户端进程发送的请求
2)实例内存结构包含:
System Global Area (SGA) -- 共享内存结构
Program Global Areas (PGA) -- 服务器进程和后台进程进程私有的内存结构
疑问:客户端进程和服务器进程也是实例的一部分???
5.4 应用和网络架构
1)应用架构
应用架构是指一个数据库应用程序连接到 Oracle 数据库的计算环境。最常见的两种数据库体系结构是客户端/服务器体系结构和多层体系结构。
Oracle 数据库可以在传统的多层环境或 SOA 环境中扮演一个 Web 服务提供者的角色。
2)网络架构
Oracle 网络服务(Net Service)是数据库与网络通信协议之间的接口, 它对分布式处理和分布式数据库很有用。
Oracle网络服务的组件:
Oracle Net -- 在数据库应用和数据库服务之间建立并维护网络会话。
Oracle Net Listener -- 监听并管理数据库应用(客户端)发来的连接请求。
Oracle提供了两种处理客户端请求的架构:
专用服务器架构
共享服务器架构