资源描述
,Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,*,*,Chapter 15,物理数据库设计,步骤,7,引入受控冗余的考虑,1,Chapter 15,目的,反规范化的含义,何时利用反规范化来改善系统性能,2,步骤,7,引入受控冗余的考虑,确定是否放松规范化规则引入受控冗余数据来改善系统性能。,规范化是确定哪些列属于同一张表的技术。,实现规范化的结果就是产生最小冗余的表。,然而,规范化的数据库设计可能不提供最大的处理效率。,我们可能愿意接受规范化设计方面的一些损失而实现更好的性能。,3,反规范化(,Denormalization,),对基本表结构的修改,使得新表比原始表的范式低。,将两个表合成一个新表,该新表与原表满足相同范式但比原始表包含更多的空值,。,4,反规范化需要考虑的因素,反规范化需要考虑下列因素,使实现更加复杂,会牺牲灵活性,可能加快检索速度,但会降低更新速度,通常,如果性能达不到要求,并且表的更新率较低,查询率较高,则反规范化就是可行的。,5,反规范化的一个例子,Branch(,branchNo,street,city,state,zipCode,mgrStaffNo,),严格地说,该表并不满足,3NF,。因为,zipCode,属性决定了,city,和,state,。要规范化该表,则将其一分为二。,Branch(,branchNo,street,zipCode,mgrStaffNo,),zipCode(,zipCode,city,state,),但是很少这样使用不完整的地址,因此我们通常使用原始的,Branch,表,尽管它只是满足,2NF,。,6,反规范化步骤,反规范化的通常情况,以便加速进行常用或关键的事务,步骤,7.1,合并一对一(,1:1,)关系,步骤,7.2,复制一对多(,1:*,)关系中的非键列以减少连接,步骤,7.3,复制一对多(,1:*,)关系中的外键列以减少连接,步骤,7.4,复制多对多(*,:*,)关系中的列以减少连接,步骤,7.5,引入重复组,步骤,7.6,创建提取表,步骤,7.7,分区表,7,步骤,7.1,合并,1:1,关系,空间的浪费就不得不与合并表所带来的性能的提高进行权衡了。,8,步骤,7.2,复制,1:*,关系中的非键列以减少连接,SELECT,vfr,.*,v.dailyRental,FROM,VideoForRent,vfr,Video,v,WHERE,vfr.catalogNo,=,v.catalogNo,AND,branchNo,= B001,SELECT,vfr,.*,FROM,VideoForRent,vfr,WHERE,branchNo,= B001,如果修改了父表中的复制数据,则必须在子表中也更新它。,9,步骤,7.3,复制,1:*,关系中的外键列以减少连接,SELECT,ra,.*,FROM,RentalAgreement,ra,VideoForRent,vfr,WHERE,ra.videoNo,=,vfr.videoNo,AND,vfr.branchNo,= B001,SELECT *,FROM,RentalAgreement,WHERE,vfr.branchNo,= B001,10,步骤,7.4,复制,*:*,关系中的列来减少连接,SELECT,v.title,a,.*,r.*,FROM Video,v,Role,r,Actor,a,WHERE,v.catalogNo,=,r.catalogNo,AND,r.actorNo,=,a.actorNo,SELECT a.*,r.*,FROM Role,r,Actor,a,WHERE,r.actorNo,=,a.actorNo,11,Step 7.5,引入重复组,12,步骤,7.6,创建提取表,报表要访问派生数据并且基于相同的一组基本表执行多表连接,但是,报表所基于的数据可能是静态的,或者有时不需要当前的数据而是历史数据。,创建一张基于报表所需要的表的反规范化的提取表,并且容许用户直接访问提取表代替访问基本表。,最常用的场合是在系统使用率较低时生成提取表,例如在前一天晚上生成当天的提取表。,13,步骤,7.7,分区表,除了将表合并在一起之外,另外一个方法就是将表分解成一些较小的并且更易于维护的片段。,Horizontal partition,水平分区,:,将表中的记录分布在几个较小的表中。,Vertical partition,垂直分区,:,将表中的列分布在一些较小的表中,.,分区在存储和分析大数量数据的应用中非常有用。,14,步骤,7.7,分区表,15,分区表举例,通过水平分区,使每个分公司占用一个分区,以提高查询性能。,CREATE TABLE,VideoForRent_Partition,(,videoNo,CHAR(6) NOT NULL,available CHAR NOT NULL,catalogNo,CHAR(6) NOT NULL,branchNo,CHAR(4) NOT NULL,PRIMARY KEY,videoNo,FOREIGN KEY,catalogNo,REFRENCES,Video(videoNo,),FOREIGN KEY,branchNo,REFRENCES,branchNo,),PARTITION BY,HASH(branchNo,),(PARTITION b1 TABLESPACE TB01,PARTITION b2 TABLESPACE TB02,PARTITION b3 TABLESPACE TB03);,16,分区表的优缺点,优点,:,改善负载平衡:分解后的表可以放置在二级存储的不同地方,允许并发访问。,改善性能:并行机制。,增强可用性:不同存储区域,提高了可用性。,改善可恢复性:分区越小,恢复起来越快。,安全性:不同分区的数据可以有不同的访问机制。,缺点,:,复杂:多个分区的查询比较复杂。,降低性能:当查询用到多个分区中的数据时,降低了性能。,重复:垂直分解涉及主键的复制。,17,如何维护数据完整性,触发器:用于自动更新派生或复制的数据。,事务:在每个应用中构建事务使数据在一个事务中完成。,批程序:在合适的时间运行批程序保持反规范化数据的一致。,18,小结,在步骤,7,中,考虑引入受控冗余,以改善性能。,如果性能达不到要求而且表的更新率比较低而查询率非常高,则非规范化可能是个可行的选择。,在如下情况下考虑反规范化,特别是对于加速常用或关键事务:合并,1:1,关系;复制,1:*,关系中的非键列来减少连接;复制,1:*,关系的外键来减少连接,复制*,:*,关系中的列来减少连接;引入重复组;创建提取表;划分非常大的表。,19,
展开阅读全文