如何区分和理解数据库中的范式? 比如1nf、2nf、3nf、bcnf、4nf、5nf?

作者&投稿:才旦朱 (若有异议请与网页底部的电邮联系)
学习oracle数据库需要学习什么编程语言~

首先掌握基本的SQL语句 比如其中的select语法最为基本常用。具体还得按照具体工作中涉及到的应用。当数据库发生数据丢失
首先停止数据库的提取与写入 以免数据覆盖
然后网上下载一个评分较高比较靠谱的修复工具: 顶尖数据恢复软件
1.打开顶尖恢复软件,选择“数据库数据丢失”恢复模式。(鼠标停留在功能按钮可查看详情)
2.按提示选择硬盘存储设备,然后点击下一步。
3.进入硬盘扫描阶段,如果用户发现丢失的数据已经被扫描到,也可以“中断扫描”。
4.选择需要恢复的文件,用户可以对文件进行预览,查看是否是自己需要的文件。然后点击下一步。(文件丢失后,文件名称也会被系统自动更改名称。如果未扫描到需要文件,请使用“万能恢复”模式再次扫描恢复。)
5.选择恢复文件存放目录。用户可以将文件恢复到其他目录,以防止造成数据覆盖问题,然后点击下一步,等待恢复完成。

主流的编程语言都支持数据库操作,他们都有相关的数据库操作函数可以实现。至于,数据库编程,学一下SQL语言。

既然是计算机专业的本科生,应该学过数据库吧?

非三言二语说得清的.,第一范式(1NF)无重复的列
  所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。简而言之,第一范式就是无重复的列。   说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。
第二范式(2NF)属性
  完全依赖于主键[消除非主属性对主码的部分函数依赖]   第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。例如员工信息表中加上了员工编号(emp_id)列,因为每个员工的员工编号是唯一的,因此每个员工可以被唯一区分。这个唯一属性列被称为主关键字或主键、主码。   第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。简而言之,第二范式就是属性完全依赖于主键。
第三范式(3NF)属性
  不依赖于其它非主属性[消除传递依赖]   满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在的员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性。
编辑本段范式应用实例剖析
  下面以一个学校的学生系统为例分析说明,这几个范式的应用。首先第一范式(1NF):数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。在当前的任何关系数据库管理系统(DBMS)中,傻瓜也不可能做出不符合第一范式的数据库,因为这些DBMS不允许你把数据库表的一列再分成二列或多列。因此,你想在现有的DBMS中设计出不符合第一范式的数据库都是不可能的。   首先我们确定一下要设计的内容包括那些。学号、学生姓名、年龄、性别、课程、课程学分、系别、学科成绩,系办地址、系办电话等信息。为了简单我们暂时只考虑这些字段信息。我们对于这些信息,说关心的问题有如下几个方面。   学生有那些基本信息   学生选了那些课,成绩是什么   每个课的学分是多少   学生属于那个系,系的基本信息是什么。
第二范式(2NF)实例分析
  首先我们考虑,把所有这些信息放到一个表中(学号,学生姓名、年龄、性别、课程、课程学分、系别、学科成绩,系办地址、系办电话)下面存在如下的依赖关系。   问题分析   因此不满足第二范式的要求,会产生如下问题   数据冗余: 同一门课程由n个学生选修,"学分"就重复n-1次;同一个学生选修了m门课程,姓名和年龄就重复了m-1次。   更新异常:   1)若调整了某门课程的学分,数据表中所有行的"学分"值都要更新,否则会出现同一门课程学分不同的情况。   2)假设要开设一门新的课程,暂时还没有人选修。这样,由于还没有"学号"关键字,课程名称和学分也无法记录入数据库。   删除异常 : 假设一批学生已经完成课程的选修,这些选修记录就应该从数据库表中删除。但是,与此同时,课程名称和学分信息也被删除了。很显然,这也会导致插入异常。   解决方案   把选课关系表SelectCourse改为如下三个表:   学生:Student(学号,姓名, 年龄,性别,系别,系办地址、系办电话);   课程:Course(课程名称, 学分);   选课关系:SelectCourse(学号, 课程名称, 成绩)。
