Oracle教学辅助.数据库模型介绍

来源:互联网 发布:seo sem区别 编辑:程序博客网 时间:2024/04/25 20:43

Oracle教学辅助.数据库模型介绍

草木瓜整理自网络

20080513

一、数据库模型

当前常见数据库的数据模型有四种:网状模型(Network Model)、层次模型(Hierarchical Model)、
关系模型(Relational Model)和面向对象模型(Object Oriented Model)。它们的区别在于记
录之间联系的表示方式不同。其中,关系模型是目前应用最为广泛的模型,市面上绝大多数数
据库管理系统都是关系型。

二、网状模型 Network Model

 背景知识:
  计算机诞生的初期,数据处理通过穿孔卡片来进行。这时的数据管理,只是对卡片进行物
 理的存储和处理,显然是极其麻烦和复杂,根本无法体现出高效性。但在1956年9月13日,
 在美国加利福尼亚San Jose的一小队IBM工程师们向世人展示了一款新产品305 RAMAC
 (Random Access MEMORY Accounting and Control 统计控制随机存取),这是世界上第一款
 电脑磁盘存储系统,是存储历史上的里程碑,真正开启了存储和 IT领域的大门,从而引发了
 数据管理的革命。(可见http://blog.csdn.net/liwei_cmg/archive/2008/04/21/2312864.aspx转载
 的《硬盘的秘密》)
  此后,出现了最早版本的数据库,即网状数据库管理系统(DBMS),由通用电气公司(General
 Electric Co.)的Charles Bachman于1961年开发成功。其IDS(Integrated Data Store,集成数
 据存储)是世界上第一个网状DBMS,也是第一个数据库管理系统(DBMS)。但是它只能运行
 于通用电气的主机上,数据库只有一个文件,所有的表必须通过手工编码生成,有着极大的
 局限性。

 描述:
 
     网状模型采用网状结构表示实体及其之间的联系。网状结构的每一个节点代表一个记录类
    型,记录类型可包含若干字段,记录之间联系用链接指针表示。
     网状模型的特征是:
  允许一个以上的节点没有父节点;
  一个节点可以有多于一个的父节点;

  由于网状模型比较复杂,一般实际的网状数据库管理系统对网状都有一些具体的限制。在
 使用网状数据库时有时候需要一些转换。
  网状模型提供了很大的灵活性,能更直接地描述现实世界,性能和效率也比较好。网状模
 型的缺点是结构复杂,用户不易掌握,记录类型联系变动后涉及链接指针的调整,扩充和维
 护都比较复杂。

 示例:

                    教师ID / 教师名称
                           |
              |--------------------------|
              |                              |
       课程ID / 课程名     班级ID / 班级名称
              |                              |          |
              |--------------------------|     学生ID / 学生姓名 / 学生性别
                           |
                       班级ID / 课程ID / 学生ID / 成绩

二、层次模型 Hierarchical Model

 背景知识:
  层次型数据库是紧随网络型而出现的。最著名最典型的层次数据库系统是IBM公司在1968
 年开发完成的IMS(Information Management System)。1966年,IBM,Rockwell和Caterpillar
 公司合作开发新型数据库,帮助美国国家航空航天局(National Aeronautics and Space
 Administration NASA)管理阿波罗计划(Apollo program)中的繁琐资料,并在1968年完成。1969
 年,该数据库作为IBM产品发布。更名为IMS(Information Management System,信息管理系
 统)。1969年,NASA成功发射了阿波罗11号实现人类首次登月之后,NASA继续在其航天飞机
 计划中使用该产品。

 描述:
 
  层次模型是数据库系统中最早使用的模型,它的数据结构类似一颗倒置的树,每个节点表
 示个记录类型,记录之间的联系是一对多的联系,基本特征是:
  一定有一个,并且只有一个位于树根的节点,称为根节点;
  一个节点下面可以没有节点,即向下没有分支,那么该节点称为叶节点;
  一个节点可以有一个或多个叶节点,前者称为父节点,后者称为子节点;
  同一父节点的子节点称为兄弟节点;
  除根节点外,其他任何节点有且只有一个父节点;

  层次模型中,每个记录类型可以包含多个字段,不同记录类型之间、同一记录类型的不同
 字段之间不能同名。如果要存取某一类型的记录,就要从根节点开始,按照树的层次逐层向
 下查找,查找路径就是存取路径。
 
  层次模型结构简单,容易实现,对于某些特定的应用系统效率很高,但如果需要动态访问
 数据(如增加或修改记录类型)时,效率并不高。另外,对于一些非层次性结构(如多对多
 联系),层次模型表达起来比较繁琐和不直观。
 
 示例:
 
       学校ID / 学校名称
              |     
              |-------------------------|
              |                             |
       教研室ID / 教研室名   班级ID / 班级名称
              |                             |
              |                             | 
        教师ID / 教师名称     学生ID / 学生姓名 / 学生性别


