你真的了解 “范式”吗?_第1页
你真的了解 “范式”吗?_第2页
你真的了解 “范式”吗?_第3页
你真的了解 “范式”吗?_第4页
你真的了解 “范式”吗?_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、你真的了解“范式”吗?就关系数据库而言,一贯认为:从其他元素中消除数据冗余问题,去除重复往往以减少冗余,从特定的表中最小化冗余意味着摆脱不必要的数据。商业上来讲,主要目标是通常保存空间和组织的数据可用性和可管理性,而不牺牲性能。此外,要求强烈繁忙的应用程序和最终用户的需要往往需要以多种方式打破规则的范式,以满足性能要求。第三范式以外的范式常常被忽视和有时甚至是第三范式本身就是多余的。范式是一个升级的过程,每个上层的模式都是建立在下一级范式之上的。消除数据冗余的影响如下:物理空间需要存储的数据减少。口数据变得更有组织。范式化允许修改少量的数据(即单记录)。换言之,一个表的具体字段记录更新时,会影

2、响其他引用他的表。首先我们对一些概念性的东西来进行一个总结,通过对这些概念的理解,从来从根本上做到合理的数据库设计:一异常添加异常:当我们添加一条记录的时候,他依赖的主表记录还没有记录,而该记录已经插入成功。删除异常:当我们的主表记录删除,而依赖他的子表没有清空对应的记录。更新异常:当我们的主表记录有更新草组,而已来他的子表没有相应的更新记录。二依赖,决定因子函数依赖:当Y的值由X决定的时候,我们就说Y函数依赖于X,这就类似于一个线性方程:Y=X+1;类似的ERD图中,我们这样表示Cntegoiy#匚:血口口iylDoNameoFic,很清楚的看到表Category,中的主键是Category

3、lD,他决定着其他字段的值Name和Pic,我们就说Name或者Pic函数依赖于CategoryID,他们之间就是一个函数依赖关系。决定因素:如上例中,CategorylD就是一个决定因素,他决定其他字段的值,Y=X+1中,X就决定着Y的值,虽然加了一个常量。传递依赖:当X决定Y,Y决定Z的时候,我们就说Z传递依赖于X,从这个ERD图中,我们看到Account帐号表中的City字段,他被AccountID所决定,而City字段的值又决定了College的值,因为大学肯定是被城市所决定,所以College就传递依赖于AccountID。候选键:候选键(潜在的或允许的主键)可以扮演主键的角色他可以

4、是一个表中的一个字段或组合字段-也就是一条记录中的唯一标识。个表,Customer表(客户表),字段分别表示,客户ID,客户名,货币缩写码,货币,转换汇率,地址。这个表我们没有定义主键,但是我们可以推测那些可以成为主键,那么那些键就叫做候选键。Custumerl#CList。eeID2oCustomei2oCurrencyCode2oCurrency?oExchangeF:ate2oAddress2CustomerCustumt!rlD2Custumt!i2CurrencyCode2Currency?ExchangeRate2AddressSoCustumerlD3oCustomersCurr

5、encyCode3Currency3Exch3ngeF:3te3Adcke:sS3Customer3oCustumerlD3#CustoE曲oCurrencyCode3oCurrency3oExcharigeRateSAddresS3Customer4CuKomerlD4CustDEEi4CurrencyCodEjSCurrency4Address4我们就看到了,所有能成为主键的可能,表中的#就是主键的标识符。完全函数依赖:当X决定Y,但是X不被X和Z的组合所决定,换句话说,YE依赖于独立的X,如果Y依赖于X加上一些其他的东西,那就不是完全函数依赖,本质上,决定因TravelT玉怕丨丨D匚:口

6、iit“lDoFupulication素X不能是一个组合键。,我们来看到旅游表Travel,Country是旅游的国家,Populication是旅游的城市,同时TravellD和CountrylD是主键,可以看出来只有CountryID决定着Populcation人口,但是这里有两个主键,所以Populication并没有完全函数依赖于主键组合,只部分依赖于CountryID多值依赖:某个字段中的值是一个集合,或者是用某种分隔符分割开来的元素集合,我们就称Employee#Ee口1小忙已丨DotiilanagerlC1oNameoPath为多值依赖。很经典的,Path保存的这个递归表的所有上

7、司的级别,比如老大的ID是1,老2是2,Path就保存1,2,像这样的字段,我们就称为多值依赖。循环依赖:循环依赖就如其名,是一个个闭环的依赖系统。A依赖于B,B依赖于C,C依赖于A。三范式(学术定义)第一范式(1NF):消除表中所有重复的属性。第二范式(2NF):所有非键值字段必须全部完全函数依赖于主键,当一个字段完全函数依赖于任一主键的一部分时,是不允许的。第三范式(3NF):消除传递依赖,意味着一个字段必须非间接的依赖于主键正规化范式(BCDF):所有表中的决定因素必须是一个候选键,如果只有一个候选键,那么就和第三范式是一样的。第四范式(4NF):消除多值依赖。第五范式(5NF):消除循

