论文部分内容阅读
[摘要]本文探讨了数据库管理系统中记录及记录集的存储结构技术。
[关键词]记录 记录的存储 记录集合的存储
一、引言
数据库中的数据是用来描述现实世界中具体事物的。在关系模型中,通常把那些描述事物所必需的属性组合起来,构成一个元组,使得每一个元组正好表示现实世界中的一个事物。每一个元组对应着存储结构中的一个数据记录,每个逻辑页面内可以存放若干个数据记录。怎样把一个元组描述成一个数据记录呢?
二、记录和记录类型
数据通常都以记录(record)的形式存储的。每条记录有相关的数据值或数据项汇集组成,其中每个值由一个或多个字节构成,并与记录中的一个特定字段(field)相对应。记录通常描述实体及其属性。举例来说,一个Employee记录表示一个雇员实体,记录中的各个字段值指定了该雇员的一些属性,例如Name、Birthday、Salary等。字段名及其相应数据类型的汇集构成了一个记录类型(record type)或记录格式(record format)定义。与各字段相关的数据类型(data type)指定了此字段可取值的类型。
字段的数据类型通常是编程时使用的标准数据类型。其中包括数值型(整型、长整型或浮点型)、字符串(定长或变长字符串)、布尔型(只能取0和1或TRUE或FALSE这样的值),有时还有专门编码的日期和时间数据类型。对于给定的计算机系统,各数据类型所需的字节数是固定的。一个整型可能需要4个字节,一个长整型需要8个字节,一个实数型需要4个字节,一个布尔型需要1个字节,一个日期型需要10个字节(假设日期的模式是YYYY-MM-DD),k个字符组成的定长字符串需要k个字节,变长字符串需要的字节数等于各字段值中的字符数。例如,可以用C程序设计语言表示法将Employee的记录类型定义为以下结构。
Struct employee{
Char name[30];
Char ssn[9];
Int salary;
Int job_code;
Char department[20];
};
三、文件、定长记录和变长记录
文件是记录的序列。在许多情况下,一个文件中的所有记录均属于同一种记录类型。如果文件中所有的记录的长度均相等(以字节计),则称这个文件是由定长记录(fixed-length record)组成的。如果文件中的不同记录的长度也不同,则称这个文件是由变长记录(variable-length record)组成的。文件之所以会有变长记录是因为:
1.文件记录均属于同一记录类型,但有一个或多个字段是变长的(变长字段)。例如,EMPLOYEE中的name字段就可能是变长字段。
2.文件记录均属于同一记录类型,但有一个或多个字段对应的单个记录有多个值,这样的字段成为重复字段(repeating field),该字段的一组值通常称为重复组(repeating group)。
3.文件记录均属于同一记录类型,但有一个或多个字段是可选的(optional)。也就是说这个文件中有些记录在该字段上有值,但并非该文件的所有记录在该字段上都有值(可选字段)。
4.文件包含不同记录类型的记录,因此是变长的(混合文件)。如果不同类型的相关记录在磁盘中聚簇存储,就会出现这种情况。例如,某个学生的grade-report记录可能紧跟在student记录后面。
由此可以看出,不同记录由于其属性值的不同,存储空间的大小也不相同,那么如何存储元组就需要过细的考虑。
四、记录的存储
1.定长记录的存储
存储记录的一种最简单的方法是固定长度的定长记录法,即元组的属性字段的数目是固定的,每个属性字段的长度也是固定的,对属性值长度不规整的取其最长的长度。如上述的employee关系可定义其记录的存储结构的长度为:
采用特殊分隔符的方法克服了上面定长记录浪费空间的缺点,方法也简单,但其缺点是不易于找到合适的保留字符,必须保证数据中都不会出现保留字符,特别对二进制数据就更困难。
变长记录法的另外一种形式叫首部指针法,即在每个记录的首部都设置若干个指针,分别指向第一个属性值结束第二个属性值开始,第二个属性值结束第三个属性值开始,…,倒数第二个属性值结束倒数第一个属性值开始的位置,如下图2所示。
首部指针法中的指针可能占用较大空间,其改进的办法是用属性字段的长度来代替指针,此外,对于记录中的定长属性字段值,若每一记录均用数字标明其长度,对于大量存储的记录也开销太大,可以在目录中将各定长属性字段的长度予以记载,在存储记录时只指示变长属性字段的长度。这样可以节约大量的存储空间。上面的例子可以如下图3表示。其中,V表示变长属性字段,F表示定长属性字段。
这种把变长属性字段的当前长度予以显式指明的办法还可以用于对关系中新属性字段的扩充,扩充了新属性的元组可将其新属性和新属性字段长度附加在记录的尾部,从而无须更动原来的存储结构而只需在目录中稍加说明即可完成新属性的扩充。
五、记录集合的存储
对于记录的集合其存储的结构也有多种方式。
1.记录集顺序存储法(如下图4所示)
它将一组记录顺序存储,称之为表(List),其优点是节省存储空间,顺序连续存取时效率最高。缺点是不灵活,只能表示记录之间的一种关联,一种顺序,当存在其它关联时则无法表示。再插入或删除记录时其存储结构会发生变化。
2.链式存储法(如下图5所示)
这里的每个记录都附有一个指针,指向下一个记录的位置,因此在插入和删除记录时就很方便,只需将指针值改变即可。这种灵活性的代价是每个记录多存储一个指针。
3.变长指针法(如下图6所示)
这种方式为指针集中邻接存放,也较灵活,它的名字叫变长指针法,也叫指针阵列法(Pointer Array)。
4.指针链式存储法(如下图7所示)
这种存储方法最为灵活,但存储开销和存取开销也最大,查找一个记录需要存取两次。
六、结束语
以上给出了记录与记录集合的不同存储结构,使我们对数据库管理系统中文件记录及记录集合有了初步的认识,在具体实践时可以依照应用需求灵活选用。
参考文献:
[1]施伯乐,丁宝康,周傲英,田增平.数据库系统教程[M].北京:高等教育出版社,1999.
[2]张龙祥,黄正瑞,龙军.数据库原理与设计[M].北京:人民邮电出版社,2007.
(作者单位:安徽城市管理职业学院)
[关键词]记录 记录的存储 记录集合的存储
一、引言
数据库中的数据是用来描述现实世界中具体事物的。在关系模型中,通常把那些描述事物所必需的属性组合起来,构成一个元组,使得每一个元组正好表示现实世界中的一个事物。每一个元组对应着存储结构中的一个数据记录,每个逻辑页面内可以存放若干个数据记录。怎样把一个元组描述成一个数据记录呢?
二、记录和记录类型
数据通常都以记录(record)的形式存储的。每条记录有相关的数据值或数据项汇集组成,其中每个值由一个或多个字节构成,并与记录中的一个特定字段(field)相对应。记录通常描述实体及其属性。举例来说,一个Employee记录表示一个雇员实体,记录中的各个字段值指定了该雇员的一些属性,例如Name、Birthday、Salary等。字段名及其相应数据类型的汇集构成了一个记录类型(record type)或记录格式(record format)定义。与各字段相关的数据类型(data type)指定了此字段可取值的类型。
字段的数据类型通常是编程时使用的标准数据类型。其中包括数值型(整型、长整型或浮点型)、字符串(定长或变长字符串)、布尔型(只能取0和1或TRUE或FALSE这样的值),有时还有专门编码的日期和时间数据类型。对于给定的计算机系统,各数据类型所需的字节数是固定的。一个整型可能需要4个字节,一个长整型需要8个字节,一个实数型需要4个字节,一个布尔型需要1个字节,一个日期型需要10个字节(假设日期的模式是YYYY-MM-DD),k个字符组成的定长字符串需要k个字节,变长字符串需要的字节数等于各字段值中的字符数。例如,可以用C程序设计语言表示法将Employee的记录类型定义为以下结构。
Struct employee{
Char name[30];
Char ssn[9];
Int salary;
Int job_code;
Char department[20];
};
三、文件、定长记录和变长记录
文件是记录的序列。在许多情况下,一个文件中的所有记录均属于同一种记录类型。如果文件中所有的记录的长度均相等(以字节计),则称这个文件是由定长记录(fixed-length record)组成的。如果文件中的不同记录的长度也不同,则称这个文件是由变长记录(variable-length record)组成的。文件之所以会有变长记录是因为:
1.文件记录均属于同一记录类型,但有一个或多个字段是变长的(变长字段)。例如,EMPLOYEE中的name字段就可能是变长字段。
2.文件记录均属于同一记录类型,但有一个或多个字段对应的单个记录有多个值,这样的字段成为重复字段(repeating field),该字段的一组值通常称为重复组(repeating group)。
3.文件记录均属于同一记录类型,但有一个或多个字段是可选的(optional)。也就是说这个文件中有些记录在该字段上有值,但并非该文件的所有记录在该字段上都有值(可选字段)。
4.文件包含不同记录类型的记录,因此是变长的(混合文件)。如果不同类型的相关记录在磁盘中聚簇存储,就会出现这种情况。例如,某个学生的grade-report记录可能紧跟在student记录后面。
由此可以看出,不同记录由于其属性值的不同,存储空间的大小也不相同,那么如何存储元组就需要过细的考虑。
四、记录的存储
1.定长记录的存储
存储记录的一种最简单的方法是固定长度的定长记录法,即元组的属性字段的数目是固定的,每个属性字段的长度也是固定的,对属性值长度不规整的取其最长的长度。如上述的employee关系可定义其记录的存储结构的长度为:
采用特殊分隔符的方法克服了上面定长记录浪费空间的缺点,方法也简单,但其缺点是不易于找到合适的保留字符,必须保证数据中都不会出现保留字符,特别对二进制数据就更困难。
变长记录法的另外一种形式叫首部指针法,即在每个记录的首部都设置若干个指针,分别指向第一个属性值结束第二个属性值开始,第二个属性值结束第三个属性值开始,…,倒数第二个属性值结束倒数第一个属性值开始的位置,如下图2所示。
首部指针法中的指针可能占用较大空间,其改进的办法是用属性字段的长度来代替指针,此外,对于记录中的定长属性字段值,若每一记录均用数字标明其长度,对于大量存储的记录也开销太大,可以在目录中将各定长属性字段的长度予以记载,在存储记录时只指示变长属性字段的长度。这样可以节约大量的存储空间。上面的例子可以如下图3表示。其中,V表示变长属性字段,F表示定长属性字段。
这种把变长属性字段的当前长度予以显式指明的办法还可以用于对关系中新属性字段的扩充,扩充了新属性的元组可将其新属性和新属性字段长度附加在记录的尾部,从而无须更动原来的存储结构而只需在目录中稍加说明即可完成新属性的扩充。
五、记录集合的存储
对于记录的集合其存储的结构也有多种方式。
1.记录集顺序存储法(如下图4所示)
它将一组记录顺序存储,称之为表(List),其优点是节省存储空间,顺序连续存取时效率最高。缺点是不灵活,只能表示记录之间的一种关联,一种顺序,当存在其它关联时则无法表示。再插入或删除记录时其存储结构会发生变化。
2.链式存储法(如下图5所示)
这里的每个记录都附有一个指针,指向下一个记录的位置,因此在插入和删除记录时就很方便,只需将指针值改变即可。这种灵活性的代价是每个记录多存储一个指针。
3.变长指针法(如下图6所示)
这种方式为指针集中邻接存放,也较灵活,它的名字叫变长指针法,也叫指针阵列法(Pointer Array)。
4.指针链式存储法(如下图7所示)
这种存储方法最为灵活,但存储开销和存取开销也最大,查找一个记录需要存取两次。
六、结束语
以上给出了记录与记录集合的不同存储结构,使我们对数据库管理系统中文件记录及记录集合有了初步的认识,在具体实践时可以依照应用需求灵活选用。
参考文献:
[1]施伯乐,丁宝康,周傲英,田增平.数据库系统教程[M].北京:高等教育出版社,1999.
[2]张龙祥,黄正瑞,龙军.数据库原理与设计[M].北京:人民邮电出版社,2007.
(作者单位:安徽城市管理职业学院)