数据的存储
# 10.数据的存储
在讲什么是数据库之前,先讲讲数据库诞生之前的背景,以及使用数据库的好处
# 数据管理技术的产生和发展
数据管理技术主要经历了3个阶段:
- 人工管理阶段
- 文件系统阶段
- 数据库系统阶段
# 人工管理阶段
在20世纪50年代中期之前,计算机主要是用于科学计算。
当时的硬件状况:主要用纸带、卡片、磁带等来存储数据(磁盘还没出现)。
当时的软件状况:没有操作系统,没有专门管理数据的软件,主要依靠人工来管理数据。特点如下:
- 数据不保存:当时的计算机主要是用来计算,一般不需要长期保存数据,计算完就撤走程序。
- 数据需要应用程序自己定义和管理(例如定义一个常量)。
- 数据不共享:多个程序之间数据是不共享的,而是各自定义
# 文件系统阶段
20世纪50年代后期 ~ 20世纪60年代中期
当时的硬件状况:此时已经有了硬盘,磁带等设备
当时的软件状况:操作系统出现了,并且有了专门的文件处理模块,一般称为文件系统。特点:
- 文件可以长期保存:操作系统可以通过读取磁盘等设备来查询,修改数据
- 由文件系统来管理数据。文件系统可以将数据组织成相互独立的文件,并且程序可以按文件名来访问文件。
但是,文件系统也有缺点:
- 共享性差:一般一个文件对应一个程序。当不同程序具有部分相同的数据,也得建立各自的文件,冗余度高。此外,文件是存储在电脑上的,如果不是在同一个网络,共享起来也很麻烦。
- 数据独立性差:文件是为某一个特定程序使用的,文件内的逻辑结构是针对应用来设计的。如果数据结构改了,程序也得改,耦合度高。
- 无法应对突发事故:当文件被误删、硬盘出现故障等导致无法读取的时候,可能会造成重要数据丢失,同时数据还可能被他人轻易读取或窃用。
- 如果数据量比较大(例如双十一,订单量达数百万),那么还得切割文件,用几个文件来存储数据
举个例子:
笔者开发一个商城系统,此时用txt文件来存储数据。那么其他应用能共享这个文件吗?非常不建议!如果多个应用同时要改这个文件呢,非常容易出现冲突,严重的话可能会造成数据丢失。
此外,该txt文件内,存储的数据是有顺序的,例如这是文件的内容,一行就代表一个商品:
商品编号 商品名 商品价格
0001 篮球 2.5
2
如果想要读取全部商品数据,要怎么做?
- 首先是读取一行数据,然后用空格分隔开所有字段
- 用不同的变量分别保存数据,第一个字段是商品编号、第二个是商品名、第三个是商品价格.....
- 读取下一行数据,继续第2步.....
如果文件的逻辑结构改变了,例如增加了一个进货日期:
商品编号 商品名 商品价格 进货日期
0001 篮球 2.5 2022-05-20
2
那么我们得修改代码,增加一个变量用来保存进货日期,然后增加代码来处理该变量。
这还仅仅是一个文件的情况,如果有多个文件,例如存储了订单信息的txt,存储了商铺信息的txt.... 那么程序和文件的逻辑结构的耦合度太高了,维护成本很高
除了用txt来存储,也有的应用程序是用二进制来操作数据的,用Excel来操作数据的,不同应用程序之间的代码截然不同。
# 数据库系统阶段
在20世纪60年代后期以来,计算机管理应用范围越来越广泛,数据量急剧增长,以文件系统作为数据管理手段已经不能满足应用的需求。
为了解决多用户,多应用共享数据的需求,使数据为尽可能多的应用服务,数据库技术应运而生。
# 什么是数据库
在文件系统阶段,想要读取数据,得结合文件的逻辑结构,自己手动编写代码来存储、查询、修改和删除数据。
而数据库,相当于已经帮我们写好了这些代码。我们只需告诉数据库,要做什么,数据库就会帮我们存储、查询、修改和删除数据。(有点像调用函数,由函数帮我们完成数据的操作,我们只需传参即可)
# SQL
至于我们如何告诉数据库要做什么?计算机是听不懂人话的,得用一套专门的语言:SQL(Structured Query Language)。
那么在数据库中,是如何存储数据的?在逻辑上,我们可以认为其是用表格来存储数据的(类似Excel表)。一个数据库中可以存储多个表(类似一个Excel表可以由多个sheet页)。
例如这是一个商品表product,存储了商品的信息:
商品编号 | 商品名称 | 商品种类 | 销售单价 | 进货单价 | 登记日期 |
---|---|---|---|---|---|
0001 | T 恤衫 | 衣服 | 1000 | 500 | 2009-9-20 |
0002 | 打孔器 | 办公用品 | 500 | 320 | 2009-9-11 |
0003 | 运动 T 恤 | 衣服 | 4000 | 2800 | |
0004 | 菜刀 | 厨房用具 | 3000 | 2800 | 2009-9-20 |
0005 | 高压锅 | 厨房用具 | 6800 | 5000 | 2009-1-15 |
0006 | 叉子 | 厨房用具 | 500 | 2009-9-20 | |
0007 | 擦菜板 | 厨房用具 | 880 | 790 | 2008-4-28 |
0008 | 圆珠笔 | 办公用品 | 100 | 2009-11-11 |
在物理上,存储的数据最终还是以文件的方式,存储在磁盘上的。
那么如何操作数据呢?比如想要查询所有商品的编号,类似的SQL如下:
select 商品编号 from product;
select:选择的意思,可以理解为选择某一列的数据。
from:来自哪里的意思,在本SQL中的作用是告知数据库,要查询的数据来自哪个表。
该SQL的意思:从product表,选择商品编号列的数据。
除了select外,还有insert关键字用来插入数据,delete关键字来删除数据。这就是SQL,也是我们后续学习的重点。
# 多程序共享
由于所有的数据都是通过表来存储数据的,因此可以很好的解决数据独立性差的问题,任何应用都能通过读取表格的方式来操作数据(而不是有的读取txt,有的读取二进制文件,各自为政)。
并且目前有多种数据库备份机制,可以应对硬盘出现故障等突发事故。
# 通过网络来访问数据库
数据库通常是采用了C/S结构(客户端 /服务器)。例如可以将数据库装在一个云服务器上,每个客户端都可以连接数据库并操作数据,这样就很好的解决了数据共享的问题。
# 学习数据库的必要性
几乎所有的软件、App 都需要使用数据库,多学点总没错
# 小结
本文简单讲解了下数据库诞生的背景,以及数据库的基本概念,下一篇就边实战边讲解。