关系数据库是几乎所有IT项目的组成部分之一。数据库的本质是什么?它们有什么用处?
为什麼需要数据库?
数据库的本质在于为 IT 项目提供一种便利和高效的存储特定结构数据的方式。为了更好地理解,我们来看一个例子:
假设我们有一个商店,它的商品种类不断丰富,也可能会发生变化。我们想要开发一个网络商店,以便在线销售商品。如果我们将所有商品都写在网络商店的代码中,那么每次添加或编辑商品时都需要深入代码中,努力去处理需要的操作。
相反,我们可以将我们的商品信息存储在数据库中,并在网络商店的代码中编写从数据库中获取商品的功能。现在我们不需要深入代码来管理商品 - 我们可以直接在数据库管理系统 (DBMS) 的界面中管理它们,或者开发一个内容管理系统 (CMS),通过图形界面快速方便地进行所有必要的商品操作。
值得一提的是,如果没有数据库,而所有商品都编写在代码中,就无法编写内容管理系统。
数据库使得有效的搜索、过滤和排序数据成为可能。它们还提供了执行复杂查询和数据分析的机制。
这意味着,我们可以录入多个商品,但仅获得名称中包含特定单词的商品数据。或者价格大于或小于特定数值的商品。或者在特定日期之前/之后添加的商品。或者同时应用所有这些条件。
因此,数据库本身提供了广泛的可能性,使我们能够开发数据的排序、分组和过滤。
此外,数据库通常适用于存储大量数据,并且运行非常迅速,这使得每秒钟可以执行大量的数据库请求。这允许数十人同时访问数据库,而不会延迟。
即使同时用户数量达到很大的值,仍然存在各种负载优化技术,以确保稳定工作而不出现延迟。这被称为数据库的扩展,我们将在另一篇文章中回到这个主题。
从编程角度看数据库是什么?
数据库的种类和类型各不相同,但原则是相同的。这是一个需要安装在计算机或服务器上的程序。
在可以连接到数据库并在其中操作信息之前,程序必须被启动。当数据库启动时,可以通过特定的本地 IP 地址和端口连接到它。
另一个使用数据库的必要条件是配置对其的访问:为此需要添加数据库用户。在安装 DBMS 时,自动添加主用户“root”,后来可以添加其他用户,甚至为他们配置权限:可以设定,例如,用户连接到数据库时只能读取数据,而不能写入数据。
每个用户的访问是通过登录名和密码进行的 - 您不希望任何人都能完全访问数据库中的所有数据。在大多数情况下,通常只需要一个用户,后端通过该用户与数据库进行交互。
与数据库交互是通过特殊命令来完成的,这些命令允许执行经典的获取、添加、编辑和删除数据的操作 (简称 CRUD - create, read, update, delete)。
这些命令可以通过程序代码发送(这是我们需要数据库最常见的情况),也可以在启动的 DBMS 控制台中直接写入,或者使用图形用户界面。
所有图形用户界面,比如 Navicat、phpMyAdmin 等,实际上只是将控制台命令发送到数据库,并将结果输出到图形界面。
当需要使数据库可以通过互联网访问时,这需要单独配置,但在这种情况下需要特别注意安全性。通常,数据库在独立的服务器上直接可通过互联网访问,这个服务器是专门为数据库采购的。
更常见的情况是,数据库和项目的后端 (也可能有前端) 在同一台服务器上。在这种情况下,不会从互联网开放对数据库的直接访问。后端通过本地网络连接到数据库,并与数据进行操作。
项目的客户端(前端)根本不应该“知道”数据库在哪里以及如何连接到它。它向后端发送请求,后端只能执行代码中严格规定的操作,并且不能执行其他操作。
数据库中的数据结构
那么,数据库中的数据是如何存储的呢?每个数据库包含一组表,表中的记录是存储的数据。在我们开始在项目中使用数据库之前,我们需要定义其结构:必须将我们计划存储的所有信息划分为逻辑组,并为每组创建一个表。
回到网络商店的例子,我们可以有一个专门的商品表,一个商品类别表、用户表、用户订单表等。
并且对于每个表,应考虑其“列”。如果我们打算存储商品,我们将存储哪些数据?名称?是的,一个列。价格?是的,又一个列。商品类别?是的,那就再一个列。
数据库并不限制我们存储的内容,想存什么就可以存,最重要的是预先确定并融入数据库的结构。我们可以创建任意数量的表,以及这些表中的列数。
当我们将数据写入表时,每条记录就是一行。它存储有关某个特定对象的信息。在商品表中,每一行信息就是关于一个具体商品的信息。此外,在数据库中的每条记录通常还包括另一列:ID,其中存储唯一标识符(这可以是一个数字,也可以是哈希)。在一个表中没有重复的 ID,使得通过已知的特定记录的 ID 以 100% 的精确度获取此记录的信息成为可能。
为什么是关系型数据库?这到底意味着什么?
Relation 从英语翻译过来是关系。关系型数据库提供了在不同表之间建立关系的可能性,这使得有效组织数据成为可能。这有助于避免信息重复并保证数据的完整性。
关系有不同的类型,我们平台上有几篇关于这一主题的文章,每种关系类型都有一篇。通俗易懂并提供实例。如果您开始学习数据库,请务必阅读这些文章!
数据库结构必须提前规划!
我们定义数据库结构(将会有哪些表,以及表中的列有哪些)的阶段称为数据库架构设计。这是一个非常负责和重要的阶段,因为正确的设计决定了项目能否正常运作并在高负载下不会延迟。
如果数据库设计错误,可能会马上或不会马上发现,并可能导致需要重新设计整个数据库,这也意味着需要重新编写与数据库交互的代码。
正因如此,为了避免错误,并正确规划数据库结构,最好使用专门的数据库设计程序,而不是在开发过程中直接用控制台命令或 DBMS 创建它。