数据库范式的理解

函数:明确的数学上的关系,比如:总价=单价*数量。

函数依赖:已经知X,则有且只有Y,与之对应。比如:已经“学号1”,则有且只有“生日1”与之对应。这不是也不可能是数学上的关系。

完全函数依赖:设X,Y是关系R的两个属性集合,X’是X的真子集,存在X→Y,但对每一个X’都有X’!→Y,则称Y完全函数依赖于X。

  即:X是(A1,A2,A3)的集合,如果Y完全函数依赖于A,则:

  (A1)!→Y,    (A2)!→Y,    (A3)!→Y,

  (A1,A2)!→Y,  (A1,A3)!→Y,   (A2,A3)!→Y

部分函数依赖:设X’,Y是关系R的两个属性集合,存在X’→Y,若X是X’的真子集,存在X→Y,则称Y部分函数依赖于X’。

  即:X’是(A1,A2,A3,B)的集合,它的真子集X(A1,A2,A3),若存在X’→Y,X→Y,则称Y部分函数依赖于X’。

  通俗地讲:Y依赖于X‘,也依赖于“部分的X‘”。

  部分函数依赖与完全函数依赖的区别是:完全函数依赖的意思是,集合X不能再拆分了,再拆分,便不能决定Y了;集合X也不能再添加元素了,再添加元素,便变成了部分函数依赖。集合元素不能增,不能减,叫完全函数依赖。

传递函数依赖:设X,Y,Z是关系R中互不相同的属性集合,存在X→Y(Y !→X),Y→Z,则称Z传递函数依赖于X。

第一范式:是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。

  简言之:字段不可重复,不可拆分。

  其实,不可拆分,需要根据实际情况进行判定。比如,一个学生的生日,可以认为是不可拆分的字段。但是,有时却可能拆分成:年,月,日。

  违反第一范式,有什么害处,是不言而喻的。这是关系型数据库,最基本的要求,否则,数据库都建立不起来。

第二范式:非关键字段完全函数依赖于主健字段,或者说,不存在非关键字段对任一候选字段的部分函数依赖。

  如果将(学号、姓名、性别、课程号、课程名、学分、成绩)置于同张表中,则违反了第二范式。解释如下:

  1、主键(学号与课程号的集合),非关键字:姓名、课程名、成绩。

  2、姓名是部分函数依赖于主键的。课程名是部分函数依赖于主键的。成绩则完全函数依赖于主键。

  3、因为存在了姓名或课程名对主键的部分函数依赖,所以,违反了第二范式。

  违反第二范式的害处:(以上图七个字段置于同一表中为例子来说明)

  假如只有以下三条记录,如何查询体育的学分

学号 姓名 性别 课程号 课程名 学分 成绩
1 张三 BB 数学 2 99
2 李四 BB 数学 2 98
1 张三 AA 语文 4 97

  因为没有学生学习体育,所以,不存在(学号、课程号)【主键不能为空】。因而无法记录体育的学分信息。违反范式二,极有可能丢失重要的数据而没有记录。

  解决办法:将表拆分。

  拆分成四张表:(学号、姓名、性别);(课程号、课程名);(课程号、学分);(学号、课程号、成绩)

  问:为何不是(课程号、课程名、学分)?答:严格意义上,学分部分函数依赖于(课程号、课程名)二合一的主键。

  但是,为了避免不必要多表查询,而且课程号与课程名,课程名与学分都是一对一的关系,所以,仍然会使用(课程号、课程名、学分)。

第三范式:不存在非关键字对任意一候选关键字的传递函数依赖。

  若有表(学号、姓名、性别、班级、班主任),则违反了第三范式的。因为存在学生重名的情况,所以表(学号、姓名、性别、班级、班主任)并没有违反第二范式。

  解释如下:

  班级函数依赖于学号,班主任函数依赖于班级,即 学号->班级->班主任。

  违反第三范式的危害是:

  数据冗余,如果一个班有37名学生,将不断记录班主任达37次之多。

  解决办法:将表拆分

  (学号、姓名、性别、班级);(班级、班主任)

时间: 2024-10-03 14:14:59

数据库范式的理解的相关文章

数据库范式简单理解

数据库三级范式: 第一范式:所有字段值都是不可分解的原子值. 第二范式:也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中. 第三范式:每一列数据都和主键直接相关,而不能间接相关. ---满足第一范式不一定满足第二范式:满足第二范式不一定满足第三范式:所以第一范式,第二范式,第三范式都是有区别的. 详细解析见:https://www.cnblogs.com/linjiqin/archive/2012/04/01/2428695.html 原文地址:http

关于数据库范式的理解

