数据库三大范式详解

合集下载

关系型数据库三大范式

关系型数据库三大范式

关系型数据库三⼤范式基础概念:关键字、主关键字、候选关键字,⾮关键字如果某个字段或多个字段的值可以唯⼀地标识⼀条记录,则该字段或字段组就称为关键字。

如果⼀个关键字是⽤以标识每条记录的唯⼀性,并作为该表与其他表实现关联之⽤,则称其为主关键字(主键,primary key)或主码。

除主关键字以外的其他关键字称为候选关键字。

除关键字意外的字称为⾮关键字例如,有⼀个表字段为:id firstname lastname address phone IDcard那么id或IDcard或firstname+lastname(不存在同名的情况下)都可以说是关键字。

其中id为主关键字,IDcard和firstname+lastname为候选关键字。

数据库设计范式第⼀范式(1NF):数据表中的字都是单⼀属性,不可再分的(原⼦性)。

单⼀属性由基本类型构成,包括整型、实数、字符型、逻辑型、⽇期型等。

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

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

例:假定选课关系表为SelectCourse(学号, 姓名, 年龄, 课程名称, 成绩, 学分),关键字为组合关键字(学号, 课程名称),因为存在如下决定关系: (学号, 课程名称) → (姓名, 年龄, 成绩, 学分) 这个数据库表不满⾜第⼆范式,因为存在如下决定关系: (课程名称) → (学分) (学号) → (姓名, 年龄) 即存在组合关键字中的字段决定⾮关键字的情况。

由于不符合2NF,这个选课关系表会存在如下问题: (1) 数据冗余: 同⼀门课程由n个学⽣选修,"学分"就重复n-1次;同⼀个学⽣选修了m门课程,姓名和年龄就重复了m-1次。

数据库五大范式详解

数据库五大范式详解

第一范式(1NF)第一范式,强调属性的原子性约束,要求属性具有原子性,不可再分解。

举个例子,活动表(活动编码,活动名称,活动地址),假设这个场景中,活动地址可以细分为国家、省份、城市、市区、位置,那么就没有达到第一范式。

第二范式(2NF)第二范式,强调记录的唯一性约束,表必须有一个主键,并且没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。

举个例子,版本表(版本编码,版本名称,产品编码,产品名称),其中主键是(版本编码,产品编码),这个场景中,数据库设计并不符合第二范式,因为产品名称只依赖于产品编码。

存在部分依赖。

所以,为了使其满足第二范式,可以改造成两个表:版本表(版本编码,产品编码)和产品表(产品编码,产品名称)。

第三范式(3NF)第三范式,强调属性冗余性的约束,即非主键列必须直接依赖于主键。

举个例子,订单表(订单编码,顾客编码,顾客名称),其中主键是(订单编码),这个场景中,顾客编码、顾客名称都完全依赖于主键,因此符合第二范式,但是顾客名称依赖于顾客编码,从而间接依赖于主键,所以不能满足第三范式。

为了使其满足第三范式,可以拆分两个表:订单表(订单编码,顾客编码)和顾客表(顾客编码,顾客名称),拆分后的数据库设计,就可以完全满足第三范式的要求了。

值得注意的是,第二范式的侧重点是非主键列是否完全依赖于主键,还是依赖于主键的一部分。

第三范式的侧重点是非主键列是直接依赖于主键,还是直接依赖于非主键列。

修正的第三范式(BCNF)修正的第三范式,是防止主键的某一列会依赖于主键的其他列。

举个例子,每个管理员只能管理一个仓库,那么如果设计库存表(仓库名,管理员名,商品名,数量),主键为(仓库名,管理员名,商品名),这是满足前面三个范式的,但是仓库名和管理员名之间存在依赖关系,因此删除某一个仓库,会导致管理员也被删除,因此设计不合理。

第四范式(4NF)当一个表中的非主属性相互独立时(3NF),这些非主属性不应该有多值。

数据库应用技术第四次形考作业解答国开学习网版

数据库应用技术第四次形考作业解答国开学习网版

数据库应用技术第四次形考作业解答国开学习网版本文档是对数据库应用技术第四次形考作业的解答,以下是各个题目的解答内容。

题目一题目一要求对数据库的三大范式进行说明和比较。

第一范式(1NF)第一范式要求数据库中的每个属性都是原子的,不可再分的。

也就是说,数据库表中的每个字段都只能存储一个数据值,不允许有多个值或者是重复的值。

第二范式(2NF)第二范式要求数据库表中的非主键属性必须完全依赖于全部主键而不是部分主键。

