zoukankan      html  css  js  c++  java
  • 数据库三大范式

    第一范式:

    定义:如果关系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是第一范式的,而且关系中每一个非主属性不部分依赖于主键(即完全函数依赖),称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

    第三范式:

    满足第二范式的前提下,消除传递依赖;

    存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性,也就是在满足2NF的基础上,任何非主属性不得传递依赖于主属性。

  • 相关阅读:
    (数论选拔)联盟阵容
    ai变成bi(递增)最小次数
    状压dp
    dp被3整除的子序列
    离散化+莫队
    dp+哈希
    set的应用
    NOIP 2016 明明的随机数
    洛谷背景更改
    zzulioj 1734 堆
  • 原文地址:https://www.cnblogs.com/xulibing/p/5939726.html
Copyright © 2011-2022 走看看