第一范式(1NF)

第一范式是第二和第三范式的基础,是最基本的范式。第一范式包括下列的指导原则:

  • 数据组的每个属性只可以包含一个值。
  • 关系中的每个数组必须只包含相同数量的值。
  • 关系中的每个数组一定不能相同。

在任何一个关系数据库中,第一范式是对关系模式的基本要求,不满足第一范式的数据库就不是关系型数据库。

表1.1 不符合第一范式的学生信息表

学号

姓名

性别

年龄

班级

9527

东*方

20

计算机系3班

因为上表中的班级属性中包含了多个值,所以它不符合第一范式。改进后的结构如下表所示:

表1.2 符合第一范式的学生信息表

学号

姓名

性别

年龄

系别

班级

9527

东*方

20

计算机

3班

第二范式(2NF)

第二范式是第一范式的基础上建立起来的,即满足第二范式必先满足第一范式。第二范式要求数据库中的每个实体(即各个记录行)必须可以被唯一地区分。要求实体的属性完全依赖于主关键字,即不能存在仅依赖主关键字一部分的属性。

不符合第二范式的示范(员工工资表):

(员工编号,岗位)-(决定)(姓名、年龄、学历、基本工资、绩效工资、资金)

不符合的原因是,在上面的关系中,还可以进一步拆分为如下两种决定关系:

(员工编号)-》(决定)(姓名、年龄、学历)

(岗位)-》(决定)(基本工资)

符合第二范式的示范(将上面的表拆分为三张表):

员工档案表:EMPLOYEE(员工编号、姓名、年龄、学历)

岗位工资表:QUARTERS(岗位、基本工资)

员工工资表:PAY(员工编号、岗位、绩效工资、奖金)

第三范式(3NF)

第三范式是在第二范式的基础上建立起来的,即满足第三范式必先满足第二范式。第三范式要求关系表不存在非关键字列对任意候选关键字列的传递函数依赖,也就是说,第三范式要求一个关系表中不包含已在其他表中已包含的非主关键字信息。

示范:

(员工编号)-》(决定)(员工姓名、年龄、部门编号、部门经理)

上面的这个关系是符合第二范式的,但它不符合第三范式,因为该关系表内部隐含着如下决定关系:

(员工编号)->(决定)(部门编号)-(决定)(部门经理)

上面的关系表存在非关键字段“部门经理”对关键字“员工编号”的传递函数依赖。

更改为符合第三范式关系:

员工信息表:EMPLOYEE(员工编号、员工姓名、年龄、部门编号)

部门信息表:DEPARTMENT(部门编号、部门经理)

对于关系数据库的设计,理想的设计目标是按照“规范化”原则存储数据,因为这样做能够消除数据冗余、更新异常、插入异常和删除异常。

Oracle学习笔记之一,重温范式的更多相关文章

  1. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  2. oracle学习笔记第一天

    oracle学习笔记第一天 --oracle学习的第一天 --一.几个基础的关键字   1.select select (挑选) 挑选出显示的--列--(可以多列,用“,”隔开,*表示所有列),为一条 ...

  3. Oracle学习笔记——点滴汇总

    Oracle学习笔记——点滴汇总 http://www.botangdb.com/ Oracle GI = Grid Infrastructure = ASM + Cluster

  4. Oracle学习笔记之四sp1,Oracle 11g的常用函数

    从Oracle学习笔记之四,SQL语言入门中摘出来的,独立成一章节 3.1 字符类函数 ASCII(c)和CHR(i)    分别用于返回一个字符的ASCII码和返回给定ASCII值所对应的字符. C ...

  5. Oracle学习笔记之四,SQL语言入门

    1. SQL语言概述 1.1 SQL语言特点 集合性,SQL可以的高层的数据结构上进行工作,工作时不是单条地处理记录,而对数据进行成组的处理. 统一性,操作任务主要包括:查询数据:插入.修改和删除数据 ...

  6. Oracle学习笔记—数据字典和常用命令(转载)

    转载自: oracle常用数据字典和SQL语句总结 Oracle常用命令大全(很有用,做笔记) 一.Oracle数据字典 数据字典是Oracle存放有关数据库信息的地方,其用途是用来描述数据的.比如一 ...

  7. oracle学习笔记(一)用户管理

    --oracle学习第一天 --连接 @后面连接数据库实例,具体连接到那个数据库 conn scott/tiger@MYORA1; --修改密码 passw; --显示用户 show user; -- ...

  8. 吴裕雄--天生自然 oracle学习笔记:oracle理论学习详解及各种简单操作例子

    1. 数据库的发展过程 层次模型 -->网状模型 -->关系模型 -->对象关系模型 2. 关于数据库的概念 DB:数据库(存储信息的仓库) DBMS:数据库管理系统(用于管理数据库 ...

  9. 【Oracle】曾经的Oracle学习笔记(8-15)ER图,三大范式,数据库字典,视图,索引,序列

    一.数据库建模 二.建表 三.数据库字典 四.DML语句 五.视图 六.索引 七.序列 八.DDL语句 Lesson 8 Overview of Data Modeling and Database ...

随机推荐

  1. 向第一个 p 元素添加一个类

    This is a heading This is a paragraph. This is another paragraph. 向第一个 p 元素添加一个类 111 <html> &l ...

  2. [CSS3]Clearfix

    <!DOCTYPE html> <html> <head> <link rel="stylesheet" href="index ...

  3. 翻译记忆软件-塔多思TRADOS经典教程_1

    窗体顶端 网络上关于TRADOS使用的文章很多,但大多数内容涉及的内容都过于广泛,刚准备上手的同行们看了总会觉得不知所云,无从下手.笔者自己也在自学阶段遇到不少麻烦.经过长期的使用和琢磨,终于写了短文 ...

  4. Android Bundle存储数据类型

    曾经被问到这样一个问题:Bundle能存哪些数据类型,不能存哪些数据类型? 当时那个汗啊,因为,平常使用Bundle,要么使用基本数据类型,要么序列化自定义的Class,那到底能存哪些类型,不能存哪些 ...

  5. 微信小程序 - 上拉加载下拉刷新

    点击下载示例:小程序 - 上拉刷新下拉加载

  6. 应用程序正常初始化(0xc0000135)失败的解决方法

    转自:http://blog.sina.com.cn/s/blog_64fba4e00100mzf9.html 这是由于没有安装.NET framework 所造成的,请安装.NET framewor ...

  7. vue inheritAttrs、$attrs和$listeners使用

    inheritAttrs.$attrs和$listeners使用场景: 组件传值,尤其是祖孙组件有跨度的传值. (1)inheritAttrs 属性说明:https://cn.vuejs.org/v2 ...

  8. jquery 清除style样式

    $("#show").removeAttr("style"); //ie,ff均支持 $("#show").attr("style ...

  9. 深入浅出搜索架构引擎、方案与细节 倒排 bitmap

    深入浅出搜索架构引擎.方案与细节(上) 2017-02-14 23:55 58沈剑0  20  阅读 131 一.缘起 <100亿数据1万属性数据架构设计>文章发布后,不少朋友对58同城自 ...

  10. 【mysql+RBAC】RBAC权限处理(转载:http://www.cnblogs.com/xiaoxi/p/5889486.html 平凡希)

    1.这里我只讲核心,mysql查询语句:FIND_IN_SET(str,strlist) 2.具体教程可以参考[童攀老师的RBAC],很清晰,赞一个. 3.详解:mysql的find_in_set 首 ...