数据库——范式

设计范式是符合某一级别的关系模式的集合。构造数据库必须遵循一定的规则,在关系数据库中,这种规则就叫范式

目前关系数据库有六种范式,一般来说,数据库满足到第三种范式就行了。

关系数据中几种范式介绍

1. 第一方式(1NF)

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

  定义:数据库中的字段是单一属性,不可再分。这个单一属性由基本类型构成,包括:整型、实数、字符型、逻辑型、日期型等等、

  例如:如下的数据库是符合第一范式的:

  字段1 字段2 字段3 字段4

而这样的数据库是不符合第一范式的:

字段1 字段2 字段3 字段4

字段3.1 字段3.2

很显然,在当前的关系数据库中不可能做出不符合第一范式的数据库。

2. 第二范式(2NF)

定义:数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖(部分函数依赖是指存在组合关键字段中某些字段决定非关键字段的情况),即所有的非关键字段完全依赖任意一组候选关键字段。

假定选课关系表SelectCourse(学号、姓名、年龄、课程名称、成绩、分数),关键字为组合关键字(学号、课程名称),因此存在如下决定关系:

(学号、课程名称)------>(姓名、年龄、成绩、分数)

这个数据库表不满足第二范式,因为存在如下决定关系:

(课程名称)->(学分)

(学号)->(姓名、年龄)

即存在组合关键字的字段决定非关键字的情况。

由于不符合第二范式,这个选课关系表会存在如下问题:

(1).数据冗余

同一课程由N个学生选修,“学分”就会重复N-1次;同一学生选修了N门课程,姓名和年龄就会重复N-1;

(2).更新异常

若要调整某门课程的学分,则数据库表的所有行的“学分”都要更新,否则出现同一门课程“学分”不同的情况。

(3).插入异常

若新增一门新的课程,由于没人选修,这样,由于没有“学号”关键字,课程名称和学分也无法记录入数据库。

(4).删除异常

假如一些学生已完成了选修课程,这时就应该从数据库表中删除。但是,如果真的删除的话,课程名称和学分信息也会被删除了。

把选课关系表SelectCourse改为如下三张表:

学生:Student(学号、姓名、年龄)

课程:Course(课程名称、学分)

选课关系:SelectCourse(学号、课程名称、成绩)

这样的数据库表就符合第二范式,消除了数据冗余、更新异常、插入异常、删除异常。

3. 第三范式(3NF)

定义:数据表中非关键字段不存在对任一候选关键字段的传递依赖。

所谓的传递依赖是值,如果存在“A->B->C”的决定关系,则C传递依赖于A。因此,满足第三范式的数据表应该不存在如下的依赖关系:

关键字段->非关键字段x->非关键字段y

假定学生关系表为Student(学号、姓名、年龄、所在学院、学院地址、学院电话),关键字段为单一字段“学号”,因为存在如下决定关系:

(学号)->(姓名、年龄、所在学院、学院地址、学院电话)

这是符合第二范式的,但是不符合第三范式,因为存在如下决定关系:

(学号)->(所在学院)->(学院地址,学院电话)

即存在非关键字段"学院地点"、"学院电话"对关键字段"学号"的传递函数依赖。

  它也会存在数据冗余、更新异常、插入异常和删除异常的情况。

把学生关系表拆分如下:

学生:(学号、姓名、年龄、所在学院)

学院:(学院、地址、电话)

时间: 2024-10-13 09:06:01

数据库——范式的相关文章

数据库范式的设计

数据库范式的设计     关系数据库就是通过二维表(行和列)来保存数据. 实体:现实世界中客观存在并可以被区别的事物.比如"一个学生"."一本书"."一门课"等等.值得强调的是这里所说的"事物"不仅仅是看得见摸得着的"东西",它也可以是虚拟的,不如说"老师与学校的关系". 属性:教科书上解释为:"实体所具有的某一特性",由此可见,属性一开始是个逻辑概念,比如说,&qu

数据库范式那些事

转载至:http://www.cnblogs.com/CareySon/archive/2010/02/16/1668803.html 简介 数据库范式在数据库设计中的地位一直很暧昧,教科书中对于数据库范式倒是都给出了学术性的定义,但实际应用中范式的应用却不甚乐观,这篇文章会用简单的语言和一个简单的数据库DEMO将一个不符合范式的数据库一步步从第一范式实现到第四范式. 范式的目标 应用数据库范式可以带来许多好处,但是最重要的好处归结为三点: 1.减少数据冗余(这是最主要的好处,其他好处都是由此而

一看就懂的数据库范式介绍(1NF,2NF,3NF,BC NF,4NF,5NF)

