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

解决方案 »

  1.   

    范式
    构造数据库必须遵循一定的规则在关系数据库中这种规则就是范式范式是符合
    某一种级别的关系模式的集合关系数据库中的关系必须满足一定的要求即满足不同的
    范式目前关系数据库有六种范式第一范式1NF 第二范式2NF 第三范式3NF
    第四范式4NF 第五范式5NF 和第六范式6NF 满足最低要求的范式是第一
    范式1NF 在第一范式的基础上进一步满足更多要求的称为第二范式2NF 其余
    范式以次类推一般说来数据库只需满足第三范式3NF 就行了下面我们举例介绍
    第一范式1NF 第二范式2NF 和第三范式3NF
    第一范式1NF
    在任何一个关系数据库中第一范式1NF 是对关系模式的基本要求不满足第一
    范式1NF 的数据库就不是关系数据库
    所谓第一范式1NF 是指数据库表的每一列都是不可分割的基本数据项同一列中
    不能有多个值即实体中的某个属性不能有多个值或者不能有重复的属性如果出现重复
    的属性就可能需要定义一个新的实体新的实体由重复的属性构成新实体与原实体之
    间为一对多关系在第一范式1NF 中表的每一行只包含一个实例的信息例如对
    于图3-2 中的员工信息表不能将员工信息都放在一列中显示也不能将其中的两列或多
    列在一列中显示员工信息表的每一行只表示一个员工的信息一个员工的信息在表中只
    出现一次简而言之第一范式就是无重复的列
    第二范式2NF
    第二范式2NF 是在第一范式1NF 的基础上建立起来的即满足第二范式2NF
    必须先满足第一范式1NF 第二范式2NF 要求数据库表中的每个实例或行必须可
    以被惟一地区分为实现区分通常需要为表加上一个列以存储各个实例的惟一标识如
    图3-2 员工信息表中加上了员工编号emp_id 列因为每个员工的员工编号是惟一的
    因此每个员工可以被惟一区分这个惟一属性列被称为主关键字或主键主码
    第二范式2NF 要求实体的属性完全依赖于主关键字所谓完全依赖是指不能存在
    仅依赖主关键字一部分的属性如果存在那么这个属性和主关键字的这一部分应该分离
    出来形成一个新的实体新实体与原实体之间是一对多的关系为实现区分通常需要为表
    加上一个列以存储各个实例的惟一标识简而言之第二范式就是非主属性非部分依赖
    于主关键字
    第三范式3NF
    满足第三范式3NF 必须先满足第二范式2NF 简而言之第三范式3NF
    要求一个数据库表中不包含已在其它表中已包含的非主关键字信息例如存在一个部门
    信息表其中每个部门有部门编号dept_id 部门名称部门简介等信息那么在图3-2
    的员工信息表中列出部门编号后就不能再将部门名称部门简介等与部门有关的信息再加
    入员工信息表中如果不存在部门信息表则根据第三范式3NF 也应该构建它否则
    就会有大量的数据冗余简而言之第三范式就是属性不依赖于其它非主属性
      

  2.   

    请帮我看一下这个表:
    1、一个营业执照表
    (ID,经营位置,人员,注册资金)
    2、上报信息表
    (INFO_ID,经营位置,事由)
    想让经营位置从1中取,但其不是主见。
    是不是违反了3NF
      

  3.   

    算不上了,班级就存在问题.实际上,3NF最简单的就是要达到一种信息一
    个表.其它的数据则是存放关联(id).比喻:
    学生表(存放所在学生的信息):id,studentname,...,classid
    班级表(存放班级的一些信息):classid,classname,..
    科目表(存放科目的一些信息):achieveid,achievename,classid