【数据库下】第一章 物理设计(数据库存储技术)
第一章 物理设计(数据库存储技术)
数据库设计主要有哪些环节?
数据库逻辑设计后得到什么?
二维表如何存储?
主要学习目标
- 表记录的存储方式
- 表结构的存储方式
思考问题
- 操作系统的数据操作方式,CPU、内存、硬盘如何进行数据传输的?
- 文件系统如何存储数据的?
一、文件组织
讨论:如何在物理存储介质上组织数据?
1)数据在物理存储(磁盘)中如何组织?
物理设计任务:考虑用文件表示逻辑数据模型(数据库模式)的不同方式。
一个数据库被映射到多个不同的文件(file) ,文件由操作系统来管理,这些文件被永久存储在磁盘上!
一个文件在逻辑上被组织成记录的一个序列,记录被映射到磁盘块(block)上。
每个文件(file)被分成定长的存储单元-块,块是数据存储和传输的基本单位(默认一般是4-8KB)。
一个块可以包括很多记录(假设一个记录总比块小;对大数据如图片等需单独处理和存储),且一个记录的数据不能跨块存储。
讨论:每条记录如何进行组织?
定长记录和变长记录各自的特点?
定长记录:
![image-20210902114755390](https://gitee.com/cxg_code/image/raw/master/img/20210902114755.png)
特点:
查找记录较快,但记录更新较慢。
变长记录:
![image-20210902114849311](https://gitee.com/cxg_code/image/raw/master/img/20210902114849.png)
特点:
查找记录较慢,但记录更新较快。
二、(数据库)文件中记录的组织
讨论:如何在物理存储介质上组织数据库数据?
- 堆文件:
(一个关系表的)记录在(一个)文件空间中任意放置。
注:对这种组织方式,在按给定属性值搜索记录时,需依次读出所有记录,并依次选出满足条件的所有记录,查找效率低。
-
顺序文件 :
按一定的顺序在文件中组织记录。
-
散列文件:
按照散列函数计算值存放相应记录。
-
多表簇集文件:
不同关系表里的记录存放在同一个文件中。
1、顺序文件组织
1) 顺序文件在逻辑上是如何组织数据库数据(关系)的?
2) 顺序文件的物理存储如何实现?
顺序文件的逻辑组织方式:
1)将关系中记录按“某属性/组-搜索码”顺序排列
2)并用指针将记录依序连接
特点:按搜索码搜索的效率高。
顺序文件的物理组织方式:
1)将关系中记录按搜索码次序进行物理存储
2)采用定长记录或变长记录方式
3)一个记录的信息不能分存在两个物理块中
![image-20210902115347406](https://gitee.com/cxg_code/image/raw/master/img/20210902115350.png)
3) 顺序文件存储的数据如何更新?
删除和插入记录时的开销大(需大量移动记录)!
改善方法(指针管理)
![image-20210902115457555](https://gitee.com/cxg_code/image/raw/master/img/20210902115500.png)
2、多表聚集文件组织
4) 什么是多表聚集文件,物理存储如何实现,有何好处?
多表聚集文件组织:是指将多个关系的数据组织在一个文件中(它们的记录相互交织在一起)
注意:实现多表聚集文件组织,需底层操作系统配合,实现对文件的管理(只有大型数据库系统才支持)。
5)多表聚集文件组织方式的优点和不足?
3、物理设计的任务
6) 实际应用中,物理设计到底做什么?
前面,介绍了大型数据库管理系统(DBMS)支持的文件中记录的物理存储方式,实际上都是由DBMS自动实现对用户定义好的逻辑数据(关系)的自动存储,似乎物理存储对用户是透明的,就像大家上机所感受的一样。
数据库应用设计人员还需要做物理设计工作吗,如何做?
数据库物理设计(应用开发中)的主要工作:
1)在定义关系模式时,需要确定采用定长还是变长记录;
(通过确定采用的属性类型,因有变长属性)
2)对每个关系模式,需要确定影响记录存放次序的搜索码;
(根据常用/重要的查询要求,确定主码或建聚集索引Cluster Index)
3)对每个关系模式,需要确定是否还需要建立辅助索引文件;
(根据常用/重要的查询要求,确定建哪些索引Index)
4)对具有连接条件的一组关系模式,需要确定是否采用多表聚集文件存储;
(根据多表连接上重要应用查询快速访问需要)
5)对应用的所有关系模式,需要确定应当划分为多少个数据库来存储;
(根据关系模式间相关性、应用相关性、数据保密需要、数据库备份需要等)
6)对每个数据库,需要确定数据库文件存放的物理路径(不同服务器,不同介质)
(根据访问效率需要、应用相关性、数据重要性等)
三、数据字典
讨论:RDBMS管理什么数据?
![image-20210903092728424](https://gitee.com/cxg_code/image/raw/master/img/20210903092735.png)
![image-20210903092732123](https://gitee.com/cxg_code/image/raw/master/img/20210903092732.png)
1)什么是元数据?
2)数据字典存储什么信息?
3)数据字典存储的作用?
![image-20210903092900580](https://gitee.com/cxg_code/image/raw/master/img/20210903092900.png)
数据库存储机制
讨论:RDBMS元数据如何管理?
一个简单的ER图示:
- 一个数据库对应n个块
- 一个数据库多个表
![image-20210903093356797](https://gitee.com/cxg_code/image/raw/master/img/20210903093400.png)
Create database完成了什么事情?
Create table?
这些sql语句是如何处理数据的?
Insert
Delete
Update
找到块,插入,块满了,再申请一个块
更新、删除
Oracle的数据字典
四、数据库缓冲区
1.数据库缓冲区及作用
讨论:数据库缓冲区在改善数据访问中的作用?
1)需要建立数据库缓冲区吗,为何能提高访问效率?
2.数据库缓冲区管理器
2)如何管理数据库缓冲区?
3.缓冲区替换策略
![image-20210903093945910](https://gitee.com/cxg_code/image/raw/master/img/20210903093946.png)
3) 如何确定缓冲区中的无用区块?
1、在文件中,记录有哪两种方式表示,对于记录的集合如何组织?
记录分为定长记录、变长记录。
对于记录的集合组织为堆文件、顺序文件、散列文件、多表聚集文件。
堆文件:一个关系表的记录在一个文件空间中任意放置。
顺序文件 :按一定的顺序在文件中组织记录。
散列文件:按照散列函数计算值存放相应记录。
多表簇集文件:不同关系表里的记录存放在同一个文件中。
2、什么是元数据?元数据如何存储?
一个关系数据库需要维护关于关系的数据,如关系的模式等。一般来说,这样的“关于数据的数据”称为元数据。
关于关系的关系模式和其他元数据存储在称为“数据字典”或系统目录的结构中。