💻 第八章 一用就会的数据库
📄 一句话概括

基地里住着三方——数据文件负责存、DBMS 负责管、应用程序负责用;应用从不自己进仓库搬货。

📝 本节和前面几节的关系

上一节认了基地,本节认住户:三方各是谁、各干什么,请求怎么在它们之间跑一趟。

一、三方角色

数据文件:真正存数据的仓库——数据落在磁盘上,关机也在; DBMS(数据库管理系统):管仓库的管家——存取、查找、权限、事务全归它; 应用程序:来提货的客户——只说要什么,不关心货怎么摆。 三者分开住、各司其职,是数据库世界的第一次分工。

二、一次请求的旅行

应用喊一嗓子【请给我 10 月的借书记录】——这句话会变成一条 SQL 语句(8.8 细讲); DBMS 收到后去数据文件里取,还可能用上索引加速(8.6); 结果整理好送回来,应用只管把结果放进界面显示(8.7)。 整趟旅行应用都没碰过数据文件——它只跟管家说话。

三、分工的深意

仓库怎么摆货(存储格式、索引结构)随时可以升级换代——只要管家照旧应答,应用一行不改。 这正是 7.4 讲过的封装:DBMS 是数据世界的封装者,围墙外的人只认 SQL 这门接口语言。 同一个人不与仓库直接打交道,也意味着权限可以卡在管家手里——谁能看哪部分数据,DBMS 说了算。

四、动手 Demo:三方分工与一次请求

画出三方关系与一次请求的往返路线,再列个职责对照表。

# 应用 -> DBMS -> 数据文件 的一次往返
def dbms(query, store):        # 管家: 收请求, 去仓库取数
    return [row for row in store if query(row)]
store = ["10-01 波仔", "10-03 小墨"]
q = lambda row: row.startswith("10-")
print(dbms(q, store))

实跑输出:

--------------------------------------------------------------------
数据文件、DBMS 和数据库应用程序
--------------------------------------------------------------------

基地里其实住着三方, 各司其职:

    应用程序 ----请求----> DBMS ----读写----> 数据文件
        ^                     |
        +--------结果---------+

  角色         职责                 打个比方
  -----------------------------------------------
  数据文件     真正存数据的仓库     仓库货架
  DBMS         管理仓库的管家       仓库管理员
  应用程序     用数据的干活人       来提货的客户

    应用程序从不自己进仓库搬货, 一律找管家(DBMS)代办:
    应用发【请给我 10 月的借书记录】, DBMS 去数据文件里取, 再把结果送回来。

这样分工的好处: 仓库怎么摆货(存储格式)可以随便升级,
只要管家照旧应答, 应用程序一行都不用改——和 7.4 的封装同一个道理。

代码里的 dbms() 就演管家:应用只递条件,取数的事全在它那里完成。 三方分开还有个好处:换掉管家(换数据库产品),应用照样能用——接口没变。

30 秒实验

  1. 用一句话说出三方各负责什么:谁存?谁管?谁用?
  2. 举一个【换掉 DBMS 而应用不用改】的场景,说说为什么能做到。

常见误区

  1. 以为应用程序直接读写数据文件——绕过管家,规矩、权限、并发全乱了。
  2. 以为 DBMS 是硬件——它是软件(如 MySQL、PostgreSQL),跑在硬盘和内存之上。
自测三问(点开对答案) 1. 数据库世界的三方是谁? —— 数据文件(存)、DBMS(管)、应用程序(用)。 2. 应用与数据库之间用什么语言对话? —— SQL 语句——由 DBMS 接收并执行。 3. 三方分工与 7.4 的哪个思想同源? —— 封装——内部实现(存储格式)对外隐藏,只留接口。

相关笔记