8、环依赖。我们从一个比较容易的位置来理解范式,通过上述的理解,加上实际的操作范式,让我们对数据库的设计有一个比较深的认识,以决定什么情况下用范式。1、第一范式(1NF):通过创建一个新表来移除重复的元素,使他们成为一个主从关系或者是onetomany的关系,类似下图:2、第二范式(2NF):建立在1NF的基础上,就是移除重复的列到一个新表中去,新表有唯一的主键,而主表有一个对新表的外键的引用,排除存在的部分依赖。如下图:Bookid是book表的主键,而author是authorl的主键,在book表中建立author,主表有一个对子表的外键引用,而不是把author也定义为主键,那样就存在部分

9、函数依赖,因为bookid就已经确定了title,page,isbn等等信息。3、第三范式(3NF):消除传递依赖,如下图:我们把多对多的关系变化成上图的关系。这是一种简单的形式,下面展示一个另外一种情况:这里的表分别是客户(客户名,货币号,货币,货币,汇率,地址),提供商(客户名,货币号,货币,汇率,地址)。首先他们的地址决定了他们的货币情况,而地址又是由客户或者提供商决定的,所以他们之间存在一个传递依赖关系,而且最好是把相同的存在于不同地Account#.凸.ccountlDoCityoCollege方的数据移植到一个新表中去。前面我们提到了这个关系,也是一个不满足第三范式的表,City和

10、College以及主键存在传递关系,所以可以把College移植到一个新表中去,还有一些存在订单的表中,有类似(qty(数量),price(单价),total(总价)的结构,qty和price决定了total,而订单号决定了qty和,price,所以也存在一种依赖关系,我们要删除total字段,但是不是都遵循范式的表都是好的结构,我们还是要根据实际情况,比如在一个数据仓库的设计中,汇总字段就是必须的。4、超三范式(Beyond3NF)中的onetoone关系,这个主要用户当我们表中一些字段经常存在空值的时候,我们将存在的NULL字段移到一个新表中去,然后建立1对1的关系。5、BCNF范式:BC

11、NF划分成多个表的表格,以确保没有一个单一的表有更多不止一个潜在的主键。这是我的理解BCNF。在我看来,是BCNF用于商业环境是“过度设计“的。从本质上讲,从数学的角度上它的漂亮,但在商业环境中它不是很酷。下面的例子是一个BCNF转换:Employee#EE口1OeIDoWanagerlDoNameoPath5、第四范式:消除多值依赖,很经典的一个环境就是,我们的递归表问题,一个Manager有多个Employee,然后每条记录都有一个Path来表示这种关系,所以path和Employeeld就存在一个多对多的关系。我们就应该重新建立一个新表,用来消除Path字段,新表中就保留一个Employ

12、eeld作为外键,另外一个Employeeld用来表示他的下属。6、第五范式(5NF):消除循环依赖,如下图:在这个实例中Solution表中的键都是主键,他们存在这样的关系,每两个组合的主键决定另外一个主键。比方项目1和经理1就决定了有哪些下属属于项目1和经理1关系,而一个经理1和他的下属员工又决定了他们参与了那些项目。所以他们之间其实是一个循环的依赖。7、反范式:这种类型的应用在商业正常化环境将导致业绩不佳,更精确的数学的必要性比商业要低的多。因此:Developers#D臼.佗1。口eDeveIoper#D佗Id口已oSkillsoCertificationEntit:1._38oDev

13、eIoperoCertification同样的,对于第4范式,我们很多时候都没有必要去消除他们里面多值的依赖,那样对性能来说简直是个噩梦。所以很多情况下,我们都是用类似的处理:=:killoDeveIoperoSkillsCSDN上的,显示自己的技术就是这样的反范式化转换。在商业环境中,绝大多数超越第3范式的设计都是不切实际的。因为应用程序在3NF级别就能变现的相当出色。我们上述的很多例子,将指向箭头反过来就是反范式化。所以我们要对整体的结构有个比较深的认识,才确定我们是否范式化或者反范式化,范式化越深的东西越导致表的增多,也就意味着查询的join开销。总结一下反范式化的一些准则:分离活动和静态的数据,数据可分为独立的物理表,即/活动和静态表。那些累计的历史数据导致我们占据了绝大多数的空间。这是影响性能的最经常的数据,在数据仓库设计中,我们经常将无效的静态的数据移植到数据仓库中,由于OLAP和数据挖掘。/在表之间

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论