第三范式(3NF)实例分析
  接着看上面的学生表Student(学号,姓名, 年龄,性别,系别,系办地址、系办电话),关键字为单一关键字"学号",因为存在如下决定关系:   (学号)→ (姓名, 年龄,性别,系别,系办地址、系办电话)   但是还存在下面的决定关系   (学号) → (所在学院)→(学院地点, 学院电话)   即存在非关键字段"学院地点"、"学院电话"对关键字段"学号"的传递函数依赖。   它也会存在数据冗余、更新异常、插入异常和删除异常的情况。 (数据的更新,删除异常这里就不分析了,可以参照2.1.1进行分析)   根据第三范式把学生关系表分为如下两个表就可以满足第三范式了:   学生:(学号, 姓名, 年龄, 性别,系别);   系别:(系别, 系办地址、系办电话)。
总结
  上面的数据库表就是符合I,II,III范式的,消除了数据冗余、更新异常、插入异常和删除异常。

实质上,设计范式用很形象、很简洁的话语就能说清楚,道明白。本文将对范式进行通俗地说明,并以笔者曾经设计的一个简单论坛的数据库为例来讲解怎样将这些范式应用于实际工程。

范式说明

第一范式(1NF):数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。

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

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

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

字段1 字段2 字段3 字段4
字段3.1 字段3.2

很显然,在当前的任何关系数据库管理系统(DBMS)中,傻瓜也不可能做出不符合第一范式的数据库,因为这些DBMS不允许你把数据库表的一列再分成二列或多列。因此,你想在现有的DBMS中设计出不符合第一范式的数据库都是不可能的。

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

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

(学号, 课程名称) → (姓名, 年龄, 成绩, 学分)

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

(课程名称) → (学分)

(学号) → (姓名, 年龄)

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

由于不符合2NF,这个选课关系表会存在如下问题:

(1) 数据冗余:

同一门课程由n个学生选修,"学分"就重复n-1次;同一个学生选修了m门课程,姓名和年龄就重复了m-1次。

(2) 更新异常:

若调整了某门课程的学分,数据表中所有行的"学分"值都要更新,否则会出现同一门课程学分不同的情况。

(3) 插入异常:

假设要开设一门新的课程,暂时还没有人选修。这样,由于还没有"学号"关键字,课程名称和学分也无法记录入数据库。

(4) 删除异常:

假设一批学生已经完成课程的选修,这些选修记录就应该从数据库表中删除。但是,与此同时,课程名称和学分信息也被删除了。很显然,这也会导致插入异常。

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

学生:Student(学号, 姓名, 年龄);

课程:Course(课程名称, 学分);

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

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

另外,所有单关键字的数据库表都符合第二范式,因为不可能存在组合关键字。

第三范式(3NF):在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。所谓传递函数依赖,指的是如果存在"A → B → C"的决定关系,则C传递函数依赖于A。因此,满足第三范式的数据库表应该不存在如下依赖关系:

关键字段 → 非关键字段x → 非关键字段y

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

(学号) → (姓名, 年龄, 所在学院, 学院地点, 学院电话)

这个数据库是符合2NF的,但是不符合3NF,因为存在如下决定关系:

(学号) → (所在学院) → (学院地点, 学院电话)

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

它也会存在数据冗余、更新异常、插入异常和删除异常的情况,读者可自行分析得知。

把学生关系表分为如下两个表:

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

学院:(学院, 地点, 电话)。

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

鲍依斯-科得范式(BCNF):在第三范式的基础上,数据库表中如果不存在任何字段对任一候选关键字段的传递函数依赖则符合第三范式。

假设仓库管理关系表为StorehouseManage(仓库ID, 存储物品ID, 管理员ID, 数量),且有一个管理员只在一个仓库工作;一个仓库可以存储多种物品。这个数据库表中存在如下决定关系:

(仓库ID, 存储物品ID) →(管理员ID, 数量)

(管理员ID, 存储物品ID) → (仓库ID, 数量)

所以,(仓库ID, 存储物品ID)和(管理员ID, 存储物品ID)都是StorehouseManage的候选关键字,表中的唯一非关键字段为数量,它是符合第三范式的。但是,由于存在如下决定关系:

(仓库ID) → (管理员ID)

