数据库设计范式深入浅出 |
关系数据库设计之时是要 恪守 定然的 规定的 。尤其是数据库设计范式 现 容易介绍1NF(第一范式),2NF(第二范式),3NF(第三范式)和BCNF,另有第四范式和第五范式留到以后再介绍 。 在你设计数据库之时,若能 相符这几个范式,你便是数据库设计的高手 。 第一范式(1NF):在关系模式R中的每一个具体关系r中,假如每个属性值 都是不可再分的最小数据单位,则称R是第一范式的关系 。例:如职工号,姓名,电话号码构成一个表(一个人可能有一个办公室电话 和一个家里电话号码) 标准成为1NF有三种 步骤: 一是 反复存储职工号和姓名 。这样, 要害字不得不是电话号码 。 二是职工号为 要害字,电话号码分为单位电话和住宅电话两个属性 三是职工号为 要害字,但强制每条记录不得不有一个电话号码 。 以上三个 步骤,第一种 步骤最不可取,按实际状况选取后两种状况 。 第二范式(2NF):假如关系模式R(U,F)中的所有非主属性都 彻底依赖于任意一个候选 要害字,则称关系R 是属于第二范式的 。 例:选课关系 SCI(SNO,CNO,GRADE,CREDIT)其中SNO为学号, CNO为课程号,GRADEGE 为 成就,CREDIT 为学分 。 由以上条件, 要害字为组合 要害字(SNO,CNO) 在 利用中 使用以上关系模式有以下问题: a.数据冗余, 假如同一门课由40个学生 必修,学分就 反复40次 。 b.更新 异样,若调整了某课程的学分,相应的元组CREDIT值都要更新,有可能会浮现同一门课学分不同 。 c.插入 异样,如 方案开新课,由于没人 必修,没有学号 要害字,不得不等有人 必修 威力把课程和学分存入 。 d.删除 异样,若学生已经结业,从目前数据库删除 必修记录 。某些门课程新生尚未 必修,则此门课程及学分记录 无奈 保留 。 缘由:非 要害字属性CREDIT仅函数依赖于CNO,也便是CREDIT 部分依赖组合 要害字(SNO,CNO)而不是 彻底依赖 。 解决 步骤:分成两个关系模式 SC1(SNO,CNO,GRADE),C2(CNO,CREDIT) 。新关系包括两个关系模式,它们中间通过SC1中的外 要害字CNO相 联络,需要时再进行自然联接, 复原了原来的关系 第三范式(3NF):假如关系模式R(U,F)中的所有非主属性对任何候选 要害字都不存在传递信任,则称关系R是属于第三范式的 。 例:如S1(SNO,SNAME,DNO,DNAME,LOCATION) 各属性分别代表学号, 姓名,所在系,系名称,系地址 。 要害字SNO决定各个属性 。由于是单个 要害字,没有 部分依赖的问题, 确定是2NF 。但这关系 确定有大量的冗余,有关学生所在的几个属性DNO,DNAME,LOCATION将 反复存储,插入,删除和 批改时也将产生 类似以上例的状况 。 缘由:关系中存在传递依赖造成的 。即SNO -> DNO 。 而DNO -> SNO却不存在,DNO -> LOCATION, 因此 要害辽 SNO 对 LOCATION 函数决定是通过传递依赖 SNO -> LOCATION 实现的 。也便是说,SNO不直接决定非主属性LOCATION 。 解决目地:每个关系模式中不能留有传递依赖 。 解决 步骤:分为两个关系 S(SNO,SNAME,DNO),D(DNO,DNAME,LOCATION) 留神:关系S中不能没有外 要害字DNO 。不然两个关系中间失去 联络 。 BCNF:假如关系模式R(U,F)的所有属性(包括主属性和非主属性)都不传递依赖于R的任何候选 要害字,那么称关系R是属于BCNF的 。或是关系模式R,假如每个决定因素都包括 要害字(而不是被 要害字所包括),则RCNF的关系模式 。 例:配件治理关系模式 WPE(WNO,PNO,ENO,QNT)分别表仓库号,配件号,职工号,数量 。有以下条件 a.一个仓库有多个职工 。 b.一个职工仅在一个仓库工作 。 c.每个仓库里一种型号的配件由专人负责,但一个人 可以治理几种配件 。 d.同一种型号的配件 可以分放在几个仓库中 。 综合:由以上得 PNO 不能确定QNT,由组合属性(WNO,PNO)来决定,存在函数依赖(WNO,PNO) -> ENO 。由于每个仓库里的一种配件由专人负责,而一个人 可以治理几种配件,所以有组合属性(WNO,PNO) 威力确定负责人,有(WNO,PNO)-> ENO 。由于 一个职工仅在一个仓库工作,有ENO -> WNO 。由于每个仓库里的一种配件由专人负责,而一个职工仅在一个仓库工作,有 (ENO,PNO)-> QNT 。 找一下候选 要害字,由于(WNO,PNO) -> QNT,(WNO,PNO)-> ENO , 因此 (WNO,PNO) 可以决定整个元组,是一个候选 要害字 。依据ENO->WNO,(ENO,PNO)->QNT,故(ENO,PNO)也能决定整个元组,为另一个候选 要害字 。属性ENO,WNO,PNO 均为主属性,惟独一个非主属性QNT 。它对任何一个候选 要害字都是 彻底函数依赖的,而且是直接依赖,所以该关系模式是3NF 。 综合一下主属性 。由于ENO->WNO,主属性ENO是WNO的决定因素,然而它 本身不是 要害字,只不过组合 要害字的一 部分 。这就造成主属性WNO对另外一个候选 要害字(ENO,PNO)的部 分依赖,由于(ENO,PNO)-> ENO但反过来不成立,而P->WNO,故(ENO,PNO)-> WNO 也是传递依赖 。 固然没有非主属性对候选 要害辽的传递依赖,但存在主属性对候选 要害字的传递依赖,同样也会带来麻烦 。如一个新职工 调配到仓库工作,但临时处于实习阶段,没有独立负责对某些配件的治理 使命 。由于 缺乏 要害字的一 部分PNO而 无奈插入到该关系中去 。又如某个人改成 无论配件了去负责安全,则在删除配件的同时该职工也会被删除 。 解决 步骤:分成治理EP(ENO,PNO,QNT), 要害字是(ENO,PNO)工作EW(ENO,WNO)其 要害字是ENO 缺陷:分解后函数依赖的 维持性较差 。如此例中,由于分解,函数依赖(WNO,PNO)-> ENO 迷失了, 因此对原来的语义有所 毁坏 。没有体现出每个仓库里一种部件由专人负责 。有可能浮现 一部件由两个人或两个以上的人来同时治理 。 因此,分解之后的关系模式减低了 部分 完全性 束缚 。 一个关系分解成多个关系,要使得分解有 意思,起码的要求是分解后不 迷失原来的信息 。这些信息不只包括数据 本身,而且包括由函数依赖所 示意的数据中间的 彼此制约 。进行分解的 指标是达到更高一级的 标准化程度,然而分解的同时必须考量两个问题:无损联接性和 维持函数依赖 。有时一般不可能做到既有无损联接性,又 彻底 维持函数依赖 。需要依据需要进行 衡量 。 1NF直到BCNF的四种范式中间有如下关系: BCNF包括了3NF包括2NF包括1NF 小结: 目地: 标准化 目标是使 构造更 正当, 肃清存储 异样,使数据冗余尽量小,便于插入、删除和更新 准则: 听从概念单一化 "一事一地" 准则,即一个关系模式 形容一个实体或实体间的一种 联络 。 标准的 本质便是概念的单一化 。 步骤:将关系模式投影分解成两个或两个以上的关系模式 。 要求:分解后的关系模式 集中 该当与原关系模式"等价",即 通过自然联接 可以恢 复原关系而不 迷失信息,并 维持属性间 正当的 联络 。 留神:一个关系模式结这分解 可以得到不同关系模式 集中,也便是说分解 步骤不是唯一的 。最小冗余的要求必须以分解后的数据库 可以 抒发原来数据库所有信息为前提来实现 。其 根本 指标是 节俭存储空间,幸免数据不 统一性, 普及对关系的操作效率,同时满足 利用需要 。实际上,并不 定然要求所有模式都达到BCNF不可 。有时有意保留 部分冗余可能更容易数据 查问 。尤其关于那些更新频度不高, 查问频度极高的数据库系统更是如此 。 在关系数据库中,除了函数依赖之外还有多值依赖,联接依赖的问题,从而提出了第四范式,第五范式等更高一级的 标准化要求 。在此,以后再谈 。 各位朋友,你看过后有何感想,其实,任何一本数据库 根底 实际的书都会讲这些东西,考量到众多网友是半途出家,来做数据库 。特找一本书大抄特抄一把,各位有什么问题,也别问我了,自已去找一本关系数据库 实际的书去看吧,说不定,对各位大有协助 。说是说以上是 根底 实际的东西,请大家想想,你在做数据库设计的时候有没有考量过遵过以上几个范式呢,有没有在数据库设计做得不好之时,想一想,对照以上所讲,到底是违反了第几个范式呢? 我见过的数据库设计,很少有人做到很 相符以上几个范式的,一般说来,第一范式大家都 可以 恪守, 彻底 恪守第二第三范式的人很少了, 恪守的人 定然便是设计数据库的高手了,BCNF的范式浮现机会较少,而且会 毁坏 完全性,你 可以在做设计之时不考量它,固然在ORACLE中可通过触发器解决其缺陷 。以后我们一起做设计之时,也 盼望大家 恪守以上几个范式 。 |