仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 714|回复: 7
打印 上一主题 下一主题

[学习教程] MSSQL编程:[保藏]数据库计划中的反标准手艺切磋

[复制链接]
只想知道 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:24:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
先说DDL的分类。有一类DDL,是不需要重建表的,比如加非聚簇索引。这类操作其实不会丢数据,也是在原表上直接操作,对于我们“以恢复数据为目的”的闪回,是可以先忽略的。另外一类,则是会影响到表数据的操作。标准|计划|数据|数据库|数据库计划


数据库计划中的反标准手艺切磋



注:这是好久之前在一个论坛看到的文章,以为写的不错;本着与浩瀚业内助士交换、传布头脑的目标展现在此,原论坛的称号已不记得了,事先亦是转载。你能够恣意转载此文,但由此引发的任何品德、功令纠葛与http:blog.csdn.net/aceplus有关,且http:blog.csdn.net/aceplus包管未将此文用作任何贸易和不法用处;假如您是本文的原作者,以为http:blog.csdn.net/aceplus转载伤害了您的权益,请邮件接洽我:aceplus@263.net



原题目:浅谈数据库计划中的反标准


1.择要


 本文从进步数据库功能的角度,先容了数据库计划中几种经常使用的反标准办法,并对这些办法的优弱点和利用时的注重事项做了较为深切的叙述。 

关头词: 数据库计划  反标准  进步功能




2.数据库计划简述
数据库计划是把实际天下的贸易模子与需求转换成数据库的模子的历程,它是创建数据库使用体系的中心成绩。计划的关头是怎样使计划的数据库能公道地存储用户的数据,便利用户举行数据处置。 

 数据库计划完整是人的成绩,而不是数据库办理体系的成绩。体系不论计划是好是坏,还是运转。数据库计划应该由数据库办理员和体系剖析员一同和用户一道事情,懂得各个用户的请求,配合为全部数据库做出得当的、完全的计划。  

数据库及其使用的功能和调优都是创建在优秀的数据库计划的基本上,数据库的数据是统统操纵的基本,假如数据库计划欠好,则别的统统调优办法进步数据库功能的效果都是无限的。  

数据的标准化
2.1.范式概述
    标准化实际是研讨怎样将一个欠好的干系形式转化为好的干系形式的实际,标准化实际是环绕范式而创建的。标准化实际以为,一个干系数据库中一切的干系,都应满意必定的标准(束缚前提)。标准化实际把干系应满意的标准请求分为几级,满意最低请求的一级叫做第一范式(1NF),在第一范式的基本上提出了第二范式(2NF),在第二范式的基本上又提出了第三范式(3NF),今后又提出了BCNF范式,4NF,5NF。范式的品级越高,应满意的束缚集前提也越严厉。标准的每级别都依附于它的前一级别,比方若一个干系形式满意2NF,则必定满意1NF。上面我们只先容1NF,2NF,3NF范式。  
2.2.1NF
1NF是干系模子的最低请求,它的划定规矩是:  

每列必需是原子的,不克不及分红多个子列。

每行和列的地位只能有一个值。

不克不及具有多值列。

例:假如请求一个先生一行,一个先生可选多门课,则上面的“先生”表就不满意1NF:student(s-no,s-name,class-no)

个中:s-no为学号,s-name为先生姓名,class-no为课程号。由于一个先生可选多门课,以是列class-no有多个值,以是空不切合1NF。

  标准化就是把它分红以下两个表:“先生”表和“选课”表,则这两个表就都满意1NF了。

student(s-no,s-name)

stu-class(s-no,class-no)  
2.3.2NF
  关于满意2NF的表,除满意1NF外,非主码的列必需依附于一切的主码,而不是组合主码的一部分。假如满意1NF的表的主码只要一列,则它主动满意2NF。  例:上面的“选课”表,不切合2NF。

stu-class(s-no,class-no,class-name)

个中:class-name为课程称号。由于词表的主码是:(s-no,class-no),非主码列class-name依附于组合主码的一部分class-no,以是它不切合2NF。

对该表标准化也是把它分化成两个表:“选课”表和“课程”表,则它们就都满意2NF了。

stu-class(s-no,class-no)

class(class-no,class-name)  
2.4.3NF
  3NF的划定规矩是除满意2NF外,任一非主码列不克不及依附于别的非主码列。  例:上面的“课程”表,不切合3NF。

class(class-no,class-name,teacher-no,teacher-name)

