《MySQL高效编程》一一1.2 数据库的种类

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

本节书摘来自异步社区出版社《MySQL高效编程》一书中的第1章,第1.2节,作者: 王志刚 , 江友华,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.2 数据库的种类

MySQL高效编程
通过上述的介绍,我想读者应该对数据库有了一个大致的认识了。数据库从数据的保存方式以及构造上可以分以下几种类型。

1.2.1 阶层型/网络型数据库

首先介绍在大型机系统(使用于银行、证券等行业的大型系统)中经常使用的阶层型数据库及网络型数据库。

阶层型数据库顾名思义,就是将数据以树型结构保存的数据库。对特定的数据来说拥有多个子数据,而子数据库不可能拥有多个父数据。因为这种数据库保证对任意数据唯一的连接路径,能够以简洁的代码实现数据的读取,是这种数据库的最大优点。

但是相反,如果父子数据的关系不总是[1:n]时,就会出现无用数据大量增多的现象。再看一下图1-2中左侧的企业内组织图,就会很容易明白上述问题所在。在组织图中,不能保证一个员工只属于一个部门(也就是会出现一个员工兼任几个职位的情况)。这样同一个员工会在组织图的多个节点出现,这就是所谓的无用数据,在专业上称为数据冗余。

image

为解决这个问题,出现了网络型数据库。在网络型数据库中,不仅父数据有多个子数据,子数据也会有多个父数据,这样阶层型数据库中的冗余问题就不存在了。

但是,这样的网络型数据库也有几个缺点。用户在连接数据库并使用数据库中的数据之前,必须要了解数据库中数据的结构。也就是说,在创建应用程序时,必须严格按照数据的结构来进行代码的编写。当然,数据结构发生变化时,对应的应用程序也必须修改。

1.2.2 卡片型数据库

卡片型数据库就是将一条数据作为一枚卡片来处理的数据库。但是,卡片型数据库与其他的如网络型数据库或关系数据库不同之处在于,它不是一个反映数据的概念分类(也就是说数据并不是真的以“卡片”形式存在的),而仅仅是拥有“数据看起来像卡片”的界面,或者说以卡片的形式来呈现数据,是从数据显示形式来命名的,如图1-3所示。

例如,像Excel或Access这样的产品,数据可以以表单(Form,表单是一个包含一个或多个数据元素的区域)的形式呈现,如图1-4所示,从这个意义上讲也可以称为卡片型数据库,但是,现在以表单的形式呈现数据的功能在很多应用软件中都实现了,所以,以外观特征来分类数据库就显得不太准确了,卡片型数据库这种分类现在已很少使用了。

image

image

1.2.3 关系型数据库

现在,只要是提到数据库,一般都会指的是关系型数据库(Relational Database,RDB)。对于RDB来说,关联的一系列数据以表的形式保存,就如由Excel那样的软件创建的二元表格的形式,表内的各个数据项目被称为域(field)或列(column),一组数据被称为记录(record),如图1-5所示。在RDB中,数据库就是表以及操作数据库用的对象集合体,而表是记录/域的集合体。

image

另外,在RDB中,标识表内记录唯一性的域或域群被称为主键,与主键关联用的外部表中的参照键被称为外键。如上述定义所示,主键在所在的表中必须保持唯一性,而外键的域中必须保存与主键相符的数据。主键和外键的关系就是此类数据库被称为关系型数据库的原因所在。

下面结合一个实际的例子来进一步理解关系型数据库。如图1-6所示,首先请注意在订单表中有用户ID这样一个项目,光看那些以字母数字形式出现的用户ID是不能知道任何信息的,这里用户ID是订单表的外键,再查看以用户ID作为主键的客户信息表,你就可以查看出这些字母数据所代表的具体客户信息了。

image

同属订单信息的订单详细表也是如此,光看订单详细表中的订单ID以及产品ID那些生硬的字母是了解不到什么具体信息的,只有通过外键连接,查看产品表与订单详细表,你才可以了解到进一步的具体信息。

上述就是关系型数据库的最大特征,信息并不是放在一个表中,而是为了将冗余数据尽量减少,将数据放在不同的表,这些表通过“关系”(主键和外键)联系在一起。表之间通过不同的组合,可以在用户的面前呈现不同的形式。

表1-1列出了目前比较专业的几种关系型数据库产品。对于关系型数据库产品来讲,大家肯定知道有些是公开源码的免费产品,有些是商用的大型数据库产品,有些是以企业应用为主的产品,也有些是以个人应用为前提的产品。产品可选择的范围比较广,也可以说是关系型数据库的一个特征。
image

1.2.4 面向对象型数据库

