SQL三大范式

摘要:
新关系包括两个关系模式,它们由sc1中的外键cno连接。必要时,再次建立自然联系,恢复原始关系。第三范式关系模式R(U,F)中的所有非主要属性对任何候选关键字都没有传递依赖性——S1学生编号、姓名、部门、姓名、地址、关键字SNO决定每个属性。即,SNO不直接确定非主属性LOCATION。数据库表中存在以下确定关系:→ → 因此,和是StorehouseManage的候选项。表中唯一的非关键字段是数量,它符合第三种范式。

第一范式(1NF)

(必须有主键,列不可分)

数据库表中的任何字段都是单一属性的,不可再分

create table aa(id int,NameAge varchar(100))
insert aa values(1,''无限-女 '')
没有达到第一范式

create table aa(id int,name varcahr(10),age char(2))
insert aa values(1,''无限'',''女 '')
达到第一范式

第二范式(2NF)

数据库表中非关键字段对任一候选关键字段的 都 不存在部分函数依赖

(当一个表是复合主键时,非主键的字段不依赖于部分主键(即必须依赖于全部的主键字段))

create table sci(

sno int(32),cno int(32),grade int(32),credit int(32),

primary key sno,cno

)

课程(cno)1---1学分(credit)

学生(sno)n---n课程(cno)

学生+课程--->分数(grade)

sci

sno cno grade credit

1 1 60 80

2 1 90 80

3 1 70 80

. . . .

. . . .

. . . .

如此以来,学分被大量重复存储,数据冗余

如要某课程学分,则要大量重复操作

如要加新课程,由于sno和cno共同做为主键,则在加入新课程时,必须有人选该课

如某学生某课程结业,则该学生其它课程信息也同时被删除了

总之

这种设计不太好吧,非关键字属性credit仅函数依赖于cno,也就是credit部分依赖组合关键字(sno,cno)而不是完全依赖

解决

分成两个关系模式 sc1(sno,cno,grade),c2(cno,credit)。新关系包括两个关系模式,它们之间通过sc1中的外关键字cno相联系,需要时再进行自然联接,恢复了原来的关系

第三范式(3NF)

关系模式R(U,F)中的所有非主属性对任何候选关键字都不存在传递依赖

例----S1(SNO,SNAME,DNO, DNAME, LOCATION)

      学号 姓名   所在系 系名称 系地址 

关键字SNO决定各个属性。由于是单个关键字,没有部分依赖的问题,肯定是2NF。但这关系肯定有大量的冗余,有关学生所在的几个属性DNO,DNAME,LOCATION将重复存储,插入,删除和修改时也将产生类似以上例的情况。
原因:关系中存在传递依赖造成的。即SNO 1->1 DNO。 而DNO 1->n SNO却不存在, 而DNO -> LOCATION存在, 因此关键辽 SNO 对 LOCATION 函数决定是通过传递依赖 SNO -> LOCATION 实现的。也就是说,SNO不直接决定非主属性LOCATION。
解决目地:每个关系模式中不能留有传递依赖。
解决方法:分为两个关系 S(SNO,SNAME,DNO),D(DNO,DNAME,LOCATION)
注意:关系S中不能没有外关键字DNO。否则两个关系之间失去联系

鲍依斯-科得范式(BCNF)

在3NF的基础上,库表中任何字段对任一候选关键字段的传递函数依赖都不存在

仓库管理关系表为StorehouseManage(仓库ID, 存储物品ID, 管理员ID, 数量),且管理员1---1仓库;仓库1---n物品。这个数据库表中存在如下决定关系:
  (仓库ID, 存储物品ID) →(管理员ID, 数量)
(管理员ID, 存储物品ID) → (仓库ID, 数量)
所以,(仓库ID, 存储物品ID)和(管理员ID, 存储物品ID)都是StorehouseManage的候选关键字,表中的唯一非关键字段为数量,它是符合第三范式的。但是,由于存在如下决定关系:
(仓库ID) → (管理员ID)
(管理员ID) → (仓库ID)
即存在关键字段决定关键字段的情况,所以其不符合BCNF范式

解决:

把仓库管理关系表分解为二个关系表:
  仓库管理:StorehouseManage(仓库ID, 管理员ID)
仓库:Storehouse(仓库ID, 存储物品ID, 数量)

免责声明:文章转载自《SQL三大范式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【20110409】 磁盘空间不足,数据库瘫痪了解美杜莎(Medusa)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

理解数据库的几种键和几个范式

  [原创] 基础中的基础(三):理解数据库的几种键和几个范式    在上学的时候,数据库是一门让我比较头大的课程。记得当时教材上净是一些晦涩难懂的语言,没有充足的实例来帮助理解。前一阵子在看《网络游戏服务器端编程》的过程中,突然对数据库范式有了一些感觉,在此总结一下,分享给大家。作者纯菜鸟,即使总结这些基础知识也难免有错,希望给位大牛不吝赐教,谢谢...

简述数据三大范式?

数据库设计范式 什么是范式:简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系。所以建立科学的,规范的的数据库是需要满足一些 规范的来优化数据数据存储方式。在关系型数据库中这些规范就可以称为范式。 什么是三大范式: 第一范式:当关系模式R的所有属性都不能在分解为更基本的数据单位时,称R是满足第一范式的,简记为1NF。满足第一范式...

数据库表设计的三范式

数据库范式1NF 2NF 3NF BCNF(实例) 设计范式(范式,数据库设计范式,数据库的设计范式)是符合某一种级别的关系模式的集合。构造数据库必须遵循一定的规则。在关系数据库中,这种规则就是范 式。关系数据库中的关系必须满足一定的要求,即满足不同的范式。目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式 (3NF)、第四范...