📄 一句话概括
基地里住着三方——数据文件负责存、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 秒实验
- 用一句话说出三方各负责什么:谁存?谁管?谁用?
- 举一个【换掉 DBMS 而应用不用改】的场景,说说为什么能做到。
常见误区
- 以为应用程序直接读写数据文件——绕过管家,规矩、权限、并发全乱了。
- 以为 DBMS 是硬件——它是软件(如 MySQL、PostgreSQL),跑在硬盘和内存之上。
自测三问(点开对答案)
1. 数据库世界的三方是谁? —— 数据文件(存)、DBMS(管)、应用程序(用)。 2. 应用与数据库之间用什么语言对话? —— SQL 语句——由 DBMS 接收并执行。 3. 三方分工与 7.4 的哪个思想同源? —— 封装——内部实现(存储格式)对外隐藏,只留接口。- ☐ 下一节(8.3 设计数据库)
相关笔记
- 观点2:面向对象编程能够提升程序的开发效率和可维护性 — 封装思想在数据侧的兑现
- 🗄️ 数据库基础 · 索引 — DBMS 的产品与选型在那边展开
- 💻 计算机是怎样跑起来的 · 索引