也就是说,如果一个表中的某个属性只依赖于表的一部分主键,那么就违反了第二范式。

第三范式(3NF)第三范式要求数据库表中的非主键属性不依赖于其他非主键属性。

也就是说,一个表中的每个属性只依赖于主键,而不依赖于其他属性。

比较三大范式,可以得出以下结论:- 第一范式是最基本的范式,要求每个属性都是原子的,不可再分的。

- 第二范式是在第一范式的基础上,要求非主键属性完全依赖于全部主键。

- 第三范式是在第二范式的基础上,要求非主键属性不依赖于其他非主键属性。

题目二题目二要求对数据库的ACID特性进行解释。

原子性(Atomicity)原子性指的是事务中的操作要么全部执行成功,要么全部执行失败。

也就是说,事务中的操作是不可分割的,要么全部执行,要么全部不执行。

一致性(Consistency)一致性指的是事务执行前后,数据库的状态保持一致。

也就是说,事务执行后,数据库中的数据应该满足一定的约束和规则,不会破坏数据库的完整性。

隔离性(Isolation)隔离性指的是并发执行的事务之间应该互相隔离,一个事务的执行不应该被其他事务干扰。

也就是说,每个事务应该感觉不到其他事务的存在,各个事务之间应该是相互独立的。

持久性(Durability)持久性指的是事务一旦提交成功,对数据库中的数据修改应该是永久性的。

即使系统发生故障或者断电,事务提交后的数据也应该能够被恢复。

题目三题目三要求解释什么是数据库的锁机制。

数据库的锁机制是为了实现事务的隔离性而设计的。

简述数据库设计3个范式的含义

简述数据库设计3个范式的含义

数据库设计是指按照特定的规范和要求,对数据库的数据存储和管理进行规划和设计的过程。

数据库设计的三个范式是指数据库设计中的基本规范,其中第一范式(1NF)、第二范式(2NF)和第三范式(3NF)分别规定了数据库中的数据应该满足的标准和要求。

下面我们将简要介绍数据库设计的三个范式的含义。

一、第一范式(1NF)1. 第一范式是指数据库表中的所有字段都是不可再分的最小单元,即每个数据项都是不可再分的,不能再被分割为更小的数据项。

2. 数据库表中的每一列都是单一的值,不可再分。

3. 所有的字段都应该是原子性的,即不能再分。

4. 如果数据库表中的字段不满足第一范式的要求,就需要进行适当的调整和修改,使之满足第一范式的要求。

二、第二范式(2NF)1. 第二范式是指数据库表中的所有非主属性都完全依赖于全部主键。

2. 所谓主属性是指唯一标识一个记录的属性,而非主属性是指与主键相关的其他属性。

3. 如果一个表中的某些字段与主键没有直接关系,而是依赖于其他字段,则需要将这些字段拆分到另一个表中。

4. 通过将非主属性与主键分离,可以避免数据冗余和更新异常。

5. 第二范式要求数据库表中的数据项应该是唯一的,不可再分,且完全依赖于全部主键。

三、第三范式(3NF)1. 第三范式是指数据库表中的所有字段都不依赖于其他非主字段。

2. 也就是说,一个表中的字段之间应该相互独立,不应该存在字段之间的传递依赖关系。

3. 如果一个字段依赖于其他非主字段,则应该将其拆分到另一张表中,以避免数据冗余和更新异常。

4. 第三范式要求数据库表中的字段之间应该是独立的,不应该存在传递依赖关系。

数据库设计的三个范式分别规范了数据库表中数据的原子性、依赖性和独立性。

遵循这些范式可以有效地减少数据冗余和更新异常,提高数据库的数据完整性和稳定性。

在进行数据库设计时,设计人员应该严格遵循这些范式的要求,以确保数据库的高效性和可靠性。

众所周知,数据库设计的三个范式是设计和维护关系型数据库时非常重要的标准和指导原则。

第一范式(1NF)、第二范式(2NF)和第三范式(3NF)之间的区别是什么?

第一范式(1NF)、第二范式(2NF)和第三范式(3NF)之间的区别是什么?

第一范式(1NF)、第二范式(2NF)和第三范式(3NF)之间的区别是什么?构造数据库必须遵循一定的规则。

在关系数据库中,这种规则就是范式。

范式是符合某一种级别的关系模式的集合。

关系数据库中的关系必须满足一定的要求,即满足不同的范式。

目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。

满足最低要求的范式是第一范式(1NF)。

