关系型数据库的存储形式剖析
图片来源于网络,如有侵权联系删除
一、关系型数据库的基本概念
关系型数据库是建立在关系模型基础上的数据库,通过关系(表格)来组织和存储数据,它以行和列的形式呈现数据,其中每一行代表一个记录(元组),每一列代表一个属性(字段),这种结构直观地反映了现实世界中的实体及其属性之间的关系。
二、表结构的存储
1、数据表的定义
- 在关系型数据库中,首先需要定义表的结构,这包括确定表名、列名、列的数据类型(如整数型、字符型、日期型等)以及可能的约束条件(如主键约束、外键约束、唯一性约束等),在一个学生信息表中,可能有“学号”(整数型,主键)、“姓名”(字符型)、“年龄”(整数型)等列。
- 表的定义存储在数据库的系统表中,系统通过这些定义来管理数据的存储和访问,当创建新的记录时,数据库会根据表结构的定义来验证和存储数据。
2、数据行的存储
- 每一行数据按照表结构定义的顺序存储各个列的值,以磁盘存储为例,数据通常以页面(page)为单位进行存储,一个页面可以包含多个行的数据,当插入新行时,数据库会根据页面的剩余空间情况决定是将新行插入到已有页面还是创建新的页面。
- 行存储的顺序可能会受到索引结构的影响,在按照主键顺序建立了索引的情况下,数据行可能会按照主键值的顺序在磁盘上相对有序地存储,这有助于提高基于主键的查询效率。
图片来源于网络,如有侵权联系删除
三、索引的存储形式
1、索引的类型
- 关系型数据库中有多种类型的索引,常见的有B - 树索引(包括B+树索引),B+树索引是一种平衡树结构,它将索引键值按照一定的顺序存储在树的节点中,对于主键索引,索引键值就是主键的值;对于其他索引(如基于姓名的索引),索引键值就是姓名的值。
- 除了B+树索引,还有哈希索引等,哈希索引通过哈希函数将索引键值映射到一个固定的哈希桶中,这种索引在等值查询时效率较高。
2、索引与数据的关联
- 在B+树索引中,叶子节点存储了索引键值以及指向对应数据行的指针(物理地址或者逻辑地址),这样,当执行查询操作时,数据库可以先通过索引快速定位到可能包含目标数据的节点,然后根据指针获取实际的数据行,当查询姓名为“张三”的学生信息时,如果有基于姓名的B+树索引,数据库会沿着B+树的结构快速找到包含“张三”这个键值的叶子节点,再通过指针找到对应的学生信息行。
四、数据完整性约束的存储相关
1、主键约束的存储体现
- 主键约束要求表中的主键列具有唯一性且不能为空,在存储层面,数据库会在插入或更新数据时检查主键列的值是否满足这些条件,对于基于主键建立的索引(通常是B+树索引),这种唯一性的要求在索引结构中得到体现,如果试图插入一个与已有主键值相同的记录,数据库会根据索引快速检测到冲突并拒绝插入操作。
图片来源于网络,如有侵权联系删除
2、外键约束的存储关联
- 外键约束定义了表之间的关系,当在一个表(子表)中定义了外键指向另一个表(主表)时,数据库会存储这种关系信息,在存储子表数据时,数据库会检查外键值是否在主表的主键值范围内,在一个选课表(子表)中有“学号”(外键,指向学生信息表的主键)和“课程号”(外键,指向课程表的主键),当插入选课记录时,数据库会检查插入的“学号”是否存在于学生信息表中,“课程号”是否存在于课程表中。
五、数据的存储布局优化
1、分区存储
- 对于大型的关系型数据库,可能会采用分区存储的方式,分区是将一个表按照某种规则(如按照日期范围、地域范围等)划分成多个子部分,每个分区可以独立存储在磁盘上,这样在查询特定分区的数据时,可以减少不必要的数据扫描,一个销售数据表按照年份进行分区,当查询某一年的销售数据时,数据库可以直接定位到对应的分区进行查询,提高查询效率。
2、数据压缩
- 为了节省磁盘空间和提高I/O性能,关系型数据库可能会采用数据压缩技术,在存储数据时,将数据按照一定的压缩算法进行压缩,在读取数据时再进行解压,不同的数据类型可能采用不同的压缩策略,例如对于重复率较高的字符型数据,可以采用基于字典的压缩方法。
关系型数据库通过精心设计的表结构、索引、约束以及存储布局优化等多种方式来存储数据,以实现高效的数据管理、查询和数据完整性维护。
评论列表