个中:teacher-no为任课教员号,teacher-name为任课教员姓名。由于非主码列teacher-name依附于另外一非主码列teacher-no,以是它不切合3NF。  其办理举措也是把它分化成两个表:“课程”表和“教员”表,则它们就都满意3NF了。  

class(class-no,class-name,teacher-no)

teacher(teacher-no,teacher-name) 
2.5.小结
  当一个表是标准的,则其非主码列依附于主码列。从干系模子的角度来看,表满意3NF最切合尺度,如许的计划简单保护。一个完整标准化的计划其实不总能天生最优的功能,因而一般是先依照3NF计划,假如有功能成绩,再经由过程反标准来办理。  

数据库中的数据标准化的长处是削减了数据冗余,勤俭了存储空间,响应逻辑和物理的I/O次数削减,同时加速了增、删、改的速率,可是对完整标准的数据库查询,一般必要更多的毗连操纵,从而影响查询的速率。因而,偶然为了进步某些查询或使用的功能而损坏标准划定规矩,即反标准。
3.数据的反标准

3.1.反标准的优点
是不是标准化的水平越高越好?这要依据必要来决意,由于“分别”越深,发生的干系越多,干系过量,毗连操纵越频仍,而毗连操纵是最费工夫的,出格对以查询为主的数据库使用来讲,频仍的毗连会影响查询速率。以是,干系偶然存心保存成非标准化的,大概标准化今后又反标准了,如许做一般是为了改善功能。比方帐户体系中的“帐户”表B-TB01,它的列busi-balance(企业帐户的总余额)就违背标准,个中的值能够经由过程上面的查询取得: 

selectbusi-code,sum(acc-balance) 

fromB-TB06  

groupbybusi-code

  假如B-TB01中没有该列,若想取得busi-name(企业称号)和企业帐户的总余额,则必要做毗连操纵:  

selectbusi-name,sum(acc-balance)  

fromB-TB01,B-TB06  

whereB-TB01.busi-code=B-TB06.busi-code  

groupbybusi-code

假如常常做这类查询,则就有需要在B-TB01中到场列busi-balance,响应的价值则是必需在表B-TB06上创立增、删、改的触发器来保护B-TB01表上busi-balance列的值。相似的情形在决议撑持体系中常常产生。 

反标准的优点是下降毗连操纵的需求、下降外码和索引的数量,还大概削减表的数量,响应带来的成绩是大概呈现数据的完全性成绩。加速查询速率,但会下降修正速率。因而决意做反标准时,必定要衡量利害,细心剖析使用的数据存取需乞降实践的功能特性,好的索引和别的办法常常可以办理功能成绩,而不用接纳反标准这类办法。  




3.2.经常使用的反标准手艺
在举行反标准操纵之前,要充实思索数据的存取需求、经常使用表的巨细、一些特别的盘算(比方算计)、数据的物理存储地位等。经常使用的反标准手艺有增添冗余列、增添派生列、从头组表和支解表。 


3.2.1.增添冗余列


增添冗余列是指在多个表中具有不异的列,它经常使用来在查询时制止毗连操纵。比方后面例子中,假如常常检索一门课的任课教员姓名,则必要做class和teacher表的毗连查询:

  selectclass-name,teacher-name  

fromclass,teacher  

whereclass.teacher-no=teacher.teacher-no  

如许的话就能够在class表中增添一列teacher-name就不必要毗连操纵了。

增添冗余列能够在查询时制止毗连操纵,但它必要更多的磁盘空间,同时增添表保护的事情量。
3.2.2.增添派生列
增添派生列指增添的列来自别的表中的数据,由它们盘算天生。它的感化是在查询时削减毗连操纵,制止利用集函数。比方后面所讲的账户体系中的表B-TB01的列busi-balance就是派生列。派生列也具有与冗余列一样的弱点。
3.2.3.从头组表
从头组表指假如很多用户必要检察两个表毗连出来的了局数据,则把这两个表从头构成一个表来削减毗连而进步功能。比方,用户常常必要同时检察课程号,课程称号,任课教员号,任课教员姓名,则可把表class(class-no,class-name,teacher-no)和表teacher(teacher-no,teacher-name)兼并成一个表class(class-no,class-name,teacher-no,teacher-name)。如许可进步功能,但必要更多的磁盘空间,同时也丧失了数据在观点上的自力性。  


3.2.4.支解表
偶然对表做支解能够进步功能。表支解有两种体例: 

