数据库设计教程
本文由 Erin Doherty 撰写,最初发表于Educative。
数据库无处不在——它们是我们日常使用的技术的基础。从电信系统、银行系统、视频游戏,到几乎所有需要维护一定量持久数据的软件系统,数据库都是至关重要的组成部分。
在本教程中,我们将介绍以下内容:
什么是数据库?
数据库是信息的集合。乍一看,数据库并不美观——它只是一些原始数据,需要经过大量工作才能在用户界面上良好地显示出来。数据库之所以重要,是因为它体现了信息的逻辑建模方式。
数据本身现在甚至被视为一种宝贵的资源——许多公司通过向广告商出售用户数据来赚钱——比如谷歌。
本文的读者对象是刚接触计算机编程的开发人员。
数据库在 Web 应用程序中处于什么位置?
回到 Web 开发,在服务器-客户端模型中,数据库就是服务器。
- 数据以一种丑陋、原始、未格式化的形式存储在服务器(数据库)上。通常,信息是根据数据模式进行逻辑分组的,而不是根据用户想要查看的内容。
- 客户端是浏览器,用户在这里与数据进行交互。数据以用户易于阅读的方式显示,包括炫酷的颜色、按钮、图片等等!
数据库主要有两种类型:具有表模式的关系数据库和各不相同的 NoSQL 数据库。
为什么我们需要数据库?
想象一下,如果您经营一家宠物店,并且正在搜索该年内宠物的数量:
如果您使用收据来存储信息,则必须:
- 手工查看数百张收据
- 按宠物对收据进行分组,这样您就不会重复计算两次被保姆照顾过的宠物
- 创建所有宠物的列表以获取数量
数据库将信息以有序的表格形式存储,因此您可以查询数据库,了解一年中您饲养的宠物数量。数据库的一大优势在于,您可以轻松进一步细分信息:有多少只狗、多少只猫,以及它们来过您的宠物托管中心的次数,都可以通过数据库快速访问。
什么是云计算?
很久以前,也就是 2000 年代,大多数公司都会购买自己的服务器,并将其存放在自己的办公楼里。这些服务器上会有很多数据库,用于存放表格和信息。这被称为本地部署 (On-Prem)。数据库就在你的本地。
在这种本地部署的时代,情况变得非常复杂。公司必须聘请自己的 DBA(数据库管理员),并弄清楚如果断电该怎么办。此外,所有数据库都各自为政,彼此孤立。每家公司都有自己的服务器、数据库和存储信息的表模式,但公司之间几乎不可能共享数据。
然后云计算来了!云计算就是花钱聘请数据库专家来为你的公司管理服务器和数据库。这对企业意味着什么?企业可以专注于自身的价值主张,而不是电脑!例如:
- 您的宠物店可以雇用更多疯狂的猫女士,并减少数据库管理员,因为您将服务器外包给一家大公司。
- 更好的数据库:由于 Petstore 付钱给专业人员来关注数据库,您将拥有更好的产品。
- 维护更容易,因为像 Microsoft Azure、Amazon Web Services 或 Google Cloud 这样的巨头公司会运行技术更新
- 更多按需技术帮助。您的云提供商的专业人员可以帮助您了解一些基本的技术标准:例如如何设置数据库、使用哪些工具以及购买哪些软件。
所有这些云计算都引出了以 aaS 结尾的所有缩写词:
- 软件即服务
- 平台即服务
- 函数即服务
关系数据库 RDBMS
最初是关系型数据库。RDBMS 代表关系数据库管理系统,是一种控制数据库系统的方法。
关系型数据库使用表(通常称为表格关系)对数据进行逻辑建模。
Excel 中的电子表格是一个很好的比喻,可以用来理解关系数据库的工作原理。关系数据库就像表格——也就是说,它们就像 Excel 中的表格。如果将关系数据库想象成一个 Excel 工作簿:
- 电子表格就像数据库
- 每个标签就像一个数据库表
- 表格在不同的选项卡中定义
- 每个表都有一个键
- 使用键在表之间链接数据
关系数据库具有定义表结构和表如何关联的模式,以及提供信息行地址的键。
宠物店老板示例
假设你经营着一家宠物托管公司。你如何追踪宠物主人的信息?我们先从以下两条信息开始。
- 姓名
- 地址
这些信息都会发生变化——人们结婚、搬家。那么,程序员该如何快速更新信息,并灵活应对生活中的各种变化呢?
开发人员设计了一个关系数据库,其中包含版本化的名称表和版本化地址表。每个表都有一个主键——一个指向该行信息的唯一编号。NameId 和 AddressId。主键不会重复——在 Excel 屏幕截图中——主键是开发人员查找精确信息行的方式。
架构
设计关系数据库的第一步是定义模式。模式是所有数据在表中的位置映射——表名、列名。模式显示了表之间的关系——从上面的例子中,我们可以看到如何使用姓名表来查找与人员相关的地址。
在关系数据库中,所有信息都使用模式进行排序、结构化、定义和设计。当开发人员知道数据输入的内容时,关系数据库非常适用。例如,如果地址信息出现在表单中,则数据本身就已经具有定义好的结构。
SQL 教程
SQL,即结构化查询语言,是查询关系数据库最常用的方式。查询是从数据库中提取信息的一种方式。在查询数据库时,开发人员注重效率。想象一下一个包含数十亿个地址的数据库,我们如何快速找到一个地址并显示给用户?
答案是使用键来提高效率。主键(或聚集索引)是指向特定数据的唯一地址。主键不可重复使用。非聚集索引是开发人员和数据库管理员添加到数据库中的附加键,用于加快常用查询的速度。辅助键通常在软件投入生产后添加,通过监控性能,开发人员可以识别最大的速度瓶颈,并添加辅助键来缓解流量。
继续学习。
无需费力浏览视频或文档,即可学习数据库设计。Educative 的文本课程易于浏览,并配备实时编程环境,让学习快速高效。
软件工程师数据库设计基础知识
SQL代码解释
在上面的 SQL 代码片段中,我们创建了两个 SQL 表。Schema 定义了如何创建和链接这两个表。
请注意,在查询中,我们根据 AddressId 连接了两个表。星号 * 表示提取所有列,因此此查询会提取两个表的所有列。我们还指示 SQL 使用主键 NameId 查找正确的数据行。出于效率考虑,尽可能使用主键至关重要。想象一下拥有数十亿行数据的数据库;当信息量巨大时,查找正确的信息可能需要很长时间。
非关系数据库
当开发人员不知道将要接收什么样的信息时,他们该怎么办?最近,非关系数据库取得了许多进展,它们可以接收非结构化信息并将其存储。非关系数据库不需要太多的前期设计,而且更加灵活。非关系数据库的缺点是它们通常更难使用——因为开发人员不知道将要接收什么样的信息——数据可能来自图片、电影、.zip 文件或纯文本。存储之后,一旦开发人员必须使用非关系数据库中的信息,由于选项太多,编写代码逻辑来处理这些信息会变得更加困难。
NoSQL
NoSQL 意味着数据库不是 SQL,而是不同于传统表格关系的东西。NoSQL 非常适合大数据和实时 Web 应用。说 No SQL 有点夸张。NoSQL 更应该被认为是“不仅仅是 SQL”,许多 NoSQL 数据库既使用表关系,也使用其他关系。例如,图片存储数据库可能包含多种类型的文件,但仍然保留了键到文件表的关系。NoSQL
牺牲了一致性——开发人员在查询 NoSQL 数据库时不知道会得到什么——以换取其他好处。
NoSQL 的优势
- 简约设计
- 更简单的水平扩展
- 控制可用性
- 限制对象关系阻抗不匹配
- 可用性、分区容错性和速度
- 但是……NoSQL 牺牲了一致性来实现这 3 个好处,从而导致了 NoSQL 具有“最终一致性”的想法。
开发 NoSQL 数据库时,会用到不同的数据结构。我们这里不会深入探讨,但以下列出了一些常见的 NoSQL 数据结构,以便您了解一些概念:
- 键值
- 宽柱
- 图形
- 文档
NoSQL 数据库拥有不同的查询选项,查询就是向数据库请求信息。NoSQL
数据库通常用于存储未格式化的信息。软件可以先获取数据,然后再进行处理。当你不知道预先会得到什么样的信息时,这非常有用:例如,当用户可以通过电子邮件发送图片、PDF、附件或文本时。
SQL 与 NoSQL
何时选择 SQL 数据库?
如果您正在编写股票交易、银行业务或金融应用,或者需要存储大量关系数据(例如,编写像 Facebook 这样的社交网络应用),那么您应该选择关系数据库。原因如下:
事务和数据一致性
如果您编写的软件与金钱或数字有关,那么事务、ACID 和数据一致性对您来说至关重要。关系型数据库在事务和数据一致性方面表现出色。它们符合 ACID 规则,历史悠久,并且久经考验。
存储关系
如果你的数据有很多关系,比如你的哪些朋友住在某个城市?你的哪些朋友已经在你计划今天去的餐厅吃过饭了?等等。没有什么比关系数据库更适合存储这类数据了。
关系数据库是为了存储关系而构建的。它们已经过实践检验,并被 Facebook 等业内巨头用作面向用户的主要数据库。
流行的关系数据库:
- MySQL
- 微软 SQL 服务器
- PostgreSQL
- MariaDB
何时选择 NoSQL 数据库
以下是选择 NoSQL 数据库的几个原因:
处理大量读写操作
当您需要快速扩展时,NoSQL 数据库是您的不二之选。例如,当您的网站有大量读写操作,并且需要处理大量数据时,NoSQL 数据库是最佳选择。由于 NoSQL 数据库能够动态添加节点,因此能够以最小的延迟处理更多并发流量和海量数据。
运行数据分析
NoSQL 数据库也最适合数据分析用例,在这些用例中我们必须处理大量数据的涌入。
流行的NoSQL数据库:
- MongoDB
- Redis
- 卡桑德拉
- HBASE
如果您想尝试像 MongoDB 这样的 NoSQL 数据库,那么我强烈建议您查看 Nikola Zivkovic 的课程《MongoDB 权威指南》。
总结
这篇文章涵盖了很多内容,但我们只是触及了皮毛。你应该花时间学习数据建模、规范化、函数依赖和 SQL。
《软件工程师数据库设计基础》是一门学习数据库设计关键方面的优秀课程。在本课程中,你将学习:
- 掌握数据库系统的基础知识。
- 接触不同类型的数据库。
- 了解实体关系图及其用途。
- 能够规范化数据库以提高查询效率。
- 已经学习了查询数据库的基本SQL命令。
您可以点击上面的链接查看免费预览。
学习愉快!
文章来源:https://dev.to/education/database-design-tutorial-4dno