在数据库设计中有五大范式,称为第一范式(1NF),第二范式(2NF),第三范式(3NF),第四范式(4NF),第五范式(5NF).但在一般的设计过程中,能够达到第三范式就满足了规范化的要求. 1第一范式(1NF) 确保每一列的原子性.如果每一列都是不可再分的最小单位,即满足第一范式.(将数据放在第一范式中审核,每个列都不可再分,保证了列的原子性.). 2第二范式(2NF) 数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖(部分函数依赖指定的是存在组合关键字中的某些字段决定非关键字段的情

[数据库] 理解数据库范式-通俗易懂

转自:http://blog.chinaunix.net/uid-10073362-id-225057.html 数据库范式是数据库设计中必不可少的知识,没有对范式的理解,就无法设计出高效率.优雅的数据库.甚至设计出错误的数据库.而想要理解并掌握范式却并不是那么容易.教科书中一般以关系代数的方法来解释数据库范式.这样做虽然能够十分准确的表达数据库范式,但比较抽象,不太直观,不便于理解,更难以记忆. 本文用较为直白的语言介绍范式,旨在便于理解和记忆,这样做可能会出现一些不精确的表述.但对于初学者应

数据库范式的设计

数据库范式的设计     关系数据库就是通过二维表(行和列)来保存数据. 实体:现实世界中客观存在并可以被区别的事物.比如"一个学生"."一本书"."一门课"等等.值得强调的是这里所说的"事物"不仅仅是看得见摸得着的"东西",它也可以是虚拟的,不如说"老师与学校的关系". 属性:教科书上解释为:"实体所具有的某一特性",由此可见,属性一开始是个逻辑概念,比如说,&qu

一看就懂的数据库范式介绍(1NF,2NF,3NF,BC NF,4NF,5NF)

原文:http://josh-persistence.iteye.com/blog/2200644 一.基本介绍 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小. 目前关系数据库有六种范式:第一范式(1NF).第二范式(2NF).第三范式(3NF).巴斯-科德范式(BCNF).第四范式(4NF)和第五范式(5NF,又称完美范式).满足最低要求的范式是第一范式(1NF).在第一范式的基础上进一步满足更

SQL语句类别、数据库范式、系统数据库组成

前言 终于等到这一天,我要开始重新系统学习数据库了,关于数据库这块,不出意外的话,每天会定时更新一篇且内容不会包含太多,简短的内容,深入的理解. SQL语句类别 SQL语句包括以下三个类别 (1)数据定义语言(Data Definnition Language)即DDL,我们数据最终从何而来,当然首先必须得建立表,所以它包括CREATE.ALTER.DROP表. (2)数据操作语言(Data Manipulation Language)即DML,我们对数据需要进行什么操作,当然无非就是增删改查,

转载:数据库范式

数据库范式——通俗易懂[转] (2012-04-02 21:15:43) 数据库范式是数据库设计中必不可少的知识,没有对范式的理解,就无法设计出高效率.优雅的数据库.甚至设计出错误的数据库.而想要理解并掌握范式却并不是那 么容易.教科书中一般以关系代数的方法来解释数据库范式.这样做虽然能够十分准确的表达数据库范式,但比较抽象,不太直观,不便于理解,更难以记忆.       本文用较为直白的语言介绍范式,旨在便于理解和记忆,这样做可能会出现一些不精确的表述.但对于初学者应该是个不错的入门.我写下这

[转]数据库范式的设计

数据库范式的设计     关系数据库就是通过二维表(行和列)来保存数据. 实体:现实世界中客观存在并可以被区别的事物.比如“一个学生”.“一本书”.“一门课”等等.值得强调的是这里所说的“事物”不仅仅是看得见摸得着的“东西”,它也可以是虚拟的,不如说“老师与学校的关系”. 属性:教科书上解释为:“实体所具有的某一特性”,由此可见,属性一开始是个逻辑概念,比如说,“性别”是“人”的一个属性.在关系数据库中,属性又是个物理概念,属性可以看作是“表的一列”. 元组:表中的一行就是一个元组. 分量:元组

数据库范式1NF 2NF 3NF BCNF(实例)通俗易懂的讲解

[转] 数据库范式1NF 2NF 3NF BCNF(实例)通俗易懂的讲解     本文对大多数初学数据库原理的同学绝对是个大福利,哈哈,完完整整的看完此篇博文一定能够清晰地理解数据库的四大范式.    不懂者留言相互讨论.     设计范式(范式,数据库设计范式,数据库的设计范式)是符合某一种级别的关系模式的集合.构造数据库必须遵循一定的规则.在关系数据库中,这种规则就是范式.关系数据库中的关系必须满足一定的要求,即满足不同的范式.目前关系数据库有六种范式:第一范式(1NF).第二范式(2NF)