(管理员ID) → (仓库ID)

即存在关键字段决定关键字段的情况,所以其不符合BCNF范式。它会出现如下异常情况:

(1) 删除异常:

当仓库被清空后,所有"存储物品ID"和"数量"信息被删除的同时,"仓库ID"和"管理员ID"信息也被删除了。

(2) 插入异常:

当仓库没有存储任何物品时,无法给仓库分配管理员。

(3) 更新异常:

如果仓库换了管理员,则表中所有行的管理员ID都要修改。

把仓库管理关系表分解为二个关系表:

仓库管理:StorehouseManage(仓库ID, 管理员ID);

仓库:Storehouse(仓库ID, 存储物品ID, 数量)。

这样的数据库表是符合BCNF范式的,消除了删除异常、插入异常和更新异常。

范式应用

我们来逐步搞定一个论坛的数据库,有如下信息:

(1) 用户:用户名,email,主页,电话,联系地址

(2) 帖子:发帖标题,发帖内容,回复标题,回复内容

第一次我们将数据库设计为仅仅存在表:

用户名 email 主页 电话 联系地址 发帖标题 发帖内容 回复标题 回复内容

这个数据库表符合第一范式,但是没有任何一组候选关键字能决定数据库表的整行,唯一的关键字段用户名也不能完全决定整个元组。我们需要增加"发帖ID"、"回复ID"字段,即将表修改为:

用户名 email 主页 电话 联系地址 发帖ID 发帖标题 发帖内容 回复ID 回复标题 回复内容

这样数据表中的关键字(用户名,发帖ID,回复ID)能决定整行:

(用户名,发帖ID,回复ID) → (email,主页,电话,联系地址,发帖标题,发帖内容,回复标题,回复内容)

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

(用户名) → (email,主页,电话,联系地址)

(发帖ID) → (发帖标题,发帖内容)

(回复ID) → (回复标题,回复内容)

即非关键字段部分函数依赖于候选关键字段,很明显,这个设计会导致大量的数据冗余和操作异常。

我们将数据库表分解为(带下划线的为关键字):

(1) 用户信息:用户名,email,主页,电话,联系地址

(2) 帖子信息:发帖ID,标题,内容

(3) 回复信息:回复ID,标题,内容

(4) 发贴:用户名,发帖ID

(5) 回复:发帖ID,回复ID

这样的设计是满足第1、2、3范式和BCNF范式要求的,但是这样的设计是不是最好的呢?

不一定。

观察可知,第4项"发帖"中的"用户名"和"发帖ID"之间是1:N的关系,因此我们可以把"发帖"合并到第2项的"帖子信息"中;第5项"回复"中的"发帖ID"和"回复ID"之间也是1:N的关系,因此我们可以把"回复"合并到第3项的"回复信息"中。这样可以一定量地减少数据冗余,新的设计为:

(1) 用户信息:用户名,email,主页,电话,联系地址

(2) 帖子信息:用户名,发帖ID,标题,内容

(3) 回复信息:发帖ID,回复ID,标题,内容

数据库表1显然满足所有范式的要求;

数据库表2中存在非关键字段"标题"、"内容"对关键字段"发帖ID"的部分函数依赖,即不满足第二范式的要求,但是这一设计并不会导致数据冗余和操作异常;

数据库表3中也存在非关键字段"标题"、"内容"对关键字段"回复ID"的部分函数依赖,也不满足第二范式的要求,但是与数据库表2相似,这一设计也不会导致数据冗余和操作异常。

由此可以看出,并不一定要强行满足范式的要求,对于1:N关系,当1的一边合并到N的那边后,N的那边就不再满足第二范式了,但是这种设计反而比较好!

对于M:N的关系,不能将M一边或N一边合并到另一边去,这样会导致不符合范式要求,同时导致操作异常和数据冗余。
对于1:1的关系,我们可以将左边的1或者右边的1合并到另一边去,设计导致不符合范式要求,但是并不会导致操作异常和数据冗余。

结论

满足范式要求的数据库设计是结构清晰的,同时可避免数据冗余和操作异常。这并意味着不符合范式要求的设计一定是错误的,在数据库表中存在1:1或1:N关系这种较特殊的情况下,合并导致的不符合范式要求反而是合理的。