在第一范式的基础上进一步满足更多要求的称为第二范式(2NF),其余范式以次类推。

一般说来,数据库只需满足第三范式(3NF)就行了。

下面我们举例介绍第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。

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

所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。

如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。

在第一范式(1NF)中表的每一行只包含一个实例的信息。

例如,对于图3-2 中的员工信息表,不能将员工信息都放在一列中显示,也不能将其中的两列或多列在一列中显示;员工信息表的每一行只表示一个员工的信息,一个员工的信息在表中只出现一次。

简而言之,第一范式就是无重复的列。

3.4.2 第二范式(2NF)第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。

第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。

为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。

如图3-2 员工信息表中加上了员工编号(emp_id)列,因为每个员工的员工编号是惟一的,因此每个员工可以被惟一区分。

三大范式定义

三大范式定义

三大范式
1第—范式(INF): 毎一列都是不可分分隔的原子数据顶
2第二范式(2NF):在1NF的基础上,非码属性必须完全依赖于码
(在1NF础上消除非主属性对主码的部分函数依赖)
3笫三范式(3NF):在2NF基础上,任何非主属性不依赖于其它非主属性
(在2NF的基础上消除传递依赖)
•几个概念:
1.函数依赖:A-->B,如果通过A属性(属性组)的值,可以确定唯一B属性的值。

则称B依赖于A
例如:学号-->姓名。

(学号,课程名称)--> 分数
2.完全函数依赖:A-->B,如果A是—个属性组,
则B属性值得依赖于A属性组中所有的属性值•
例如:(学号,课程名称)分数
3.部分函教依赖:A-->B,如果A是一个属性组,
则B属性值确定只需要依赖于A属性组中某一个值即可
例如:(学号,课程名称)-- > 姓名
4.传递函数依赖A -- >B, B -- >C 如果通过A属性(属性组)的值,可以确定唯一B属性的值,在通过B属性(属性组)的值可以确定唯一C 属性的值,则称C传速函数依赖于A
例如:学号一>系名,系名系主任•
5.码.如果在一张表中,一个属性或属性组,被其他所有属性所完全依赖,则称这个属性(属性组)为该表的码
例如:该表中码为:(学号,课程名称)
*主属性:码属性组中的所有属性.
*非主属性:除去主属性的属性。

sql 三范式 的深刻理解

sql 三范式 的深刻理解

sql 三范式的深刻理解
SQL三范式是指在数据库设计中,将数据划分为不同的表,以降
低数据重复性和提高数据一致性的规范化过程。

它包括三个范式,即
第一范式、第二范式、第三范式。

深刻理解SQL三范式对于数据库设
计和管理是至关重要的。

第一范式(1NF):每个数据都是原子性的,不可再拆分为更小
的数据项。

即每一个字段都应该是不可再分的基本数据类型。

例如,
在一个用户表中,电话号码不能被拆为区号、前缀和后缀三个字段。

第二范式(2NF):满足1NF的基础上,每个表只描述一种实体,同时该表中的每个非主键字段都与主键相关。

例如,在一个客户订单
表中,订单号为主键,如果要添加产品信息,需要再创建一个产品表,产品信息与订单信息关系可以用产品ID与订单表关联。

第三范式(3NF):满足2NF的基础上,消除表中的传递依赖,
即非主键字段只与主键相关,而不与其他非主键字段相关。

例如,在
一个员工表中,如果要添加部门信息,需要再创建一个部门表,而不
是将部门信息作为员工表的一个字段,因为该字段会随部门名的变化
而变化。

总之,SQL三范式是数据库设计中的核心规范,可以提高数据的
一致性和减少数据的冗余。

当遇到表中存在传递依赖时,应当将其拆
分为两个独立的表。

这样可以更好地管理数据,减少数据出错的概率。

通过深刻理解SQL三范式,我们可以在设计和管理数据库时更好地掌
控数据。

数据库范式(1NF2NF3NFBCNF)详解(20200521130257)

数据库范式(1NF2NF3NFBCNF)详解(20200521130257)

数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。

反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,而且面目可憎,可能存储了大量不需要的冗余信息。

范式说明第一范式(1NF)无重复的列所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。

如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。

在第一范式(1NF)中表的每一行只包含一个实例的信息。

简而言之,第一范式就是无重复的列。

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

例如,如下的数据库表是符合第一范式的:字段1 字段2 字段3 字段4而这样的数据库表是不符合第一范式的:字段1 字段2 字段3 字段4字段字段数据库表中的字段都是单一属性的,不可再分。

