zoukankan      html  css  js  c++  java
  • 第一范式,第二范式,第三范式

    第一范式
    
    存在非主属性对码的部分依赖关系 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:爸爸资料表,不满足第三范式
    爸爸 儿子 女儿 女儿的小熊 女儿的海绵宝宝
             
    
    
    改成 爸爸信息表:
    爸爸 儿子 女儿
         
    
    女儿信息表
    女儿 女儿的小熊 女儿的海绵宝宝
         


  • 相关阅读:
    你所不知道的mfc…mfc项目索引 &mfc调优指南 &mfc vc添加添加子功能指南
    Cu 大彻大悟内存管理 mm (update 0410)
    [转]Linux iostat监测IO状态
    linux virtual memory layout by moniskiller upload [读书笔记]
    河畔找到的 面经笔经
    【转】Linux本地磁盘(硬盘)介绍
    读写UTF8、Unicode文件
    codesmith执行时提示“调用的目标发生了异常”的处理过程经验。
    DB2表信息以及字段信息的表
    iBatis.NET获取resultMap相关数据
  • 原文地址:https://www.cnblogs.com/liuchaogege/p/4655129.html
Copyright © 2011-2022 走看看