在我们设计数据库的时候,一定要时刻考虑范式的要求。


如何区分作诠释和下定义?
好处:使人们在阅读时对抽象的字词能够更加明白、理解 作诠释 从一个侧面,就事物的某一个特点做些解释,这种方法叫诠释法。 定义法和诠释法常采用“某某是什么”的语言形式。形式相同,如何区分呢?一般来说,“是”字两边的话能够互换,就是定义;如果不能互换,就是诠释。 例如,“人是能制造工具并使用工具进行劳...

选择查询和操作查询有何区别
选择查询是最常见类型的查询。使用它可以:\\x0d\\x0a从一个或多个表中检索数据(方法是使用指定的条件),然后按所需顺序显示数据。\\x0d\\x0a更新选择查询的数据表中的记录(采用某些限制条件)。\\x0d\\x0a将记录分组,计算总和、计数、平均值及其他类型的总计。\\x0d\\x0a关于操作查询(MDB)\\x...

软件开发需要学什么?
软件工程师课程内容 1.Java技术目标:掌握企业项目开发流程及相关技术,能够使用SSM框架、SSH框架技术,快速开发性能稳定的企业级应用。2.Web前端技术目标:掌握前端设计思想理念,能使用HTML5、CSS3、JavaScript、jQuery、Ajax、bootstrap等技术完成。3.数据库技术目标:掌握数据库设计思想、使用E-R图、第三...

无盘系统里读盘和写盘怎么区分,如何理解,什么是零回写及它有何意义?
读盘和写盘也不是严格定义的,只是从对硬盘的动作来分的,这样和你解决吧,比如说我有硬盘1和硬盘2.硬盘1用来存放无盘系统或是游戏,硬盘2用来存放回写或是用户配置文件,那这里的硬盘1就可称为读盘,因为它主要的动作就是对硬盘的读动作,读游戏数据及系统,而写的动作很少,而硬盘2就可称为写盘...

如何理解质量这一概念?广义质量概念有何现实意义
质量特性,区分了不同产品的不同用途,满足了人们的不同需要。人们就是根据工业产品的这些特性满足社会和人们需要的程度,来衡量工业产品质量好坏优劣的 产品质量应当符合以下标准: 真实性:真实性要求数据库生产者或者销售者提供的数据库内容应当是一种客观事实,而不能是编造的、无中生有的。比如电话号码...

选择查询与操作查询有何区别
选择查询是最常见类型的查询。使用它可以:从一个或多个表中检索数据(方法是使用指定的条件),然后按所需顺序显示数据。 更新选择查询的数据表中的记录(采用某些限制条件)。将记录分组,计算总和、计数、平均值及其他类型的总计。关于操作查询(MDB)操作查询是仅在一个操作中更改或移动许多记录的查询...

如何区分感性认识和理性认识?二者之间有何辨证关系?
区别:感性认识和理性认识是两个不同的认识阶段,有着本质的区别.①与认识对象的联系不同:感性认识是认识主体通过感觉器官在与对象发生实际的接触后产生的,它与认识对象之间的联系是直接的,具有直接性.理性认识是认识主体通过抽象思维对感性材料进行加工制作而获得的,它与认识对象的联系是间接的,具有间接性...

资本性支出和收益性支出两者有何区别,区分他们有何意义
资本性支出和收益性支出两者有何区别,区分他们有何意义 一、理解收益性支出与资本性支出 企业发生的各项支出一般目的都是要为企业带来一定的收益。但各种支出给企业带来效益的时间长短是不一样的,只能在某一会计年度内为企业带来效益的支出称为收益性支出;而那些能为企业若干会计年度带来效益的支出则被称之为资本性支...

GPS与GIS的区别
一、处理的数据不一样 GPS主要处理的是位置、速度、时间等;GIS主要是管理数据。二、特征不同 1、GPS具有全球全天候定位、定位精度高、观测时间短、测站间无需通视、仪器操作简便等特点。2、GIS需要通过计算机软件实现,所采集的信息是按地理空间分布特征并以地图(数据化)的形式来反映的。三、用途不...

