数据库期末复习(二)
数据库期末复习(二)
DB DBA DBS DBMS
1. DBA(Database Administrator,数据库管理员)
定义:DBA是**“人”**(或角色),是负责数据库的规划、设计、维护和管理的专业人员或团队。
DBA具体做什么?他们是数据库的“大管家”,主要职责包括:
- 日常维护:监控数据库运行状态,处理死锁和慢查询。
- 性能调优:决定在哪些字段上建索引(决定了内模式),调整SQL执行效率。
- 权限管理:给不同用户分配不同的查看权限(决定了谁能看哪些外模式)。
- 备份与恢复:制定备份策略,在数据丢失时进行灾难恢复。
- 结构变更:当业务变化时,执行修改表结构(DDL语句)的操作。
注意:在我们的上一题中,实现物理数据独立性(如换硬盘、建索引)主要就是由DBA在内模式层操作的。
2. DBS(Database System,数据库系统)
定义:DBS是**“整体系统”**,是指计算机系统中引入数据库后的整个系统。
DBS包含什么?它是一个大集合,其组成部分可以用公式清晰记忆:
DBS = 计算机硬件 + 操作系统 + DBMS(数据库管理系统) + 数据库(DB) + DBA(数据库管理员) + 应用程序 + 用户
- 硬件:运行数据库的服务器、磁盘阵列等。
- 软件:包括操作系统、DBMS(如MySQL)、以及各种连接驱动。
- 数据:存储在磁盘上的实际业务数据(DB)。
- 人员:包括DBA、系统开发人员以及最终操作用户。
3. 对比:DBS vs DBMS vs DB vs DBA
| 术语 | 中文全称 | 本质 | 生活类比(餐厅) |
|---|---|---|---|
| DB | 数据库 | 数据本身(存放数据的仓库) | 后厨冷冻柜里储存的食材(肉、菜、调料)。 |
| DBMS | 数据库管理系统 | 管理数据的软件(MySQL、Oracle) | 厨师用来处理食材的操作台和工具(案板、灶台)。 |
| DBA | 数据库管理员 | 管数据库的人(专业人士) | 负责采购、冷藏、清理库存的后厨总管。 |
| DBS | 数据库系统 | 整个大环境(硬件+软件+数据+人) | 整个餐厅(包括后厨设备、食材、厨师、收银系统、顾客)。 |
4. 与前面知识点的联动(三级模式)
在三级模式结构中,角色分工非常明确:
- DBA(管理员)负责定义和修改内模式(决定数据怎么物理存储)和概念模式(定义表结构)。
- 普通用户/应用程序只接触外模式(只能看视图,不能动底层)。
- DBMS(软件)负责维护两级映射,贯穿全局。
- DBS(数据库系统)包含了上述所有内容,是容纳三级模式、DBMS和DBA的大环境。
DBS(数据库系统)最大,包含 DBMS(软件)和 DB(数据),而 DBA(管理员)是 DBS 中负责管理这一切的人。
即:DBS = DB + DBMS + DBA + 其他(硬件/应用/用户)
数据独立性
- 物理数据独立性:改变内模式(存储方式),不影响概念模式(表结构)和外模式(用户视图)。
- 逻辑数据独立性:改变概念模式(表结构),不影响外模式(用户视图)和应用程序。
1. 物理数据独立性(Physical Data Independence)
- 定义:当数据库的物理存储结构(如索引类型、数据压缩方式、存储分区、磁盘更换)发生改变时,概念模式和外模式保持不变,应用程序无需修改。
- 靠什么实现:靠“概念模式/内模式映射”。DBMS在中间做翻译,物理存哪里、怎么存,只有DBMS知道,表结构对此一无所知。
- 图书馆类比:图书馆仓库从人工按编号排序改成自动化立体仓库,图书的物理位置完全变了。但馆长手里的“总馆藏登记册”(概念模式)和读者面前的“检索目录”(外模式)完全不用重印,因为工作人员(DBMS)知道新位置在哪。
- 实际例子(程序员视角):DBA(数据库管理员)今天给订单表加了一个B+树索引,明天又把数据压缩格式改了,后天把历史数据迁移到了新的磁盘阵列。作为Java或Python程序员,你写的SQL查询语句
SELECT * FROM orders WHERE id = 100一行都不需要改,照样正常运行。
2. 逻辑数据独立性(Logical Data Independence)——更高级,更难实现
- 定义:当数据库的全局逻辑结构(即概念模式,如增加字段、合并表、修改字段类型)发生改变时,外模式和应用程序保持不变。
- 靠什么实现:靠“外模式/概念模式映射”。DBMS通过修改视图的定义,把新的表结构“伪装”成旧的样子给用户看。
- 图书馆类比:馆长决定把“作者”这一个字段拆分成“姓氏”和“名字”两个字段(概念模式变了)。但图书馆的微信小程序检索界面(外模式)依然只显示一个“作者姓名”框给读者输入。为什么?因为程序员修改了小程序后台的视图定义(映射),拼接了这两个字段,读者完全感觉不到底层结构变了。
- 实际例子(程序员视角):产品经理要求把用户表
Users拆分成User_Basic和User_Detail两张表(概念模式剧变)。如果没有逻辑独立性,所有查询这两张表的几百个接口都要重写。有了逻辑独立性,DBA只需要创建一个视图View_Users把两张表Join起来,并保持视图字段名和原来一模一样,原有的应用程序SQL就不需要修改。
3. 两者的核心区别与难度对比
| 对比维度 | 物理数据独立性 | 逻辑数据独立性 |
|---|---|---|
| 改变了什么 | 内模式(存储/索引/压缩/分区) | 概念模式(表结构、字段、关系) |
| 什么保持不变 | 概念模式 + 外模式 | 外模式(用户视图) |
| 对应的映射 | 概念模式 / 内模式 映射 | 外模式 / 概念模式 映射 |
| 实现难度 | 相对容易(存储层对上层透明) | 较难(表结构变化常牵涉上层语义) |
| 主要受益者 | DBA(数据库管理员),方便优化性能 | 程序员和用户,减少代码改动量 |
| 典型操作 | 建索引、分区表、更换硬盘存储 | 增加/删除字段、拆分或合并表 |
4. 为什么逻辑数据独立性更“珍贵”?
在考试和实际应用中,逻辑数据独立性被认为是关系数据库最伟大的贡献之一。
- 物理独立:改变存储方式,本质上没改变数据的“含义”,DBMS很容易帮你兜底。
- 逻辑独立:改变表结构,本质上改变了数据的“含义”(例如把生日改成年龄),这对应用程序的语义冲击很大。DBMS只能通过视图映射来“强行兼容”,但复杂的逻辑变更(如删除一个核心字段)往往还是会导致部分应用报错,因此完全的逻辑独立性在实际中很难100%实现,教材中也指出它比物理独立性更难实现。
数据模型
数据模型是数据库系统的核心和灵魂。如果说数据库是存放数据的“仓库”,那么数据模型就是设计这个仓库的**“施工图纸”和“摆放规则”**。
1. 数据模型的“三要素”(必考概念)
任何一个数据模型都由这三部分组成,缺一不可:
- 数据结构(Static):描述数据对象以及对象之间的静态特征。比如:你的数据是“二维表格”还是“树状结构”?它决定了系统能存什么类型的数据。
- 数据操作(Dynamic):描述对数据可以执行哪些增、删、改、查操作。比如:关系模型中标准的
SELECT(查)、UPDATE(改)等。 - 完整性约束(Rules):描述数据必须遵守的规则。比如:学生学号必须唯一(实体完整性),选课表中的学生ID必须存在于学生表中(参照完整性)。
2. 数据模型的三个层级(与三级模式完美对应)
| 层级 | 对应数据库模式 | 面向对象 | 典型代表 | 作用 |
|---|---|---|---|---|
| 概念数据模型 | 概念模式(全局逻辑) | 面向用户(需求分析阶段) | E-R模型(实体-联系图) | 把现实世界抽象成实体(学生)、属性(姓名)、联系(选课),不涉及任何计算机实现细节。 |
| 逻辑数据模型 | 概念模式/外模式 | 面向DBA和程序员 | 关系模型(表格)、层次模型、网状模型、面向对象模型 | 在计算机系统中具体实现的数据结构,是DBMS真正处理的对象。我们平常说的“数据库模型”通常指这一层。 |
| 物理数据模型 | 内模式 | 面向DBMS和操作系统 | 存储结构(B+树)、索引、分区 | 描述数据在磁盘、磁带上的存储格式和存取路径,对用户完全透明。 |
关键点:E-R图属于概念模型,而MySQL里的表结构属于关系模型(逻辑模型),考试经常会混淆这两者。
3. 逻辑数据模型的历史演变(回顾历史)
结合你问的第一个问题(数据库发展史),逻辑数据模型经历了这几代演变:
- 层次模型(Hierarchical):树形结构。像公司组织架构,一个节点只有一个父节点。优点是查询快,缺点是无法表示多对多关系(典型代表:IBM IMS)。
- 网状模型(Network):图结构。允许一个节点有多个父节点,更灵活,但结构太复杂,用户难以掌握(典型代表:IDS)。
- 关系模型(Relational):二维表格结构。由E.F.Codd在1970年提出,是目前统治全球的模型。它把数据抽象成简单的行(记录)和列(字段),通过SQL操作,极大降低了用户门槛(典型代表:Oracle、MySQL、SQL Server)。
- 面向对象模型(Object-Oriented):融合了面向对象编程思想,支持类、继承、封装,但并未完全取代关系模型。
- NoSQL模型:互联网时代的产物,为了应对海量数据和高并发,放弃了关系模型的某些严格约束(如事务ACID),包括键值模型(Redis)、文档模型(MongoDB)、列族模型(HBase)、图模型(Neo4j)。
为什么关系模型应用广泛
关系模型之所以成功,是因为它把数据独立性做到了极致:
- 用户看到的只是逻辑上的二维表,不需要关心底层指针或存储路径。
- DBMS负责把用户对表的操作,转换成对物理文件的读写(这就是我们上一题讲的物理数据独立性)。
- 结构简单统一,数学基础严谨(基于集合论和谓词逻辑),因此SQL语言能高效运作。
总结
数据模型= 描述数据的样子(结构)、动作(操作)和规矩(约束)。
- 概念模型(E-R图)画给老板/用户看;
- 逻辑模型(关系模型/表格)是程序员写的代码;
- 物理模型(索引/存储)是DBA管的硬盘。
目前,关系模型依然是主流,而NoSQL(文档、键值、图等)是特定场景下的补充。
