逻辑结构、物理结构
逻辑存储结构主要用于描述在Oracle内部的组织和管理数据的方式;而物理存储结构则用于描述在Oracle外部,即 *** 作系统中组织和管理数据的方式
SQLSERVER数据库中数据存储:
一:存储文件类型
SQLSERVER有两种数据存储文件,分别是数据文件和日志文件。
其中:数据文件是以8K(=8192Byte)的页面(Page)作为存储单元的。
而日志文件是以日志记录作为存储单元。本文只讨论数据文件的存储方式,不涉及到日志文件存储方式。
数据文件以页面做为存储单元存储数据,要理解数据文件的存储方式,必须了解SQLSERVER中定义的页面类型种类。
二:页面类型
SQLSERVER中页面类型有8种,具体每种类型的详细说明,见下图:
用户的数据一般存放在数据页面中,由上图可以看出,数据页包含数据行中除 text、ntext 和 image 数据外的所有数据,text、ntext 和 image 数据存储在单独的页中。那么在一个数据页面中,数据是如何存放,SQLSERVER又是根据什么来定位页面与页面上的数据呢。要回答这个问题,有必要先了解数据页面的具体结构。
三:数据页面结构
在数据页上,数据行紧接着页首按顺序放置。在页尾有一个行偏移表。在行偏移表中,页上的每一行都有一个条目,每个条目记录那一行的第一个字节与页首的距离。行偏移表中的条目序列与页中行的序列相反。数据页面结构如下图所示,下面将详细解释
其中:数据页面页首:96个字节,保存着页面的系统信息,如页的类型、页的可用空间量、拥有页的对象的对象 ID 以及该页面所属于哪个物理文件。
数据区:对应于上图中所有数据行的总区域,存放真正的数据,是以Slot为单位。一个Slot就是对应于一条数据记录行,从0开始编号,以16进制反序保存,Slot0, Slot1。
行偏移数组:用于记录该数据页面中每个Slot在数据页面所处的相对位置,便于定位和检索每个Slot在数据页面中的位置,数组中每个记录占两个字节。
四:存储分配单位:盘区(扩展 Extend)
虽然SQLSERVER中数据文件存储单位是页面(Page),但实际SQLSERVE并不是为页面为单位给数据分配空间,SQLSERVER默认的存储分配单位是盘区。这样做的主要原因是为了提高性能。为了避免频繁的读写IO,在表或其它对象分配存储空间,不是直接分配一个8K的页面,而是以一个盘区(Extend)为存储分配单位,一个盘区为8个页面(=8*8K=64K)。
但是这样做虽然减少了频繁的IO读写,提高的数据库性能,但却导致出一个新问题,那就是在存储那些只有少量数据,不足8K的对象,如果也是分配给一个盘区,就会存在存储空间上的浪费,降低了空间分配效率。
为解决上述问题,SQLSERVER提供了一种解决方案,定义了两种盘区类型,统一盘区和混合盘区。
其中:统一盘区只能存放同一个对象,该对象拥有这个盘区的所有页面
混合盘区:由多个对象共同拥有该盘区。
在实际为对象分配存储盘区时,为了提高空间利用率,默认的情况下,如果一个对象一开始大小小于8个页面,就尽量放在混合盘区中,如果该对象大小增加到8个页面后,SQLSERVER会为这个对象重新分配一个统一盘区。
为了能够通过上述策略来实现为对象分配存储盘区,SQLSERVER提供了GAM/SGAM机制来管理和维护数据文件的盘区信息。
存储过程是存储在
dbc
文件中的
Visual
FoxPro
代码,是专门 *** 作数据库中数据的代码过程。存储过程可以提高数据库的性能,因为在打开一个数据库时,它们便加载到了内存中。
使用存储过程主要是为了创建用户自定义函数,字段级规则和记录级有效性规则将引用这些函数。当把一个用户自定义函数作为存储过程保存在数据库中时,函数的代码保存在
dbc
文件中,并且在移动数据库时,会自动随数据库移动。使用存储过程能使应用程序更容易管理,因为可以不必在数据库文件之外管理用户自定义函数。
数据库并不是直接存储文件的。数据库依照某种数据模型组织起来并存放二级存储器中的数据集合。这种数据集合具有如下特点:尽可能不重复,以最优方式为某个特定组织的多种应用服务,其数据结构独立于使用它的应用程序,对数据的增、删、改和检索由统一软件进行管理和控制。数据库你可以想象为一大堆数据表的集合,数据就存放在每个表中,文件等也能存放在数据库的表中,不过需要转换成二进制编码以数据的格式存放,需要取出时再通过程序进行转换成为原来的格式比如留言板,你看到的内容是存放在数据库的一个记录表中,一条留言就占用一条记录行,需要时通过SELECT 等语句读取出它的内容,显示出来内容更新了,也通过UPDATE 等语句更新数据库中相应记录行的数据
目前是最常用的四类数据库是:
关系型数据库,是按链表或是顺序结果进行存储的
树型数据库,是按树型结构进行存储的
网状数据库,是按图结构进行存储的
对象数据库,是按顺序结构或是链表结构下的块方式进行存储的!每一个对象存储在一个单独的块单元中
目前最常用的是关系型与对象数据库
删除学生表中所有男生信息
查询学生表中所有总分大于85的学生的姓名与总分
存储过程,就是带有名字的一个程序块。
存储,是指这个程序块创建了之后,是存储在数据库内部的,然后我们可以在自己写的程序中通过某种手段去调用这段程序,然后这段程序就会做一件事,做什么事?我们定义存储过程的时候怎么写的,它到时候就做什么;
过程,就是程序块,说白了就是一段程序。
存储过程,创建完成之后,就存储在数据库内部了,数据库帮你记着,存储过程创建的时候都有一个名字,将来你在你的程序当中,通过某种方式(不同编程语言有不同的方式),一般来讲通过这个名字,去调用存储过程,就像使用一个方法或者函数一样,它就去做一件事!
不同的数据库的存储过程,都是用当前自己这个数据库的编程语言来编写的,比如Oracle的PL/SQL编程,等等。
自己写一个就明白了,语法不用我多说了吧?
以上就是关于数据库的存储结构分为哪两种其含义是什么全部的内容,包括:数据库的存储结构分为哪两种其含义是什么、SQL数据库中都是以表的形式存储数据的吗、数据库中的存储过程是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)