1. 数据库物理设计的目标
  不同的DBMS所提供的物理环境、存取方法和存储结构有很大差别,提供给设计人员使用的设计选择范围也很不相同,因此没有通用的物理设计方法可遵循,只能给出一般的设计内容和原则。希望设计优化的物理数据库结构,使得在数据库上运行的各种事务响应时间小、存储空间利用率高、事务吞吐率大。
  综合数据库物理设计的目标是:
 (1) 提高数据库应用系统的性能,特别是满足主要应用的性能要求。
 (2) 有效地利用存储空间。
  为此,首先须要对主要的运行事务进行详细分析,获得选择物理数据库设计所需要的参数。其次,要充分了解所用的RDBMS的内部特征,特别是系统提供的存取方法和存储结构。了解查询和更新事务是确定关系的存取方法的主要依据。
  对于数据库查询事务,需要得到如下信息:
 ● 经常查询的关系和查询条件所涉及的属性;
 ● 连接条件所涉及的属性和查询的属性。
  对于数据更新事务,需要得到如下信息:
 ● 被更新的关系,每个关系上的更新操作条件所涉及的属性;
 ● 修改操作经常要改变的属性值。
  应注意的是,数据库上运行的事务会不断变化、增加或减少,以后需要根据上述设计信息的变化调整数据库的物理结构。
 2. 选择关系模式的存取方法
  存取方法是快速存取数据库中数据的关键技术,物理设计的任务之一就是要确定选择哪些存取方法。常用的存取方法有索引方法和聚簇(Cluster)方法。
 (1) 索引存取方法
  索引存取方法就是根据应用要求确定对关系的哪些属性列建立索引、哪些属性列建立组合索引、哪些索引要设计为唯一索引等。
  选择索引的启发式规则是:
 ①凡是满足下列条件之一的属性或表,不宜建立索引
 ・ 不出现或很小出现在查询条件中的属性。
 ・ 属性值很少的属性。
 ・ 属性值分布严重不均的属性。
 ・ 经常更新的属性或表
 ・ 过长的属性
 ・ 太小的表
 ②凡符合下列条件之一,可以考虑在有关属性上建立索引
 ・ 主键或外键上一般都建有索引;
 ・ 对于以读为主或只读的表,如果存储空间允许,可以多建索引;
 ・ 对于等值查询,如果满足条件的元组是少量的,则可以考虑在有关属性上建立索引;
 ・ 对于范围查询,最好在有关的属性上建立簇集索引,如果已在其它属性上建立簇集索引,可以考虑建立非簇集索引。
 ・ 有些查询可以直接从索引直接得到结果,不必访问数据块。对于这种查询,可以考虑在有关属性上建立索引。
 这些查询包括:
 a)查询某属性的MIN、MAX、AVG、SUM、COUNT等聚集函数值(无GROUP BY子句)。
 b)查询某属性值EXIST或NOT EXISTS。

 (3) 聚簇存取方法:
  为了提高某个属性(或属性组)的查询速度,把这个或这些属性(称为聚簇码)上具有相同值的元组集中存放在连续的物理块称为聚簇。
  创建聚簇可以提高按聚簇码进行查询的效率。
  例如:设要查询信息系的所有学生名单,如果信息系有500学生,在极端情况下,这500名学生所对应的数据元组分布在500个不同的物理块上,尽管可以按系名建立索引,由索引找到信息系学生的元组标识,但由元组标识去访问数据块时就要存取500个物理块,执行500次I/O操作。如果在系名这个属性上建立聚簇,则同一系的学生元组将集中存放,将显著地减少访问磁盘的次数。
  使用聚簇需要注意的问题:
 ・ 一个关系最多只能加入一个聚簇;
 ・ 在一个关系上建立聚簇,将使此关系上的原有的索引无效,必须重建;
 ・ 在聚簇码中,应至少有一个属性,其说明为NOT NULL。
 ・ 聚簇对于某些特定应用可以明显地提高性能,但建立聚簇和维护聚簇的开销很大。

  选择聚簇的启发式规则:
 ①凡符合下列条件之一,可以考虑建立聚簇:
 ・ 通过聚簇码进行访问或连接是该表的主要应用,与聚簇码无关的其它访问很少或者是次要的。尤其当语句中包含与聚簇码有关的ORDER BY, GROUP BY, UNION, DISTINCT等语法成分时。
・ 如果一个关系的一个或一组属性上的值的重复率很高。
 ②凡存在下列条件之一,应考虑不建立聚簇
 ・ 需要经常对全表进行扫描。
 ・ 在某属性列上的更新操作远多于查询和连接操作的表。
  必须强调的是,聚簇只能提高某些应用的性能,而且建立与维护聚簇的开销是相当大的。对已有关系建立聚簇,将导致关系中元组移动其物理存储位置,并使此关系的存储位置也要做相应移动,聚簇码值要相对稳定,以减少修改聚簇码值所引起的维护开销。
 3.评价物理结构
  在数据库物理设计过程中,需要对时间效率、空间效率、维护代价和各种用户要求进行权衡,其结果可以产生多种方案,数据库设计人员必须对这些方案进行细致的评价,从中选择一个较优的方案作为数据库的物理结构。
  评价物理数据库的方法依赖于所选用的DBMS,主要是从定量估算各种方案的存储空间、存取时间和维护代价入手,对估算结果进行权衡、比较,选择出一个较优的合理的物理结构。如果该结构不符合用户需求,则需要修改设计。
  注释:物理设计也分为两部分:物理数据库结构的选择和逻辑设计中程序模块说明的精确化。这一阶段的工作成果是一个完整的能实现的数据库结构。