��1、问题的提出
��数据库数据的存储结构不同于一般文件系统的存储结构。数据库数据的特点是各种数据之间彼此有联系,数据是结构化的。数据的存储结构不仅涉及每种数据如何存储,而且还要使数据的存储能够反映各种数据之间的联系。一般来说,DBMS在存储结构方面已经做了很多,设计人员不必去设计某种存储结构,而是要根据具体的应用利用好DBMS提供的各种存储结构,如簇集文件结构。

��确定数据库物理结构主要指确定数据的存放位置和存储结构,包括确定关系、索引、簇集、日志、备份等的存储安排和存储结构,确定系统配置等等

��
��2、存储结构的选择
��虽然数据库数据的存储结构不同于一般的文件系统结构,但由于它是建立在文件系统的基础之上,二者之间有着密切的联系。数据库文件在逻辑上是记录的序列,文件自身的结构不外乎按照定长记录和变长记录两种形式进行组织;而文件中记录的组织则有多种形式:堆、顺序、散列、簇集、B树类(这些内容将在第七章"存储结构和文件结构"里详细介绍)等等。存储结构的设计就是要在它们中间作出正确的选择。

��一般来说,当数据库的DBMS已经选择好了之后,数据库的存储结构框架基本上就确定了(如在前面给出的SQL Server的例子)。例如对于SQL Server的MDF文件,其页结构是这样的:每一页的大小为8K,其中页的前96个字节用于存放页的结构信息和属主信息,而每一条记录的行偏移量则从页的尾部开始存放(有点类似我们将要在第七章介绍的"分槽的页结构")。数据库设计人员可做的事情之一就是确定数据文件中记录的组织方式,如:堆文件、顺序文件、散列文件、簇集文件等等。

��
3、确定存储结构的因素
��确定存储结构的主要因素包括以下三个方面:
��①�访问数据的时间,即存取时间;
��②�磁盘存储空间的利用率;
��③�存储结构中数据的维护代价等。
数据库设计人员常常要对这些因素进行权衡,一般的DBMS也总是具有一定的灵活性供你选择。如簇集是把有关的记录集中在一个物理块内或物理上相邻的区域内存放,以提高某些查询的速度。如何利用好簇集设计,就要在上述三者之间进行权衡。

��需要特别一提的是,簇集使得有关的记录集中存放,当对这些记录集进行大规模的查找的时候,磁头不需要来回移动,可以一次读出,这样就大大加快了读数据的速度,从而使得整个查询的速度得到提高。范围查询可能从聚簇中获益最大。如果在一个关系上有多个范围查询,包含不同的属性集合,那么在决定应对哪个属性进行聚簇时,应该考虑这些查询的选择性和它们出现的频度。如果一个索引使得查询只通过索引就能完成,则不需要对这个索引进行聚簇(聚簇只是用来从基本关系取元组)。但是,为了维护簇集的相关记录集中存放的性质,当插入一条新的记录,或者删除一条记录的时候,可能要对很多记录进行调整,簇集维护的代价比较高。要根据应用的实际情况来决定是否使用簇集。
��