物理数据库设计 –引入受控冗余的考虑
《物理数据库设计 –引入受控冗余的考虑》由会员分享,可在线阅读,更多相关《物理数据库设计 –引入受控冗余的考虑(19页珍藏版)》请在装配图网上搜索。
1、,,,,,,,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,引入受控冗余的考虑,,,确定是否放松规范化规则引入受控冗余数据来改善系统性能。,,规范化是确定哪些列属于同一张表的技术。,,实现规范化的结果就是产生
2、最小冗余的表。,,,然而,规范化的数据库设计可能不提供最大的处理效率。,,我们可能愿意接受规范化设计方面的一些损失而实现更好的性能。,,3,,反规范化(,Denormalization,,),对基本表结构的修改,使得新表比原始表的范式低。,,,将两个表合成一个新表,该新表与原表满足相同范式但比原始表包含更多的空值,。,4,,反规范化需要考虑的因素,反规范化需要考虑下列因素,,使实现更加复杂,,会牺牲灵活性,,可能加快检索速度,但会降低更新速度,,通常,如果性能达不到要求,并且表的更新率较低,查询率较高,则反规范化就是可行的。,,5,,反规范化的一个例子,Branch(,branchNo,,st
3、reet,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,复制
4、一对多(,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.catalog
5、No,,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,,,WH
6、ERE,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,创建提取表,,报表要访问派生数据并且基于相同的一组基本表执行多表连接,
7、但是,报表所基于的数据可能是静态的,或者有时不需要当前的数据而是历史数据。,,创建一张基于报表所需要的表的反规范化的提取表,并且容许用户直接访问提取表代替访问基本表。,,最常用的场合是在系统使用率较低时生成提取表,例如在前一天晚上生成当天的提取表。,13,,步骤,7.7,分区表,,除了将表合并在一起之外,另外一个方法就是将表分解成一些较小的并且更易于维护的片段。,,Horizontal partition,,水平分区,:,将表中的记录分布在几个较小的表中。,,Vertical partition,垂直分区,:,将表中的列分布在一些较小的表中,.,,分区在存储和分析大数量数据的应用中非常有用。,
8、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,
9、REFRENCES,branchNo,)),,PARTITION BY,HASH(branchNo,),,(PARTITION b1 TABLESPACE TB01,,,PARTITION b2 TABLESPACE TB02,,,PARTITION b3 TABLESPACE TB03);,16,,分区表的优缺点,,优点,:,,改善负载平衡:分解后的表可以放置在二级存储的不同地方,允许并发访问。,,改善性能:并行机制。,,增强可用性:不同存储区域,提高了可用性。,,改善可恢复性:分区越小,恢复起来越快。,,安全性:不同分区的数据可以有不同的访问机制。,,缺点,:,,复杂:多个分区的查询比较复
10、杂。,,降低性能:当查询用到多个分区中的数据时,降低了性能。,,重复:垂直分解涉及主键的复制。,17,,如何维护数据完整性,触发器:用于自动更新派生或复制的数据。,,事务:在每个应用中构建事务使数据在一个事务中完成。,,批程序:在合适的时间运行批程序保持反规范化数据的一致。,18,,小结,在步骤,7,中,考虑引入受控冗余,以改善性能。,,如果性能达不到要求而且表的更新率比较低而查询率非常高,则非规范化可能是个可行的选择。,,在如下情况下考虑反规范化,特别是对于加速常用或关键事务:合并,1:1,关系;复制,1:*,关系中的非键列来减少连接;复制,1:*,关系的外键来减少连接,复制*,:*,关系中的列来减少连接;引入重复组;创建提取表;划分非常大的表。,19,,
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。