三级和二级课程有何区别?
二级课程旨在培养学生的基本学科素养和综合能力,为进一步学习做好铺垫。在中国的教育体系中,学科课程通常以课程等级进行分类,以期能够有效地衔接学生的学习过程。学校会制定不同的教学计划和教学内容,根据学生的学习水平和能力,将课程进行区分和分类。在课程的不同等级中,学生需要掌握不同层次的知识和技能...

伊春区18787253060: 数据库中第一范式,第二范式,第三范式、、、、是什么,怎么区分? -
闽风乌鸡: 第一范式:(1NF)无重复的列 第二范式:(2NF)属性完全依赖于主键 第三范式:(3NF)属性不依赖于其它非主属性 楼主问题中要的就是概念,可是还嫌晕,没办法啊,概念就是概念,结合实际理解一下就好了. 详细的解释可见: http://wenwen.sogou.com/z/q712902371.htm?fr=ala0

伊春区18787253060: 如何快速区分数据库的范式?最好有实例.
闽风乌鸡: 第一范式:如果一个关系,他说有的非主属性都不可再分. 第二范式:只描述一件事情 第三范式:能从列的主键直接得到,而不是间接得到

伊春区18787253060: 怎样区分关系数据库中的六个范式? -
闽风乌鸡: 这六个范式是逐步加强,数据库设计时,满足的范式越高,理论上讲,数据冗余就越少,并且越不容易出问题...实际上嘛..就不说了..总之,一般设计数据库时要求满足第三范式第一范式的意思就是每列都不可再分,且每个表中的每列...

伊春区18787253060: 明天要考试了,现在还不太清楚怎样区分数据库的范式,在线等,用通俗的语言描述1NF,2NF,3NF,BCNF,4NF,5NF -
闽风乌鸡: 实质上,设计范式用很形象、很简洁的话语就能说清楚,道明白.本文将对范式进行通俗地说明,并以笔者曾经设计的一个简单论坛的数据库为例来讲解怎样将这些范式应用于实际工程.范式说明第一范式(1NF):数据库表中的字段都是单...

伊春区18787253060: 数据库中第一范式,第二范式,第三范式、、、、是什么,怎么区分?概念太乱了,我晕了!定义1 对于FD W - >A,如果存在X属于W有X - >A成立,那么称W - ... -
闽风乌鸡:[答案] 第一范式:(1NF)无重复的列 第二范式:(2NF)属性完全依赖于主键 第三范式:(3NF)属性不依赖于其它非主属性 楼主问题中要的就是概念,可是还嫌晕,没办法啊,概念就是概念,结合实际理解一下就好了. 详细的解释可见:

伊春区18787253060: 数据库范式判断
闽风乌鸡: 目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF).满足最低要求的范式是第一范式(1NF).在第一范式的基础上进一步满足更多要求的称为第...

伊春区18787253060: 数据库中怎么判断范式模式是1NF,2NF,3NF,还是BCNF??
闽风乌鸡: 所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性.如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系.在第一范式(1NF)中表的每一行只包含一个实例的信息.简而言之,第一范式就是无重复的列.说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库.

伊春区18787253060: 数据结构中的1范式,2范式,3范式,bc范式,4范式,5范式.怎么理解?希望解释的直白些. -
闽风乌鸡: 这个不是数据结构的内容,属于数据库设计的范畴.规范化设计数据库可以减少数据冗余,减少数据插入、更新异常. 1范式,2范式,3范式,bc范式,4范式,5范式是规范化标准. 比如:目前的所有商用数据库设计出来的表至少必须满足第...

伊春区18787253060: 数据库设计三大范式有什么区别 -
闽风乌鸡: 三大范式并不是用来区别的,是关系型数据库里的规范,是为了减少数据冗余.如果三个规范都满足说明的你的数据库比较健全,数据冗余少,后期维护也方便.用多了就知道了.如果一定要记下,记住定义就好.第一范式:确保每列的原子性....

伊春区18787253060: 什么是数据库中的“范式”? -
闽风乌鸡: 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小. 目前关系数据库有六种范式,但数据库必须遵守1、2、3 范式. 第一范式(1NF)、第二范式(2NF)、第三范式(3NF). 其它的你可以到网上搜索一下

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网