原文:http://josh-persistence.iteye.com/blog/2200644 一.基本介绍 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小. 目前关系数据库有六种范式:第一范式(1NF).第二范式(2NF).第三范式(3NF).巴斯-科德范式(BCNF).第四范式(4NF)和第五范式(5NF,又称完美范式).满足最低要求的范式是第一范式(1NF).在第一范式的基础上进一步满足更

SQL语句类别、数据库范式、系统数据库组成

前言 终于等到这一天,我要开始重新系统学习数据库了,关于数据库这块,不出意外的话,每天会定时更新一篇且内容不会包含太多,简短的内容,深入的理解. SQL语句类别 SQL语句包括以下三个类别 (1)数据定义语言(Data Definnition Language)即DDL,我们数据最终从何而来,当然首先必须得建立表,所以它包括CREATE.ALTER.DROP表. (2)数据操作语言(Data Manipulation Language)即DML,我们对数据需要进行什么操作,当然无非就是增删改查,

MYSQL学习笔记——数据库范式及MYSQL优化整体思路

一.数据库范式                                                                               为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中这种规则就称为范式.范式是符合某一种设计要求的总结.要想设计一个结构合理的关系型数据库,必须满足一定的范式. 1.1.第一范式(1NF:每一列不可包含多个值)      所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列

转载:数据库范式

数据库范式——通俗易懂[转] (2012-04-02 21:15:43) 数据库范式是数据库设计中必不可少的知识,没有对范式的理解,就无法设计出高效率.优雅的数据库.甚至设计出错误的数据库.而想要理解并掌握范式却并不是那 么容易.教科书中一般以关系代数的方法来解释数据库范式.这样做虽然能够十分准确的表达数据库范式,但比较抽象,不太直观,不便于理解,更难以记忆.       本文用较为直白的语言介绍范式,旨在便于理解和记忆,这样做可能会出现一些不精确的表述.但对于初学者应该是个不错的入门.我写下这

[转]数据库范式的设计

数据库范式的设计     关系数据库就是通过二维表(行和列)来保存数据. 实体:现实世界中客观存在并可以被区别的事物.比如“一个学生”.“一本书”.“一门课”等等.值得强调的是这里所说的“事物”不仅仅是看得见摸得着的“东西”,它也可以是虚拟的,不如说“老师与学校的关系”. 属性:教科书上解释为:“实体所具有的某一特性”,由此可见,属性一开始是个逻辑概念,比如说,“性别”是“人”的一个属性.在关系数据库中,属性又是个物理概念,属性可以看作是“表的一列”. 元组:表中的一行就是一个元组. 分量:元组

数据库范式1NF 2NF 3NF BCNF(实例)通俗易懂的讲解

[转] 数据库范式1NF 2NF 3NF BCNF(实例)通俗易懂的讲解     本文对大多数初学数据库原理的同学绝对是个大福利,哈哈,完完整整的看完此篇博文一定能够清晰地理解数据库的四大范式.    不懂者留言相互讨论.     设计范式(范式,数据库设计范式,数据库的设计范式)是符合某一种级别的关系模式的集合.构造数据库必须遵循一定的规则.在关系数据库中,这种规则就是范式.关系数据库中的关系必须满足一定的要求,即满足不同的范式.目前关系数据库有六种范式:第一范式(1NF).第二范式(2NF)

【转载】数据库范式那些事

数据库范式那些事 简介 数据库范式在数据库设计中的地位一直很暧昧,教科书中对于数据库范式倒是都给出了学术性的定义,但实际应用中范式的应用却不甚乐观,这篇文章会用简单的语言和一个简单的数据库DEMO将一个不符合范式的数据库一步步从第一范式实现到第四范式. 范式的目标 应用数据库范式可以带来许多好处,但是最重要的好处归结为三点: 1.减少数据冗余(这是最主要的好处,其他好处都是由此而附带的) 2.消除异常(插入异常,更新异常,删除异常) 3.让数据组织的更加和谐- 但剑是双刃的,应用数据库范式同样也

数据库范式 通俗演义

以某知名搜索引擎公司的研发工程师的一道笔试题开篇: 题目:如果关系模式R=(A,B,C,D,E)中的函数依赖集F={A→B,B→C,CE→D},这是第几范式? 答:F={A→B,B→C,CE→D},主键为(A,E),非主属性B,C,不完全依赖于码(A,E),只依赖于主键 A,因此不符合2NF.因此为1NF. 解析: 第一范式(1NF):属性不可分: 第二范式(2NF):符合1NF,有主键,非主属性完全依赖于主键,而不是依赖于部分主键属性(部分依赖): 第三范式(3NF):符合2NF,非主键不能相