三、关系模型 Relational Model

 背景知识:
  网状数据库和层次数据库已经很好地解决了数据的集中和共享问题,但是在数据独立性和
 抽象级别上仍有很大欠缺。用户对这两种数据库进行存取时,仍然需要明确数据的存储结构
 指出存取路径。
  1970年,IBM San Jose实验室的高级研究员埃德加·考特(Edgar Frank "Ted" Codd)在刊
 物《Communication of the ACM》上发表了一篇名为《大型共享数据库数据的关系模型》
 (A Relational Model of Data for Large Shared Data Banks)的论文,首次明确而清晰地为数
 据库系统提出了一种崭新的模型, 即关系模型,奠定了关系模型的理论基础。这篇论文被
 普遍认为是数据库系统历史上具有划时代意义的里程碑。
  关系模型有严格的数学基础,抽象级别比较高,而且简单清晰,便于理解和使用。但是当
 时有人认为关系模型是理想化的数据模型,用来实现数据库管理系统是不现实的,尤其担心
 关系数据库的性能。关系模型不可避免地受到网状模型与层次模型支持者的抵制。为了促进
 对问题的理解,1974年ACM(Association   for   Computing   Machinery,美国计算机协会)牵
 头组织了一次研讨会,会上展开了以Edgar Frank Codd和Charles Bachman分别为首的两派
 辩论。而这次的辩论也推动了关系数据库的发展,使其最终成为现代数据库产品的主流。
  Edgar Frank Codd于1981年获得ACM的最高荣誉图灵奖,被誉为关系型数据库之父。
  1970年关系模型建立之后,IBM在San Jose实验室增加了更多人员研究关系型数据库,这
 个项目就是著名的System R。其目标是论证一个全功能关系型数据库的可行性。 1974年IBM
 研究员Don Chamberlin和Ray Boyce通过 System R项目的实践,发表了论文
 “SEQUEL:A Structured English Query Language”。论文中提出的SEQUEL 语言是一套比关
 系微积分与关系代数更适合最终用户使用的非程序化查询语言,我们现在所熟知的SQL语言就
 是基于它发展起来的。但是此时IBM的IMS层次数据库已有规模,由于公司体系庞大,又一向
 重视信誉与质量,众多原因阻止了System R投产的脚步,一直到1980年之后System R才作为
 一个产品正式推向市场。
  1973年加州大学伯克利分校的Michael Stonebraker和Eugene Wong利用System R已发布的
 信息开发数据库系统Ingres,并使用QUEL(Query Language 由Michael Stonebraker 发明)
 作为查询语言。不过QUEL与IBM的SQL并不兼容。虽然比起IBM SQL在某些方面QUEL还有
 优势,但由于学院派的Michael Stonebraker考虑会扼杀创新精神,不主张将QUEL推荐为标准,
 IBM却担心Ingres把QUEL变成标准会对自己不利,决定把自己的SQL提交给数据库标准委员
 会。System R和Ingres系统双双获得ACM的1988年“软件系统奖”。
  而1977年6月,Larry Ellison 与 Bob Miner 和 Ed Oates 在硅谷共同创办了一家名为软件开发
 实验室(Software Development Laboratories,SDL)的计算机公司,同样也利用System R
 开发的商用数据库产品。这就是后来的Oracle,Oracle成功利用了IBM关系数据库产品的空隙,
 以及IBM确立的SQL标准,发展成全球数一数二的数据库厂商。
 
 
 描述:
  关系模型是目前应用最多、也最为重要的一种数据模型。关系模型建立在严格的数学概念
 基础上,采用二维表格结构来表示实体和实体之间的联系。二维表由行和列组成。本文以教
 学为例,说明关系模型的一些常见术语:

     学生ID    学生姓名   学生性别    入学时间
  
     X001         李            男              2000.1
     X002         王            女              2000.1
  
     教师ID    教师姓名   教师专业
  
     S001         林            Java 
     S002         刘            Oralce

  关系(表):一个关系就是一张表,如上面的教师信息表和学生信息表
  元组:表的一行 为 一个元组(不包括表头)
  属性:表的一列 为 一个属性
  主码(或关键字):可以唯一确定一个元组和其他元组不同的属性组
  域:属性的取值范围
  分量:元组中的一个属性值
  关系模式:对关系的描述,一般表示为:关系名(属性1,属性2,... ...,属性n)
 
 
  关系模型中没有层次模型中的链接指针,记录之间的联系是通过不同关系中的同名属性来
 实现的。 关系模型的基本特征是:

  建立在关系数据理论之上,有可靠的数据基础;
  可以描述一对一,一对多和多对多的联系;
  表示的一致性。实体本身和实体间联系都使用关系描述;
  关系的每个分量的不可分性,也就是不允许表中表;
  
  关系模型概念清晰,结构简单,实体、实体联系和查询结果都采用关系表示,用户比较容
 易理解。另外,关系模型的存取路径对用户是透明的,程序员不用关心具体的存取过程,减
 轻了程序员的工作负担,具有较好的数据独立性和安全保密性。
  关系模型也有一些缺点,在某些实际应用中,关系模型的查询效率有时不如层次和网状模
 型。为了提高查询的效率,有时需要对查询进行一些特别的优化。

