范式

<!-- /* Font Definitions */ @font-face {font-family:"MS 明朝"; panose-1:2 2 6 9 4 2 5 8 3 4; mso-font-alt:"MS Mincho"; mso-font-charset:128; mso-generic-font-family:roman; mso-font-pitch:fixed; mso-font-signature:-1610612033 1757936891 16 0 131231 0;} @font-face {font-family:SimSun; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:宋体; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:Century; panose-1:2 4 6 4 5 5 5 2 3 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:647 0 0 0 159 0;} @font-face {font-family:"/@SimSun"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"/@MS 明朝"; panose-1:2 2 6 9 4 2 5 8 3 4; mso-font-charset:128; mso-generic-font-family:roman; mso-font-pitch:fixed; mso-font-signature:-1610612033 1757936891 16 0 131231 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0mm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:Century; mso-fareast-font-family:"MS 明朝"; mso-bidi-font-family:"Times New Roman"; mso-font-kerning:1.0pt;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:595.3pt 841.9pt; margin:99.25pt 30.0mm 30.0mm 30.0mm; mso-header-margin:42.55pt; mso-footer-margin:49.6pt; mso-paper-source:0; layout-grid:18.0pt;} div.Section1 {page:Section1;} -->

系数据 库设计 是要遵守一定的 规则 的。尤其是数据 库设计 范式 现简单 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 中可通 器解决其缺点。以后我 共同做 设计 ,也希望大家遵守以上几个范式

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值