虽然关系型数据库普及率这么高,但它们也存在着一些问题。目前在构建应用程序时普遍采用Java、C++、C#等面向对象语言,这里我们首先应该意识到表形式的数据是与对象不同的。面向对象语言与RDB结合时,首先要面对就是这个数据构造问题。应用程序开发人员首先要从RDB中取出表形式的数据,然后将其转换为对象形式的数据,通常称为匹配(mapping)。这个匹配的过程看似单纯,但是造成开发过程繁琐、生产效率低下的原因之一。这个RDB与对象间的鸿沟(gap)被称为阻抗(impedance mismatch),图1-7所示说明了什么是阻抗。

image

作为解决阻抗的方法,尽管有如O/R(Object/Relational Mapping,就是使对象与表之间的变换自动化的技术)匹配这样的技术,随着类似“如果本来就没有匹配这个过程,就没有变换”这样的想法出现,面向对象型数据库(OODB,Object Oriented DataBase)技术应运而生。

面向对象型数据库,顾名思义在数据库中直接以对象的形式保存数据。对面向对象型数据库来说,因为从数据库中取得的数据就是能直接在应用程序中使用的对象,所以编写代码将变得简单。另外,彻底省略了数据变换这个步骤,所以也改善了处理速度。

OODB中代表性的产品有Cache(http://www.intersystems.com/cache)与ObjectStore(http://web.progress.com/en/objectstore/)。

1.2.5 XML型数据库

现在,在Internet上进行数据交换时,经常使用XML(eXtensible Markup Language)。在发布最新博客等信息时使用的RSS(RDF Site Summary),就是一种以XML为基础的技术。另外,在微软公司的Office 2007中已经支持以XML形式保存文件了。可以说现在使用XML格式的文档已经很常见了。

以XML的形式保存数据的数据库,就被称为XML型数据库(下面称之为NXDB,Native XML DataBase,直译为自然的XML数据库)。NXDB有个基本优点就是不用区分数据交换形式与数据保存形式了,当然它并不只有这些优点。

在关系型数据库中,保存具体数据前,首先必须对保存数据用的表进行严格的设计(后面的章节将会详细介绍具体的设计方法)。总之,数据项目以及数据类型必须事先决定下来,而且当数据结构改变时,首先要修改表的设计。

但是,对于NXDB来说,不用进行这样的表设计。什么样的数据都能保存进去,这就是使用NXDB好处。没有严密的用于放置数据的类似抽屉样的东西。当结构发生改变时,修改起来很方便,只是在既有的数据中添加“新枝”,即添上新项目就行了,如图1-8所示。
image

NXDB中代表性的产品有NeoCoreXMS(http://www.cybertech-cebu.com/product/neocore/)、CyberLuxeon(http://www.cybertech-cebu.com/product/luxeon/)、EsTerra XML Storage Server(http://www.mediafusion.co.jp/ )。

另外,目前在SQL Server、Oracle、DB2等主要的关系型数据库产品中也纷纷追加了对XML的支持。数据大部分以表的形式保存,如果其中一部分数据想以XML的形式保存时,采用这些支持XML的数据库产品,就能更方便地将数据导入XML文件了。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7天前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
27 3
|
7天前
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
31 3
|
7天前
|
SQL 关系型数据库 MySQL
数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog
《数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog》介绍了如何利用MySQL的二进制日志(Binlog)恢复误删除的数据。主要内容包括: 1. **启用二进制日志**:在`my.cnf`中配置`log-bin`并重启MySQL服务。 2. **查看二进制日志文件**:使用`SHOW VARIABLES LIKE 'log_%';`和`SHOW MASTER STATUS;`命令获取当前日志文件及位置。 3. **创建数据备份**:确保在恢复前已有备份,以防意外。 4. **导出二进制日志为SQL语句**:使用`mysqlbinlog`
36 2
|
21天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
148 15
|
14天前
|
SQL 关系型数据库 MySQL
数据库数据恢复—Mysql数据库表记录丢失的数据恢复方案
Mysql数据库故障: Mysql数据库表记录丢失。 Mysql数据库故障表现: 1、Mysql数据库表中无任何数据或只有部分数据。 2、客户端无法查询到完整的信息。
|
21天前
|
关系型数据库 MySQL 数据库
数据库数据恢复—MYSQL数据库文件损坏的数据恢复案例
mysql数据库文件ibdata1、MYI、MYD损坏。 故障表现:1、数据库无法进行查询等操作;2、使用mysqlcheck和myisamchk无法修复数据库。
|
25天前
|
SQL 关系型数据库 MySQL
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。
|
SQL Java 数据库连接
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
196 0
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
|
SQL 关系型数据库 MySQL
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
147 0
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
|
存储 SQL 关系型数据库
MySQL---数据库从入门走向大神系列(五)-存储过程
MySQL---数据库从入门走向大神系列(五)-存储过程
145 0
MySQL---数据库从入门走向大神系列(五)-存储过程