《Expert MySQL》翻译——chapter2.解剖数据库系统(2)
上一篇文章翻译到使用对象-关系型数据库来支撑面向对象应用会遇到的一些问题,这一篇继续翻译。
续:
虽然前面讲到的问题都蛮严重的,但是通过在应用与数据库之间增加一层面向对象层来作为媒介互相交流,这些问题还是能够缓解的。这个面向对象层可以将对象转化(或者持久化)成数据存储。只不过这种做法使得你用面向对象的办法去访问数据,这与对象-关系型数据库的思想相违背。它们本该是要通过对象-关系型数据库对查询语句的扩展来获得和检索数据对象的。
尽管对象-关系型数据库跟面向对象型数据库很类似,但是它们在设计时候所采用的思想是很不同的。面向对象数据库的初衷是想通过给对象增加函数或者是提供一个平台,来让对象实现数据库的一些功能,然而对象-关系型数据库是想通过传统的查询语句和扩展,使得富数据的多种类型能够添加进来。面向对象数据库是想实现与面向对象程序的无缝集成。而对象-关系型数据库并不会去做这种层次的整合,它反而经常需要通过面向对象层将对象转化成对象-关系型乃至是关系型数据库能够理解的信息。类似的,面向对象数据库的受众是跟它一样采用面向对象视角的上层应用。对象-关系型数据库是给大型数据做了一种优化,同时也是一个能够支持大数据的基于对象的系统。近来,面向对象数据库的查询语言机制更加关注如何使用面向对象的查询语言来对一个对象进行操作,而对象-关系型数据库的查询机制则是在传统查询语言的基础上通过扩展,来加快检索大量数据。真正的面向对象数据库有更加优秀的查询机制,它们采用对象描述语言(Object Description Language,ODL)和对象查询语言(Object Query Language, OQL)。对象-关系型数据库跟他们不一样,对象-关系型数据库使用的查询机制只是在传统查询语言上的一种扩展。
ERSI的GIS产品套件里面有一个叫Geodatabase(是geographic database的简化描述)的玩意儿,它能够存储和管理地理数据元素。Geodatabase是一个支持特殊数据的对象-关系型数据库,它是对象-关系型数据库支持特殊数据存储的一个典型例子。
NOTE:
并不是所有特殊数据的存储都需要通过面向对象数据库或者对象-关系型数据库来实现。仅仅只是ESRI将Geodatabase作为对象-关系型数据库来实现而已。更重要的是,GIS数据也可以存储在扩展之后支持存储特殊数据的关系型数据库里。呔!MySQL就这么做了,你看MySQL AB就在关系型数据库的基础上添加了针对特殊数据的支持。
关系型数据库
关系型数据库系统是E.F.Codd在1970年基于数据的关系模型提出的存储数据和提供检索服务的数据库系统。对于结构化的数据来说,这是一种标准存储机制。C.J.Date在《The Database Relational Model: A Retrospective Review and Analysis》这篇论文中对Codd的关系模型做了一个提炼。《The Third Manifesto》对这个理论的进化和实践做了详细的记录。
基于关系的模型是数据库存储最符合直觉的概念。它也能通过“查询语言”这种机制很方便地对数据进行增删改查。由于关系模型的系统理论完善、数学根基扎实和结构简单的优点,很多第三方都实现了这种关系模型。最普遍使用的查询机制就是类似于自然语言的结构化查询语言(Structured Query Language,SQL)。尽管SQL并不包含在关系模型中,SQL却是关系型数据库在实际应用中不可或缺的一部分。
数据在实体中作为相互关联的几条信息(属性)而存在。这些属性的值的集合被组织成所谓的元组(有时候也叫记录)。然后一个表就专门存储这些拥有相同属性的元组。表和表之间可以基于元组、元组的属性、域而建立关系。
元组与记录有什么区别?
有种错误的认识认为记录是元组的集合。它们其中一个重要的区别就是,元组是一系列有序的元素组成的集合,而记录只是相关联的元素组成的集合,它们不一定有序。但是,在记录的每一个元素中,顺序是很重要的。在SQL查询的结果中可能返回的都是记录,但是在关系模型的理论中,结果应该都是元组。很多文献混用了这些术语,疑惑了不少人。
很多查询语言都选择使用SQL作为其实现。SQL在80年代被提议作为标准,现在它已经成为了业界标准。不幸的是,很多人认为SQL是基于关系理论的,因此SQL就有一个完善的理论基础。这个错误认识可能来自于业界带来的影响。差不多所有的关系型数据库都支持SQL。这种应用的广泛性导致了对SQL一些缺陷的忽视,它们包括如下几点:
1.SQL不支持关系模型理论中的域(domain)。
2.在SQL中,表可以有重复的行。
3.查询结果(表)会包含未命名的列和重复的列。
4.数据库系统中对“空”的实现被证明是不一致,不完整的。因此,许多实际上有些结果数据库系统能够返回,但是SQL基本上不返回这些数据。这种现象会跟对“空”操作的失误错误地联系在一起。
在关系型数据库中使用的技术有很多种。有些系统设计时就是为了要优化部分关系模型,或者是优化数据模型的应用。关系型数据库的应用面涵盖普通的数据存储和检索乃至复杂的由茫茫多数据,处理程序,工作流所构成的应用套件。这可以简单到像储存你的CD或者DVD集,也可以复杂到酒店预订系统,甚至更复杂一点,比如说用来管理网络数据的分布式数据系统。正像我在第一章提到的那样,很多网络应用(尤其是那些web2.0的网络应用,接下来会讲到。)采用LAMP架构来实现。在这儿MySQL作为数据库管理系统来储存和管理数据。
WEB2.0:
web2.0是最近的一个流行语。它表达了互联网的巨大变化。如今的互联网能够让人们更加方便地在线分享和收集数据。web2.0应用作为一个新的应用也扩展了全球电子社区对应用的概念。比如说照片分享,博客,信息和视频服务等。随这些应用而来的是与过去几十年的互联网巨大的改变,比如LAMP。大多数应用都采用开源软件的解决方案。毫无疑问,web2.0对互联网的影响是巨大的。
关系型数据库系统提供了最强壮的数据独立和数据抽象。基于关系模型的概念,关系型数据库提供一个真正标准的数据存储和检索机制。这些系统当然都很复杂,需要很全面的思考以及专业的技巧才能构建和修改。
我将会向你展示一个典型的关系型数据库系统的架构以及这个架构的每一个组件。接下来,我要展示的就是关系型数据库的一个特别案例。(特喵的干货MySQL终于要来了)
(未完待续)