第一范式,第二范式,第三范式

第一范式

存在非主属性对码的部分依赖关系 R(A,B,C) AB是码 C是非主属性 B-->C B决定C C部分依赖于B

第一范式

定义:若是关系R 中全部属性的值域都是单纯域,那么关系模式R是第一范式的

那么符合第一模式的特色就有

1)有主关键字

2)主键不能为空,

3)主键不能重复,

4)字段不能够再分

例如:

 StudyNo   |   Name   |   Sex   |   Contact

20040901      john         Male      Email:kkkk@ee.net,phone:222456

20040901      mary         famale    email:kkk@fff.net phone:123455

以上的表就不符合,第一范式:主键重复(实际中数据库不容许重复的),并且Contact字段能够再分

因此变动为正确的是

 StudyNo   |   Name   |   Sex   |      Email         |      Phone

20040901      john         Male       kkkk@ee.net       222456

20040902     mary          famale      kkk@fff.net      123455

 

第二范式

存在非主属性对码的传递性依赖 R(A,B,C) A是码 A -->B ,B-->C

定义:若是关系模式R是第一范式的,并且关系中每个非主属性不部分依赖于主键,称R是第二范式的。

因此第二范式的主要任务就是

知足第一范式的前提下,消除部分函数依赖。

StudyNo   |   Name   |   Sex   |         Email         |      Phone    |   ClassNo  | ClassAddress

01                  john        Male       kkkk@ee.net     222456      200401            A楼2

01                   mary       famale    kkk@fff.net       123455      200402            A楼3

这个表彻底知足于第一范式,

主键由StudyNo和ClassNo组成,这样才能定位到指定行

可是,ClassAddress部分依赖于关键字(ClassNo-〉ClassAddress),

因此要变为两个表

表一

StudyNo   |   Name   |   Sex   |      Email         |      Phone |   ClassNo

      01            john         Male       kkkk@ee.net  222456   200401     

      01           mary         famale    kkk@fff.net    123455      200402    

表二

 ClassNo  | ClassAddress

 200401      A楼2

 200402      A楼3


第三范式

不存在非主属性对码的传递性依赖以及部分性依赖 ,
StudyNo   |   Name   |   Sex   |      Email         |      bounsLevel   |   bouns

20040901      john         Male       kkkk@ee.net   优秀                    $1000

20040902     mary         famale    kkk@fff.net       良                         $600

这个彻底知足了第二范式,可是bounsLevel和bouns存在传递依赖

更改成:

StudyNo   |   Name   |   Sex   |      Email         |      bouunsNo

20040901      john         Male       kkkk@ee.net   1

20040902     mary         famale    kkk@fff.net       2

bounsNo   |   bounsLevel   |   bouns

1                   优秀                $1000

 2                 良                   $600

这里我比较喜欢用bounsNo做为主键,

基于两个缘由

1)不要用字符做为主键。可能有人说:若是个人等级一开始就用数值就代替呢?

2)可是若是等级名称更改了,不叫 12 ,3或优、良,这样就能够方便更改,因此我通常优先使用与业务无关的字段做为关键字。

 

通常知足前三个范式就能够避免数据冗余。




数据库模型设计,第一范式、第二范式、第三范式简单例子理解
数据库设计通常知足第三范式就够了 
第一范式(无重复的列) 定义:数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。若是实体中的某个属性有多个值时,必须拆分为不一样的属性 通俗解释:一个字段只存储一项信息 eg:班级:高三年1班,应改成2个字段,一个年级、一个班级,才知足第一范式 不知足第一范式
学号 姓名 班级
0001 小红 高三年1班
 
改为
学号 姓名 年级 班级
0001 小红 高三年 1班
 
第二范式(属性彻底依赖于主键) 定义:知足第一范式前提,当存在多个主键的时候,才会发生不符合第二范式的状况。好比有两个主键,不能存在这样的属性,它只依赖于其中一个主键,这就是不符合第二范式 通俗解释:任意一个字段都只依赖表中的同一个字段 eg:好比不符合第二范式
学生证 名称 学生证号 学生证办理时间 借书证名称 借书证号 借书证办理时间
           
 
改为2张表以下 学生证表
学生证 学生证号 学生证办理时间
     
 
借书证表
借书证 借书证号 借书证把你拉时间
     
 

第三范式(属性不能传递依赖于主属性) 定义:知足第二范式前提,若是某一属性依赖于其余非主键属性,而其余非主键属性又依赖于主键,那么这个属性就是间接依赖于主键,这被称做传递依赖于主属性。 通俗理解:一张表最多只存2层同类型信息 eg:爸爸资料表,不知足第三范式
爸爸 儿子 女儿 女儿的小熊 女儿的海绵宝宝
         
 
改为 爸爸信息表:
爸爸 儿子 女儿
     
 女儿信息表
女儿 女儿的小熊 女儿的海绵宝宝
相关文章
相关标签/搜索