四、面向对象模型 Object Oriented Model

 背景知识:
  关系型数据库以其简单、易学和坚实的理论基础目前已取代层次型和网络型数据库,成为
 当今市场的主流。然而随着计算机应用领域的扩展和多媒体计算的普及,以二维表格见长的
 关系数据库已不能满足需求。
  关系型数据库在管理信息系统和相关领域中获得了巨大成功,因为这些领域中数据类型少,
 数据之间关系简单,很适合用表格来处理和操作。但目前计算机的应用领域在不断扩大,已从
 MIS向非MIS发展,如CAD/CAM、GJS、CIMS、CASE等。它们所涉及的数据也已从简单的
 字符、整型、浮点型数据发展到图形、图像、声音、超文本、空间几何数据等非常规数据类
 型,并且它们之间还增加了继承、包含等复杂的关系。使得关系型数据库很难处理。据统计,
 现实世界90%的数据为非常规数据,如果把它们看成一个个独立存在而又有联系的对象,使
 用面向对象的数据库技术进行管理已成为十分迫切的事情。

 描述:
  面向对象模型是采用面向对象的观点来描述现实世界中实体及其联系的模型,现实世界中
 的实体都被抽象为对象,同类对象的共同属性和方法被抽象为类。面向对象模型是一种接近
 现实世界、很自然的模型,可以定义复杂数据关系。由于具有继承特性,面向对象模型提供
 了快速创建各种变种记录类型的能力。面向对象模型的缺点是查询功能相对比较弱。
 
 面向对象模型有如下的常用术语:

  对象 
  对象是现实世界中某个实体的模型化。每个对象都有一个唯一标识符,称为对象标识
  (ObjectID)。对象还包括属性集合(描述对象的状态、组成和特征)、方法集合(描述对
  象的行为特征和实现)和消息集合(对象操作请求的传递)。
  
  类
  类是具有相同结构对象的集合。类是一个抽象的概念,对象是类的具体化,一个对象是某个
  类的实例。
  
  封装
  封装是一种面向对象的技术,通过封装可以把对象的某些实现与外界隔离,这样一方面可以
  使外部的应用简化,不用关心具体的实现;另一方面提高数据的独立性,内部的修改不会影
  响到外部的应用,提高了数据的独立性。
  
  继承
  面向对象模型的一个特色是可以实现继承。在现实世界中,有许多事物具有密切相关的层次
  关系。面向对象模型提供了建立类结构层次的功能,可以定义一个类的子类,形成树形结构。


五、标准SQL语言

 SQL(Structured Query Language)语言最早是由Boyce和Chamberlin在1974年提出,起初称
之为SEQUEL(Structured English Query Language )。设计目的是为了便于对System R数据库系
统存储数据进行操作。1986年ANSI批准SQL语言作为关系型数据库语言的标准,1987年ISO也
通过了这一标准。目前,几乎所有的关系型数据库管理系统都支持SQL语言。不幸的是,很多公
司(如IBM和Oracle)对SQL语言各自做了某些扩充,在一些具体的问题如时间格式等问题上也
并不统一,这都为SQL的推广和通用性带来一定限制。
 
 SQL语言作为一种通用的、功能强大的关系型数据库语言,可以完成数据查询、数据定义和