1程度支解:依据一列或多列数据的值把数据行放到两个自力的表中。  程度支解一般鄙人面的情形下利用:A表很年夜,支解后能够下降在查询时必要读的数据和索引的页数,同时也下降了索引的层数,进步查询速率。B表中的数据原本就有自力性,比方表平分别纪录各个区域的数据或分歧时代的数据,出格是有些数据经常使用,而别的一些数据不经常使用。C必要把数据寄存到多个介质上。  比方律例表law就能够分红两个表active-law和inactive-law。activea-authors表中的内容是正失效的律例,是常常利用的,而inactive-law表则使已取消的律例,不常被查询。程度支解会给使用增添庞大度,它一般在查询时必要多个表名,查询一切数据必要union操纵。在很多数据库使用中,这类庞大性会凌驾它带来的长处,由于只需索引关头字不年夜,则在索援用于查询时,表中增添两到三倍数据量,查询时也就增添读一个索引层的磁盘次数。

  2垂直支解:把主码和一些列放到一个表,然后把主码和别的的列放到另外一个表中。假如一个表中某些列经常使用,而别的一些列不经常使用,则能够接纳垂直支解,别的垂直支解可使得数据行变小,一个数据页就可以寄存更多的数据,在查询时就会削减I/O次数。其弱点是必要办理冗余列,查询一切数据必要join操纵。  
4.反标准手艺必要保护数据的完全性
  不管利用何种反标准手艺,都必要必定的办理来保护数据的完全性,经常使用的办法是批处置保护、使用逻辑和触发器。批处置保护是指对复制列或派生列的修正堆集必定的工夫后,运转一批处置功课或存储历程对复制或派生列举行修正,这只能在对及时性请求不高的情形下利用。数据的完全性也可由使用逻辑来完成,这就请求必需在统一事件中对一切触及的表举行增、删、改操纵。用使用逻辑来完成数据的完全性风险较年夜,由于统一逻辑必需在一切的使用中利用和保护,简单漏掉,出格是在需求变更时,不容易于保护。另外一种体例就是利用触发器,对数据的任何修正当即触发对复制列或派生列的响应修正。触发器是及时的,并且响应的处置逻辑只在一个中央呈现,易于保护。一样平常来讲,是办理这类成绩的最好的举措。  
5.停止语
   数据库的反标准计划能够进步查询功能。经常使用的反标准手艺有增添冗余列、增添派生列、从头组表和支解表。但反标准手艺必要保护数据的完全性。因而在做反标准时,必定要衡量利害,细心剖析使用的数据存取需乞降实践的功能特性。
InnoDB事务型数据库的首选引擎,支持ACID事务,支持行级锁定
冷月葬花魂 该用户已被删除
沙发
发表于 2015-1-19 11:04:38 | 只看该作者
如果是将来做数据库的开发设计,就应该详细学习T-SQL的各种细节,包括T-SQL的程序设计、存储过程、触发器以及具体使用某个开发语言来访问数据库。
不帅 该用户已被删除
板凳
发表于 2015-1-24 15:09:02 | 只看该作者
两个月啃那本sqlserver2005技术内部-存储引擎,花了几个月啃四本书
变相怪杰 该用户已被删除
地板
发表于 2015-2-7 13:27:23 | 只看该作者
记得在最开始使用2k的时候就要用到这个功能,可惜2k没有,现在有了作解决方案的朋友会很高兴吧。
admin 该用户已被删除
5#
发表于 2015-2-22 00:53:47 | 只看该作者
这就引发了对varchar和char效率讨论的老问题。到底如何分配varchar的数据,是否会出现大规模的碎片?
因胸联盟 该用户已被删除
6#
发表于 2015-3-6 22:31:25 | 只看该作者
两个月啃那本sqlserver2005技术内部-存储引擎,花了几个月啃四本书
老尸 该用户已被删除
7#
发表于 2015-3-13 22:12:57 | 只看该作者
我是新手,正在学习数据库和操作系统,深感理论的泛广,唯有一步一步来,但是又感觉时间不够,收集了很多资料却总是没能认真的看完,希望有一个讨论板块,大家共同解决,共同分享,共同努力
深爱那片海 该用户已被删除
8#
发表于 2015-3-20 21:08:42 | 只看该作者
其中最有名的应该是row_number了。这个终于解决了用临时表生成序列号的历史,而且SQLServer2005的row_number比Oracle的更先进。因为它把Orderby集成到了一起,不用像Oracle那样还要用子查询进行封装。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 23:50

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表