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

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

本节书摘来自异步社区出版社《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文件了。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
15天前
|
SQL 数据可视化 关系型数据库
轻松入门MySQL:深入探究MySQL的ER模型,数据库设计的利器与挑战(22)
轻松入门MySQL:深入探究MySQL的ER模型,数据库设计的利器与挑战(22)
|
15天前
|
存储 关系型数据库 MySQL
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
|
11天前
|
存储 关系型数据库 MySQL
MySQL基础入门:数据库操作全攻略
MySQL基础入门:数据库操作全攻略
44 0
|
11天前
|
关系型数据库 MySQL 数据库
卸载云服务器上的 MySQL 数据库
卸载云服务器上的 MySQL 数据库
30 0
|
1天前
|
SQL 关系型数据库 MySQL
MySQL环境搭建——“MySQL数据库”
MySQL环境搭建——“MySQL数据库”
|
1天前
|
SQL NoSQL 关系型数据库
初识MySQL数据库——“MySQL数据库”
初识MySQL数据库——“MySQL数据库”
|
4天前
|
关系型数据库 MySQL 数据库
数据库基础(mysql)
数据库基础(mysql)
|
4天前
|
SQL 关系型数据库 数据库
【后端面经】【数据库与MySQL】SQL优化:如何发现SQL中的问题?
【4月更文挑战第12天】数据库优化涉及硬件升级、操作系统调整、服务器/引擎优化和SQL优化。SQL优化目标是减少磁盘IO和内存/CPU消耗。`EXPLAIN`命令用于检查SQL执行计划,关注`type`、`possible_keys`、`key`、`rows`和`filtered`字段。设计索引时考虑外键、频繁出现在`where`、`order by`和关联查询中的列,以及区分度高的列。大数据表改结构需谨慎,可能需要停机、低峰期变更或新建表。面试中应准备SQL优化案例,如覆盖索引、优化`order by`、`count`和索引提示。优化分页查询时避免大偏移量,可利用上一批的最大ID进行限制。
29 3
|
5天前
|
存储 关系型数据库 MySQL
【后端面经】【数据库与MySQL】为什么MySQL用B+树而不用B树?-02
【4月更文挑战第11天】数据库索引使用规则:`AND`用`OR`不用,正用反不用,范围中断。索引带来空间和内存代价,包括额外磁盘空间、内存占用和数据修改时的维护成本。面试中可能涉及B+树、聚簇索引、覆盖索引等知识点。MySQL采用B+树,因其利于范围查询和内存效率。数据库不使用索引可能因`!=`、`LIKE`、字段区分度低、特殊表达式或全表扫描更快。索引与NULL值处理在不同数据库中有差异,MySQL允许NULL在索引中的使用。
10 3
|
6天前
|
关系型数据库 MySQL 数据库连接
Django(四):Django项目部署数据库及服务器配置详解(MySQL)
Django(四):Django项目部署数据库及服务器配置详解(MySQL)
29 11