数据库范式详解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一范式(1NF):
定义:当关系模式R的所有属性都不能在分解为更基本的数据单位时,称R是满足第一范式的,简记为1NF。
列1唯一确定列2, 列3, 列4, ...,即列2, 列3, 列4, ...不能再分裂出其它列。
(简易理解:表中的每列的属性不可再分,每一列(每个字段)必须是不可拆分的最小单元)
举例说明:
上表中,可以看到(就读信息)这一列,其实可以分解为年级和专业,也因为(就读信息)这一属性可以再分,故不满足第一范式
修改:
第二范式(2NF):
定义:如果关系模式R满足第一范式,并且R得所有非主属性都完全依赖于R 的每一个候选关键属性,称R满足第二范式,简记为2NF。
满足2NF的前提是必须满足1NF。此外,关系模式需要包含两部分内容,一是必须有一个(及以上)主键;二是没有包含在主键中的列必须全部依赖于全部主键,而不能只依赖于主键的一部分而不依赖全部主键。
简易理解:满足1NF后,要求表中的所有列,都必须依赖于所有主键,而不能有任何一列与任一主键没有关系。
举例说明:
上表中,可以看到(教师姓名、成绩)两个属性都依赖于(学号)和(课程),但是(学生姓名、专业)这一属性却只依赖于(学号),不依赖于(课程),即:只需要知道(学号)便可得知(学生姓名、专业)。所以,导致非主属性(学生姓名、专业)不完全依赖于主键(学号、课程),故不符合第二范式。
修改:
将原表拆分为两张表,即可实现让它的非主属性都完全依赖于主键,即可符合第二范式(2NF)
(成绩)和(教师姓名)两个非主属性都依赖于主键(学号、课程)
第三范式(3NF):
定义:设R是一个满足第一范式条件的关系模式,X是R的任意属性集,如果X 非传递依赖于R的任意一个候选关键字,称R满足第三范式,简记为3NF。
满足3NF的前提是必须满足2NF。另外关系模式的非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列m既依赖于全部主键,又依赖于非主键列n的情况。
简单理解:必须先满足第二范式(2NF),要求表中的每一列只与主键直接相关而不是间接相关,列与列之间无关联(表中的每一列只能依赖于主键)。
举例说明:
上表中,表中的非主属性都依赖于(学号),满足了第二范式。
但是,(班主任性别、年龄)这两个属性是直接依赖于(班主任姓名)这一属性的,与(学号)属于间接依赖。
这就导致了表中的非主属性存在着依赖关系,不符合第三范式。
修改:
将原表拆分为两张表:学生表与班主任表,在满足第二范式的同时,表中的非主属性都不存在着依赖关系,故符合第三范式
BCNF:
定义:如果关系模式R∈2NF,且每个非主属性都不传递函数依赖于R的主关系键,则称R属于第三范式,简称3NF。
1.所有非主属性对每一个码都是完全函数依赖;
2.所有的主属性对每一个不包含它的码,也是完全函数依赖;
3.没有任何属性完全函数依赖于非码的任何一组属性。
若一个关系达到了第三范式,并且它只有一个候选码,或者它的每个候选码都是单属性,则该关系自然达到BC范式。
举例:
例一:
修每门课程的成绩都会有一定的名次,每门课程中每一个名次只有一个学生(即没有并列名次)。
函数依赖(S,J)决定P,(J,P)决定S;
所以(S,J)与(J,P)都可以作为候选码,这两个码由两个主属性组成,不存在非主属性,显然没有非主属性对码的传递和部分函数依赖,所以SJP属于第三范式;而且满足上面1,2,3三条,所以SJP属于BCNF;
例二:
某公司有若干个仓库;每个仓库只能有一名管理员,一名管理员只能在一个仓库中工作;一个仓库中可以存放多种物品,一种物品也可以存放在不同的仓库中。每种物品在每个仓库中都有对应的数量。
已知函数依赖集:仓库名→ 管理员,管理员→ 仓库名,(仓库名,物品名)→ 数量
码:(管理员,物品名),(仓库名,物品名)
主属性:仓库名、管理员、物品名
非主属性:数量
由于在主属性中,仓库号能够推出管理员。管理员能够推出仓库号。他们之间存在传递依赖。这是不符合bcnf的。
修改:把表格拆分,得到例如以下结果:
表一(仓库号。管理员);表二(管理员,货物,数量)
定义:关系模式R属于1NF,对于R中的每一个非平凡多值依赖X→→Y(X不包含Y),X都含有码,则R属于4NF。
根据4NF的定义可知,4NF所允许的非平凡的多值依赖实际上就是函数依赖,4NF就是消除表中的非平凡多值依赖关系(要求把同一表内的多对多关系消除)。
举例:
课程学生爱好
JAVA 1 VB
JAVA 1 C#
JAVA 1 BS
JAVA 2 VB
JAVA 2 C#
JAVA 2 BS
专业学生想要学习JAVA课程,那么他们需要先学习VB、C#、BS三门课,才可以选择进行JAVA课程。
存在关系:课程→学生课程→先修课
两个均是1:N的关系,当出现在一张表的时候,会出现大量的冗余。所以就我们需要分解它,减少冗余。
定义:在满足第四范式(4NF )的基础上,消除不是由候选码所蕴含的连接依
赖。如果关系模式R 中的每一个连接依赖均由R 的候选码所隐含,则称此关系模式符合第五范式。
它的原则是: 原来的表格必须可以通过由它分离出去的表格重新构建 第五范式是在第四范式的基础上做的进一步规范化。
第四范式处理的是相互独立的多值情况,而第五范式则处理相互依赖的多值情况。
举例:
所以关系要变为 三个关系,分别是销售人员和供应商,销售人员和产品,供应商和产品如下: