博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关系模式数据库设计范式深入浅出
阅读量:5970 次
发布时间:2019-06-19

本文共 3823 字,大约阅读时间需要 12 分钟。

这段时间一直在研究关系模式之类的问题,上午正好有会机和大家分享一下.

    关系数据库计设之时是要守遵必定的规矩的。其尤是数据库计设范式 现单简析分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中可通过触发器处理其缺陷。前当我们共同做计设之时,也望希大家守遵以上几个范式。

文章结束给大家分享下程序员的一些笑话语录: 程序员喝酒

  我偶尔采用“木马策略”、“交叉测试”,时间不长就开始“频繁分配释放资源”,“cache”也是免不了的了,
  不过我从不搞“轮巡”,也不会“捕获异常”,更不会“程序异常”,因为我有理性
克制的。  

转载地址:http://yuwox.baihongyu.com/

你可能感兴趣的文章
自定义Android时钟(支持秒针)
查看>>
Android机器人电池插件源码
查看>>
Android UI:XML文件配置按钮等背景方案
查看>>
2015年9月13日-9月15日课程作业(sed、awk)
查看>>
让人“蛋碎”的ie兼容问题
查看>>
我的友情链接
查看>>
netca error
查看>>
Throwable、Error、Exception、RuntimeException 区别 联系
查看>>
浅谈广告交易系统
查看>>
中国象棋程序的设计与实现(四)-- 一次“流产”的写书计划
查看>>
linux(gentoo)安装配置conky
查看>>
雷观(八):等我有钱了再付费,是一种很扯淡很没有远见的想法
查看>>
SQL语句行列转换两种方法 case ...when 和pivot函数应用
查看>>
C#软件自动更新程序
查看>>
烂泥:Thinkpad E40伤不起啊……
查看>>
C语言 实现一个函数判断year是不是润年
查看>>
离开网易的转型之路3:热爱测试之路-路上的风景
查看>>
IT行业热点商业模式随笔第七章——商业模式创新规律
查看>>
mysql全量和增量备份脚本
查看>>
一篇很好的架构文章
查看>>