这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。

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

因此,你想在现有的DBMS中设计出不符合第一范式的数据库都是不可能的。

第二范式(2NF)属性完全依赖于主键[ 消除部分子函数依赖]如果关系模式R为第一范式,并且R中每一个非主属性完全函数依赖于R的某个候选键,则称为第二范式模式。

第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。

第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。

为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据库三大范式详解设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。

目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴德斯科范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。

满足最低要求的范式是第一范式(1NF)。

在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。

一般说来,数据库只需满足第三范式(3NF)就行了。

第一范式(1NF)无重复的列所谓第一范式(1NF)是指在关系模型中,对域添加的一个规范要求,所有的域都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。

即实体中的某个属性有多个值时,必须拆分为不同的属性。

在符合第一范式(1NF)表中的每个域值只能是实体的一个属性或一个属性的一部分。

简而言之,第一范式就是无重复的域。

说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的设计基本要求,一般设计中都必须满足第一范式(1NF)。

不过有些关系模型中突破了1NF的限制,这种称为非1NF的关系模型。

换句话说,是否必须满足1NF的最低要求,主要依赖于所使用的关系模型。

第二范式(2NF)属性在1NF的基础上,非码属性必须完全依赖于主键[在1NF基础上消除非主属性对主码的部分函数依赖]第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。

第二范式(2NF)要求数据库表中的每个实例或记录必须可以被唯一地区分。

选取一个能区分每个实体的属性或属性组,作为实体的唯一标识。

例如在员工表中的身份证号码即可实现每个一员工的区分,该身份证号码即为候选键,任何一个候选键都可以被选作主键。

在找不到候选键时,可额外增加属性以实现区分,如果在员工关系中,没有对其身份证号进行存储,而姓名可能会在数据库运行的某个时间重复,无法区分出实体时,设计辟如ID等不重复的编号以实现区分,被添加的编号或ID选作主键。

(该主键的添加时在ER设计时添加,不是建库是随意添加)第二范式(2NF)要求实体的属性完全依赖于主关键字。

所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。

为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。

简而言之,第二范式就是在第一范式的基础上属性完全依赖于主键。

第三范式(3NF)属性在1NF基础上,任何非主属性不依赖于其它非主属性[在2NF基础上消除传递依赖]第三范式(3NF)是第二范式(2NF)的一个子集,即满足第三范式(3NF)必须满足第二范式(2NF)。

简而言之,第三范式(3NF)要求一个关系中不包含已在其它关系已包含的非主关键字信息。

例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。

那么在的员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。

如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。

简而言之,第三范式就是属性不依赖于其它非主属性,也就是在满足2NF的基础上,任何非主属性不得传递依赖于主属性。

巴德斯科范式(BCNF)属性在1NF基础上,任何非主属性不能对主键子集依赖[在3NF基础上消除对主码子集的依赖]巴德斯科范式(BCNF)是第三范式(3NF)的一个子集,即满足巴德斯科范式(BCNF)必须满足第三范式(3NF)。

通常情况下,巴德斯科范式被认为没有新的设计规范加入,只是对第二范式与第三范式中设计规范要求更强,因而被认为是修正第三范式,也就是说,它事实上是对第三范式的修正,使数据库冗余度更小。

这也是BCNF不被称为第四范式的原因。

某些书上,根据范式要求的递增性将其称之为第四范式是不规范,也是更让人不容易理解的地方。

而真正的第四范式,则是在设计规范中添加了对多值及依赖的要求。

对于BCNF,在主码的任何一个真子集都不能决定于非主属性。

关系中U主码,若U中的任何一个真子集X都不能决定于非主属性Y,则该设计规范属性BCNF。

例如:在关系R中,U为主码,A属性是主码中的一个属性,若存在A->Y,Y为非主属性,则该关系不属性BCNF。

一般关系型数据库设计中,达到BCNF就可以了!数据库设计三大范式应用实例剖析数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。

反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,而且面目可憎,可能存储了大量不需要的冗余信息。

设计范式是不是很难懂呢?非也,大学教材上给我们一堆数学公式我们当然看不懂,也记不住。

所以我们很多人就根本不按照范式来设计数据库。

实质上,设计范式用很形象、很简洁的话语就能说清楚,道明白。

本文将对范式进行通俗地说明,并以笔者曾经设计的一个简单论坛的数据库为例来讲解怎样将这些范式应用于实际工程。

范式说明第一范式(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范式的,消除了删除异常、插入异常和更新异常。

相关文档
最新文档