数据控制等功能,几乎贯穿了数据库生命周期中的全部活动。但SQL语言同时又是一种极其简单
的语言,它不同于常见的C C++等语言,采用了和英语相似的语法和一些表示操作的动词,非常
便于学习。

 SQL语言的特点有:

  语法简单,易学易用
   SQL语言类似于英语自然语言,非常简捷实用,对于初学者比较容易掌握。
  高度非过程化的语言
   SQL语言的基本思想是,首先获取用户指定约束条件的一组记录,然后对这些记录进行
   某种操作。用SQL语言,只需要输入进行操作的种类和范围,不需要关心和了解存取路
   径等具体内容,大大减轻了用户的负担,并有利于提高数据的独立性。
  面向集合的语言
   SQL语言采用的是集合操作方式,操作对象和查找结果可以是元组集合,而不仅仅是一
   个记录。同样,数据操纵的对象也可以是元组集合,这种方式充分利用了关系型数据库
   的优点,极大地提高了系统运行的效率。
  可以独立使用,也可以嵌入到宿主语言
   SQL语言既是自含式语言,又是嵌入式语言。作为前者,用户可以在数据库管理系统软
   件模块中直接使用SQL命令,修改或查询数据库;作为后者,SQL可以嵌入到高级语言
   (如C/C++)中,应用程序员和高级用户可以用SQL语言开发定制应用程序。
  功能强大
   使用SQL语言可以定义关系模式、创建数据库、插入数据、更新数据、复杂查询、维护
   数据、重构数据库、控制数据库安全等等。
  
 SQL语言功能主要包括数据定义、数据操纵、数据控制和数据查询。

 A.数据定义
 SQL语言的数据定义功能主要包括创建数据库表结构、创建视图和创建表的索引,以及删除
 已经存在的表、视图和索引等。SQL语言支持修改数据库表结构,但如果需要修改视图和索
 引的定义,一般采用删除后重新创建的办法。数据定义语句的SQL动词是CREATE,DROP
 和ALTER。

 B.数据操纵
 SQL语言的数据操纵功能主要用于创建数据库表后,输入、删除和修改表中的数据。
 数据定义语句的SQL动词是INSERT,DELETE和UPDATE。

 C.数据查询
 数据查询功能是SQL语言中最为强大的功能,用于查找并输出符合条件的数据。SQL语言的
 查询语句只使用一个SQL动词SELECT,但该SELECT语句功能很丰富,支持单表查询、模糊
 查询、多表连接查询、分组和排序、嵌套查询、集聚函数和集合查询等多种查询方式。灵活
 使用SELECT语句可以完成极其复杂的查询过程。

 D.数据控制
 SQL语言的数据控制功能包括数据库事务管理功能和数据保护功能,对数据库提供完整性约
 束控制,控制数据库的安全性;提供了多用户并发控制和恢复的功能,支持事务提交和回滚
 等。数据定义语句的SQL动词是GRANT和REVOKE。

附:常见数据库使用的SQL

 ANSI/ISO
  Standard SQL/PSM SQL/Persistent Stored Modules
 IBM
  SQL PL SQL Procedural Language (implements SQL/PSM)
 Microsoft/Sybase
  T-SQL Transact-SQL
 MySQL
  SQL/PSM SQL/Persistent Stored Module (as in ISO SQL:2003)
 Oracle
  PL/SQL Procedural Language/SQL (based on Ada)
 PostgreSQL
  PL/pgSQL Procedural Language/PostgreSQL Structured Query Language (based on Oracle PL/SQL)
  PL/PSM Procedural Language/Persistent Stored Modules (implements SQL/PSM)
 Teradata
  Teradata-SQL

附:数据库方面大事记

    1951:Univac系统使用磁带和穿孔卡片作为数据存储。
    1956:IBM公司在其Model 305 RAMAC中第一次引入了磁盘驱动器 
    1961:通用电气(GE)公司的Charles Bachman开发了第一个数据库管理系统IDS
    1969:E.F. Codd发明了关系数据库。
    1973:由John J.Cullinane领导Cullinane公司开发了IDMS,一个针对IBM主机的基于网络模型的数据库。
    1976: Honeywell公司推出了Multics Relational Data Store,第一个商用关系数据库产品。
    1979: Oracle公司引入了第一个商用SQL关系数据库管理系统。
    1983: IBM 推出了DB2数据库产品。
    1985: 为Procter & Gamble系统设计的第一个商务智能系统产生。
    1991: W.H.“Bill” Inmon发表了”构建数据仓库”。