第一范式(1NF):定义:当关系模式R的所有属性都不能在分解为更基本的数据单位时,称R是满足第一范式的,简记为1NF。列1唯一确定列2,列3,列4,...,即列2,列3,列4,...不能再分裂出其它列。(简易理解:表中的每列的属性不可再分,每一列(每个字段)必须是不可拆分的最小单元)举例说明:学号(主键)姓名性别就读信息202001张三男大一,计算机科学与技术202002李四男大二,网络工程202003王舞女大三,软件工程上表中,可以看到(就读信息)这一列,其实可以分解为年级和专业,也因为(就读信息)这一属性可以再分,故不满足第一范式修改:学号(主键)姓名性别年级专业202001张三男大一计算机科学与技术202002李四男大二网络工程202003王舞女大三软件工程这样将(就读信息)拆分为(年级)、(专业)两个属性,便满足了第一范式(1NF)第二范式(2NF):定义:如果关系模式R满足第一范式,并且R得所有非主属性都完全依赖于R的每一个候选关键属性,称R满足第二范式,简记为2NF。满足2NF的前提是必须满足1NF。此外,关系模式需要包含两部分内容,一是必须有一个(及以上)主键;二是没有包含在主键中的列必须全部依赖于全部主键,而不能只依赖于主键的一部分而不依赖全部主键。简易理解:满足1NF后,要求表中的所有列,都必须依赖于所有主键,而不能有任何一列与任一主键没有关系。举例说明:学号(主键)课程(主键)教师姓名成绩学生姓名专业202001C语言程序设计老张80张三计算机科学与技术202002JAVA程序设计老李87李四网络工程202003数据结构老王90王舞软件工程上表中,可以看到(教师姓名、成绩)两个属性都依赖于(学号)和(课程),但是(学生姓名、专业)这一属性却只依赖于(学号),不依赖于(课程),即:只需要知道(学号)便可得知(学生姓名、专业)。所以,导致非主属性(学生姓名、专业)不完全依赖于主键(学号、课程),故不符合第二范式。修改:将原表拆分为两张表,即可实现让它的非主属性都完全依赖于主键,即可符合第二范式(2NF)学号(主键)课程(主键)教师姓名成绩202001C语言程序设计老张80202002JAVA程序设计老李87202003数据结构老王90(成绩)和(教师姓名)两个非主属性都依赖于主键(学号、课程)学号(主键)学生姓名专业202001张三计算机科学与技术202002李四网络工程202003王舞软件工程(专业)和(学生姓名)两个非主属性都依赖于主键(学号)第三范式(3NF):定义:设R是一个满足第一范式条件的关系模式,X是R的任意属性集,如果X非传递依赖于R的任意一个候选关键字,称R满足第三范式,简记为3NF。满足3NF的前提是必须满足2NF。另外关系模式的非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列m既依赖于全部主键,又依赖于非主键列n的情况。简单理解:必须先满足第二范式(2NF),要求表中的每一列只与主键直接相关而不是间接相关,列与列之间无关联(表中的每一列只能依赖于主键)。举例说明:学号(主键)姓名性别年级专业班主任姓名班主任性别班主任年龄202001张三男大一计算机科学与技术老张男33202002李四男大二网络工程老李男34202003王舞女大三软件工程老王男35上表中,表中的非主属性都依赖于(学号),满足了第二范式。但是,(班主任性别、年龄)这两个属性是直接依赖于(班主任姓名)这一属性的,与(学号)属于间接依赖。这就导致了表中的非主属性存在着依赖关系,不符合第三范式。修改:学号(主键)姓名性别年级专业202001张三男大一计算机科学与技术202002李四男大二网络工程202003王舞女大三软件工程班主任姓名(主键)班主任性别班主任年龄老张男33老李男34老王男35将原表拆分为两张表:学生表与班主任表,在满足第二范式的同时,表中的非主属性都不存在着依赖关系,故符合第三范式BCNF:定义:如果关系模式R∈2NF,且每个非主属性都不传递函数依赖于R的主关系键,则称R属于第三范式,简称3NF。1.所有非主属性对每一个码都是完全函数依赖;2.所有的主属性对每一个不包含它的码,也是完全函数依赖;3.没有任何属性完全函数依赖于非码的任何一组属性。若一个关系达到了第三范式,并且它只有一个候选码,或者它的每个候选码都是单属性,则该关系自然达到BC范式。举例:例一:学生(S)课程号(J)名次(P)张三2020012李四2020021王舞2020033关系模式SJP(S,J,P)中,S是学生,J表示课程,P表示名次,每一个学生选修每门课程的成绩都会有一定的名次,每门课程中每一个名次只有一个学生(即没有并列名次)。函数依赖(S,J)决定P,(J,P)决定S;所以(S,J)与(J,P)都可以作为候选码,这两个码由两个主属性组成,不存在非主属性,显然没有非主属性对码的传递和部分函数依赖,所以SJP属于第三范式;而且满足上面1,2,3三条,所以SJP属于BCNF;例二:某公司有若干个仓库;每个仓库只能有一名管理员,一名管理员只能在一个仓库中工作;一个仓库中可以存放多种物品,一种物品也可以存放在不同的仓库中。每种物品在每个仓库中都有对应的数量。已知函数依赖集:仓库名→管理员,管理员→仓库名,(仓库名,物品名)→数量码:(管理员,物品名),(仓库名,物品名)主属性:仓库名、管理员、物品名非主属性:数量由于在主属性中,仓库号能够推出管理员。管理员能够推出仓库号。他们之间存在传递依赖。这是不符合bcnf的。修改:把表格拆分,得到例如以下结果:表一(仓库号。管理员);表二(管理员,货物,数量)仓库号管理员上海仓张三上海仓张三北京仓李四北京仓李四管理员物排名数量张三iPhone5s30张三iPadAir40李四iPhone5s50李四iPadMini60第四范式(4NF):定义:关系模式R属于1NF,对于R中的每一个非平凡多值依赖X→→Y(X不包含Y),X都含有码,则R属于4NF。根据4NF的定义可知,4NF所允许的非平凡的多值依赖实际上就是函数依赖,4NF就是消除表中的非平凡多值依赖关系(要求把同一表内的多对多关系消除)。举例:课程学生爱好JAVA1VBJAVA1C#JAVA1BSJAVA2VBJAVA2C#JAVA2BS一个表中存在三个数据:“课程、学生、先修课”。假设2017级的计算机专业学生想要学习JAVA课程,那么他们需要先学习VB、C#、BS三门课,才可以选择进行JAVA课程。存在关系:课程→学生课程→先修课两个均是1:N的关系,当出现在一张表的时候,会出现大量的冗余。所以就我们需要分解它,减少冗余。第五范式(5NF):定义:在满足第四范式(4NF)的基础上,消除不是由候选码所蕴含的连接依赖。如果关系模式R中的每一个连接依赖均由R的候选码所隐含,则称此关系模式符合第五范式。它的原则是:原来的表格必须可以通过由它分离出去的表格重新构建第五范式是在第四范式的基础上做的进一步规范化。第四范式处理的是相互独立的多值情况,而第五范式则处理相互依赖的多值情况。举例:销售人员供应商产品张三甲1李四乙2王五丙3如果要定位到特定行,必须三个属性都为关键字。所以关系要变为三个关系,分别是销售人员和供应商,销售人员和产品,供应商和产品如下:可以将其分解为三张表以减少冗余:销售人员供应商张三甲李四乙王五丙销售人员产品张三1李四2王五3供应商产品甲1乙2丙3