我学数据库(1)--数据库发展的那点事
自己在学习MSSQL搜集资料的同时,注意做了点记录和思考,并将自己的学习心得放在在里面,所以不要看着标题厌烦就不读哦,里面的内容还是挺好的,在以后的随笔当中我尽量不让文字太生硬,毕竟我也不喜欢生硬的动西,快乐学习嘛,这也是我在参加工作后一直坚持的,欢迎大家过来看看,并在以后时间里给予多多的支持。
任何东西都是从无到有的,这是大自然的定律。任何东西的存在与繁荣都是基于它满足了某种需求这个条件,也就是我们说的存在即合理。说数据库熟悉是因为现在它的普遍性,说它陌生是因为它的专业性,而且我也不是专门研究数据库知识的。那它是怎样从无到有?又是怎样从有到优,逐渐满足多领域业务需要的呢?我带着这个疑问开始去搜集了资料,自己学习整理了一下,在这里分享给大家。
数据库的历史可以追溯到60年前,那时的数据管理非常简单,基本上靠人工还有通过大量的简单机器运行数百万穿孔卡片来进行数据的处理,其运行结果在纸上打印出来或者制成新的穿孔卡片,而数据管理就是对所有这些穿孔卡片进行物理的储存和处理,属于顺序存储数据。1 9 5 1 年,雷明顿兰德公司(Remington Rand Inc)的一种叫做Univac I 的计算机推出了一种一秒钟可以输入数百条记录的磁带驱动器,于是一场关于数据管理的革命开始了。1956 年IBM生产出第一个磁盘驱动器— the Model 305 RAMAC,这真是成了开天始祖啦。这也奠定了IBM之后在此领域的领先位置。此驱动器有50 个盘片,每个盘片直径是2 英尺,可以储存5MB的数据,5MB啊,现在看来还不到一首歌的容量,可在当时那就是一个巨大的进步啊。使用磁盘最大的好处是可以随机地存取数据,而穿孔卡片和磁带只能顺序存取数据。你看人家IBM,至1911建立都100多年了,经久不衰,很厉害的一个公司。(注明:1英尺=12英寸=0.3048 米,另外我找了一下这个公司的资料:雷明顿兰德公司Remington Rand,1927年-1986年,是美国早期的一家电脑制造商,这家公司最为人熟知的即是它为UNIVAC I电脑的原造厂,而今它已成为优利系统Unisys公司的一部份。有一阵子"univac"一字几乎是"computer"的代名词。)
那时候,也就是50年代这10年,数据管理技术已经经历了两个阶段:人工管理阶段和文件系统阶段。人工管理阶段数据不会被长期保存,没有特定的系统软件负责数据的管理,当然数据也不能很好的被共享而且数据之间独立性不强。文件系统阶段,数据不仅可以长期保存而且有专门的文件系统管理数据,但是共享性差冗余度大以及数据独立性差的缺点仍没能得到解决。(注明:数据独立性是数据库系统追求的一个重要目标,包括物理独立性和逻辑独立性,它要求数据在磁盘上怎样存储由DBMS管理,用户程序不需要了解,应用程序要处理的只是数据的逻辑结构,这样当数据的物理存储改变了,应用程序不用改变;还要求当数据的逻辑结构改变时,用户程序也可以不变。)
至1946年第一台计算机出现之后过去了15年,也就是60年代,计算机开始广泛地应用于数据管理,对数据的共享提出了越来越高的要求,数据的共享性差、冗余度大以及独立性差的问题亟待解决。在这种情况下,数据库管理系统应运而生。要统一管理和共享数据不是一件简单的事,构建数据模型是重中之重,这是数据库管理系统的核心和基础。对于数据模型来说,如果是计算机专业和软件专业的并不陌生。数据模型是数据特征的抽象,是数据库系统中用以提供信息表示和操作手段的形式构架,其实这句话的意思就是如何表示去表示数据和操作数据,还有如何表示数据之间的关系,其实这句话表明了数据库数据模型的组成要素:数据的结构部分、数据的操作部分和数据的约束条件。数据结构就是主要描述数据的类型、内容、性质以及数据间的联系等。数据结构是数据模型的基础,数据操作和约束都建立在数据结构上。不同的数据结构具有不同的操作和约束。数据操作主要描述在相应的数据结构上的操作类型和操作方式。数据约束主要描述数据结构内数据间的语法、词义联系、他们之间的制约和依存关系,以及数据动态变化的规则,以保证数据的正确、有效和相容。(注明:是不是看这些东西有点摸不着头脑啊?没办法,忍一忍吧,下面还有呢。数据库管理系统打起来挺麻烦的,以后再出现就以DBMS代替。)
数据模型按不同的应用层次分成三种类型:概念数据模型、逻辑数据模型、物理数据模型。这都是些比较难懂的概念,而且都是很专业的解释,没办法,理论就是这样字,因为空洞所以才难懂。概念数据模型简称概念模型,是面向数据库用户的现实世界的模型,主要用来描述世界的概念化结构,它使数据库的设计人员在设计的初始阶段,摆脱计算机系统及DBMS的具体技术问题,集中精力分析数据以及数据之间的联系等,与具体的DBMS无关。概念数据模型必须换成逻辑数据模型,才能在DBMS中实现。逻辑数据模型简称逻辑模型,这是用户从数据库所看到的模型,是具体的DBMS所支持的数据模型,如网状数据模型、层次数据模型等等。此模型既要面向用户,又要面向系统,主要用于DBMS的实现。物理数据模型简称物理模型,是面向计算机物理表示的模型,描述了数据在储存介质上的组织结构,它不但与具体的DBMS有关,而且还与操作系统和硬件有关。每一种逻辑数据模型在实现时都有起对应的物理数据模型。DBMS为了保证其独立性与可移植性,大部分物理数据模型的实现工作由系统自动完成。各种DBMS 软件都是基于某种数据模型的。所以通常也按照数据模型的特点将传统数据库系统分成网状数据库、层次数据库和关系数据库三类。
接下来就介绍一些早期的DBMS产品吧。最早出现的是网状 DBMS,是美国通用电气公司Bachman等人在1961年开发成功的IDS(Integrated Data Store)。1961年通用电气公司的Charles Bachman 成功地开发出世界上第一个网状DBMS也是第一个数据库管理系统--集成数据存储(Integrated Data Store IDS),奠定了网状数据库的基础,并在当时得到了广泛的发行和应用。IDS 具有数据模式和日志的特征。但它只能在GE主机上运行,并且数据库只有一个文件,数据库所有的表必须通过手工编码来生成。之后通用电气公司一个客户—BF Goodrich Chemical 公司最终不得不重写了整个系统,并将重写后的系统命名为集成数据管理系IDMS。网状数据库模型对于层次和非层次结构的事物都能比较自然的模拟,在关系数据库出现之前网状DBMS要比层次DBMS用得普遍。在数据库发展史上,网状数据库占有重要地位。(注明:GE主机,即通用电气主机)
层次型DBMS是紧随网状型数据库而出现的。最著名最典型的层次数据库系统是IBM 公司在1968 年开发的IMS(Information Management System),一种适合其主机的层次数据库。这是IBM公司研制的最早的大型数据库系统程序产品。从60 年代末产生起,如今已经发展到IMSV6,提供群集、N路数据共享、消息队列共享等先进特性的支持。这个具有40 年历史的数据库产品在如今的WWW应用连接、商务智能应用中扮演着新的角色。1973 年Cullinane 公司(Cullinet软件公司先驱),开始出售Goodrich 公司的IDMS 改进版本,并且逐渐成为当时世界上最大的软件公司。(注明:或许IMS已经更新到更高版本了,最新版本不再是V6了。我试着在网上查询最新消息,但是没能找到。)
网状数据库和层次数据库已经很好地解决了数据的集中和共享问题,但是在数据独立性和抽象级别上仍有很大欠缺。用户在对这两种数据库进行存取时,仍然需要明确数据的存储结构,指出存取路径。而后来出现的关系数据库较好地解决了这些问题。1970年,IBM的研究员E.F.Codd博士在刊物《Communication of the ACM》上发表了一篇名为“A Relational Model of Data for Large Shared Data Banks”的论文,提出了关系模型的概念,奠定了关系模型的理论基础,为了表彰他的杰出贡献,1981年授予他ACM图灵奖。尽管之前在1968年Childs已经提出了面向集合的模型,然而这篇论文被普遍认为是数据库系统历史上具有划时代意义的里程碑。Codd的心愿是为数据库建立一个优美的数据模型。后来Codd又陆续发表多篇文章,论述了范式理论和衡量关系系统的12条标准,用数学理论奠定了关系数据库的基础。关系模型有严格的数学基础,抽象级别比较高,而且简单清晰,便于理解和使用。但是当时也有人认为关系模型是理想化的数据模型,用来实现 DBMS是不现实的,尤其担心关系数据库的性能难以接受,更有人视其为当时正在进行中的网状数据库规范化工作的严重威胁。为了促进对问题的理解,1974 年ACM牵头组织了一次研讨会,会上开展了一场分别以Codd和Bachman为首的支持和反对关系数据库两派之间的辩论。这次著名的辩论推动了关系数据库的发展,使其最终成为现代数据库产品的主流。(注明:ACM是美国计算机协会,“A Relational Model of Data for Large Shared Data Banks”这篇论文网上的资源很多,有兴趣的同志可以下载下来看一看。1974年的这场辩论,我试着去找更多的精彩内容,但似乎资料很少,没能找到,我怎么发现我好奇的好多东西都找不到呢?人品问题?不得而知……)
1970年关系模型建立之后,IBM公司在San Jose实验室增加了更多的研究人员研究这个项目,这个项目就是著名的System R。其目标是论证一个全功能关系DBMS的可行性。该项目结束于1979年,完成了第一个实现SQL的 DBMS。然而IBM对IMS的承诺阻止了System R的投产,一直到1980年System R才作为一个产品正式推向市场。IBM产品化步伐缓慢的三个原因:IBM重视信誉,重视质量,尽量减少故障;IBM是个大公司,官僚体系庞大;IBM内部已经有层次数据库产品,相关人员不积极,甚至反对。然而同时,1973年加州大学伯克利分校的Michael Stonebreaker和Eugene Wong利用System R已发布的信息开始开发自己的关系数据库系统Ingres。他们开发的Ingres项目最后由Oracle公司、Ingres公司以及硅谷的其他厂商所商品化。后来,System R和Ingres系统双双获得ACM的1988年“软件系统奖”。(注明:从IBM产品步伐缓慢的原因来看,任何好产品在出生之前都是经过了死的洗礼啊,关于产品管理貌似涉及企业管理的知识,就不是很懂了啊)
1976年霍尼韦尔公司(Honeywell)开发了第一个商用关系数据库系统—Multics Relational Data Store。关系型数据库系统以关系代数为坚实的理论基础,经过几十年的发展和实际应用,技术越来越成熟和完善。其代表产品有Oracle、IBM公司的 DB2、微软公司的MS SQL Server以及Informix等等。
1974 年,IBM的Ray Boyce和Don Chamberlin将Codd关系数据库的12条准则的数学定义以简单的关键字语法表现出来,里程碑式地提出了SQL(Structured Query Language)语言。SQL语言的功能包括查询、操纵、定义和控制,是一个综合的、通用的关系数据库语言,同时又是一种高度非过程化的语言,只要求用户指出做什么而不需要指出怎么做。SQL集成实现了数据库生命周期中的全部操作。SQL提供了与关系数据库进行交互的方法,它可以与标准的编程语言一起工作。自产生之日起,SQL语言便成了检验关系数据库的试金石,而SQL语言标准的每一次变更都指导着关系数据库产品的发展方向。然而,直到二十世纪七十年代中期,关系理论才通过SQL在商业数据库Oracle和DB2中使用。
1986年,ANSI把SQL作为关系数据库语言的美国标准,同年公布了标准SQL文本。目前SQL标准有3个版本。基本SQL定义是ANSIX3135-89,“Database Language - SQL with Integrity Enhancement”[ANS89],一般叫做SQL-89。SQL-89定义了模式定义、数据操作和事务处理。SQL-89和随后的ANSIX3168-1989,“Database Language-Embedded SQL”构成了第一代SQL标准。ANSIX3135-1992[ANS92]描述了一种增强功能的SQL,现在叫做SQL-92标准。SQL-92包括模式操作,动态创建和SQL语句动态执行、网络环境支持等增强特性。在完成SQL-92标准后,ANSI和ISO即开始合作开发SQL3标准。SQL3的主要特点在于抽象数据类型的支持,为新一代对象关系数据库提供了标准。
1976 年IBM E.F.Codd发表了一篇里程碑的论文“R系统:数据库关系理论”,介绍了关系数据库理论和查询语言SQL。Oracle的创始人Ellison非常仔细地阅读了这篇文章,被其内容震惊,这是第一次有人用全面一致的方案管理数据信息。作者E.F.Codd十年前就发表了关系数据库理论,并在IBM 研究机构开发原型,这个项目就是R系统,存取数据表的语言就是SQL。Ellison看完后,敏锐意识到在这个研究基础上可以开发商用软件系统。而当时大多数人认为关系数据库不会有商业价值。Ellison认为这是他们的机会:他们决定开发通用商用数据库系统Oracle,这个名字来源于他们曾给中央情报局做过的项目名。几个月后,他们就开发了Oracle 1.0 。但这只不过是个玩具,除了完成简单关系查询不能做任何事情,他们花相当长的时间才使Oracle变得可用,维持公司运转主要靠承接一些数据库管理项目和做顾问咨询工作。而IBM却没有计划开发,为什么放弃了这个价值上百亿的产品,原因有很多:IBM的研究人员大多是学术出身,他们最感兴趣的是理论,而非推向市场的产品,从学术上看,研究成果应公开,发表论文和演讲能使他们成名,为什么不呢?还有一个很主要的原因就是IBM 当时有一个销售得还不错的层次数据库产品IMS。(注明:从这段我得到了一个消息就是:一个无敌的软件公司必须懂得软硬兼施,要有好的理论创新也要有过硬的技术支持。)
直到1985年IBM才发布了关系数据库DB2 , Ellison那时已经成了千万富翁。Ellison曾将“IBM 选择Microsoft 的MS-DOS作为IBM-PC机的操作系统”比为:“世界企业经营历史上最严重的错误,价值超过了上千亿美元。”IBM 发表R系统论文,而且没有很快推出关系数据库产品的错误可能仅仅次之。Oracle 的市值在1996年就达到了280亿美元。
随着信息技术和市场的发展,人们发现关系型数据库系统虽然技术很成熟,但其局限性也是显而易见的:它能很好地处理所谓的“表格型数据”,却对技术界出现的越来越多的复杂类型的数据无能为力。九十年代以后,技术界一直在研究和寻求新型数据库系统。但在什么是新型数据库系统的发展方向的问题上,产业界一度是相当困惑的。受当时技术风潮的影响,在相当一段时间内,人们把大量的精力花在研究“面向对象的数据库系统(object oriented database)”或简称“OO数据库系统”。值得一提的是,美国Stonebraker教授提出的面向对象的关系型数据库理论曾一度受到产业界的青睐。而Stonebraker本人也在当时被Informix花大价钱聘为技术总负责人。然而,数年的发展表明,面向对象的关系型数据库系统产品的市场发展的情况并不理想。理论上的完美性并没有带来市场的热烈反应。其不成功的主要原因在于,这种数据库产品的主要设计思想是企图用新型数据库系统来取代现有的数据库系统。这对许多已经运用数据库系统多年并积累了大量工作数据的客户,尤其是大客户来说,是无法承受新旧数据间的转换而带来的巨大工作量及巨额开支的。另外,面向对象的关系型数据库系统使查询语言变得极其复杂,从而使得无论是数据库的开发商家还是应用客户都视其复杂的应用技术为畏途。二十世纪六十年代后期出现了一种新型数据库软件:决定支持系统(DSS),其目的是让管理者在决策过程中更有效地利用数据信息。于是在1970年, 第一个联机分析处理工具—Express诞生了。其他决策支持系统紧随其后,许多是由公司的IT部门开发出来的。1985年,第一个商务智能系统(business intelligence)由Metaphor计算机系统有限公司为Procter & Gamble公司开发出来,主要是用来连接销售信息和零售的扫描仪数据。同年, Pilot 软件公司开始出售第一个商用客户/服务器执行信息系统—Command Center。同样在这年,加州大学伯克利分校Ingres项目演变成Postgres,其目标是开发出一个面向对象的数据库。此后一年, Graphed公司开发了第一个商用的对象数据库系统—Gbase。1988年,IBM公司的研究者Barry Devlin和Paul Murphy发明了一个新的术语—信息仓库,之后,IT的厂商开始构建实验性的数据仓库。1991年,W.H. Bill Inmon出版了一本“如何构建数据仓库”的书,使得数据仓库真正开始应用。
随着基于PC的客户/服务器计算模式和企业软件包的广泛采用,数据管理的变革基本完成。数据管理技术不再仅仅是存储和管理数据,现在的数据库技术已经发展到了一个全新的阶段,即数据采集与应用的多样化。根据对数据库发展的技术趋势不难看出,整个数据库发展呈现出了以下几个特征:支持XML数据格式、DBMS的自适应管理、微小型数据库技术、信息集成、商业智能成重点和提供SOA架构支持。以上是数据库研究领域中的几个主流发展趋势,进来在数据库发展过程中也不难发现以下几点重要的发展潮流:互联网领域应用成为主流、“云计算”正步入实质性阶段和数据仓库领域大有可为。(注明:面向服务的体系结构(service-oriented architecture,SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。)
但就当前主流数据库发展来看,关系数据库技术仍然是主流,至于那些新的技术限于个人能力,还是放在以后再学习吧。所以呢以后努力的方向就是先把主流的东西学好,现在主流的数据库产品主要有以下几个:微软的sql server 和 access、瑞典的MySQL AB公司的mysql、IBM公司的db2、美国Sybase公司的Sybase、IBM公司的informix、美国oracle公司的oracle。鉴于学习资源的多少、个人爱好以及工作需要等方面的原因,我选择了微软的sqlserver进行学习,就这样我开启了数据库的学习之旅。