还剩5页未读,继续阅读
文本内容:
范式说明
1.第一范式无重复的列
1.1INF所谓第一范式是指数据库表的每一列都是不可分割的1NF基本数据项,同一列中不能同时有多个值,即实体中的基个属性不能有多个值或者不能有重复的属性如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系在第一范式中表的每一行只包含一个实例的信息简而言之,第一范1NF式就是无重复的列在任何一个关系数据库中,第一范式是对关系模式的1NF基本要求,不满足第一范式的数据库就不是关系数据库1NF在当前的任何关系数据库管理系统中,不可能做出不符DBMS合第一范式的数据库,因为这些不允许你把数据库表的一DBMS列再分成二列或多列因此,你想在现有的中设计出不符DBMS合第一范式的数据库都是不可能的举例1一张学生表合StudentstuNo,stuName,age,age,sex^^^第一范式的,因为有重复列属性去除重复列以后的age age是符合第一范式的StudentstuNo,stuName,age,sex第二范式属性完全依赖于主键[消除部分子函数
1.22NF依赖]第二范式是在第一范式的基础上建立起来的,2NF1NF即满足第二范式必须先满足第一范式2NF第二范式要求数据库表中的每个实例或行必须可INF o2NF以被唯一地区分为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识例如员工信息表中加上了员工编号empjd歹因为每个员工的员工编号是唯一的,因此每个员工可以被唯U,一区分这个唯一属性列被称为主关键字或主键、主码第二范式要求实体的属性完全依赖于主关键字所谓2NF完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识简而言之,第二范式就是属性完全依赖于主键这里说的主关键字可能不只有一个,有些情况下是存在联合主键的,就是主键有多个属性举例2以学生选课为例,每个学生都可以选课,并且有这一门课程的成绩,那么如果将这些信息都放在一张表「「StuGr~ddestuNo,stuName,ace,sex,cou seNo,cou seNd如果不仔细看,我们会以为这张表的主键是me,credit,score但是当我们看到最后一个属性以后,在想想如果没stuNo,score有课程信息,那么哪里有学生成绩信息呢所以这张表的主键是一个联合主键这个联合属性能够唯一确定stuNo,corseNo,属性那么再看其他信息,比如只需要score stuNamestuNo就能够唯一确定,只需要「就能够唯一courseName couseNo确定,因此这样就存在了部分依赖,不符合第二范式如果要让学生课程成绩信息满足第二范式,那么久需要将这张表拆分成多张表,一张学生表一张StudnetstuNo,stuName,age,sex,课程表还有最后一张CoursecourseNo,courseName,credit,学生课程成绩表这样就StuGradestuNo,courseNo,score符合第二范式了第三范式属性不依赖于其它非主属性[消除传递依
1.33NF赖]满足第三范式必须先满足第二范式简而言之,3NF2NF o第三范式要求一个数据库表中不包含已在其它表中已包含3NF的非主关键字信息举例3:每一个员工都有一个所属部门,假如有一个员工信息表Employeeemp_id emp_name emp_age,dept_id,dept_z f这张员工信息表的属性是因为这name,dept_infoo emp_id,个属性能够唯一确定其他所有属性,比如知道员工编号emp_id以后,肯定能够知道员工姓名,所属部门编号,部门名称和部门介绍所以这里不是主属性,而是非主属性但是,我deptjd们又可以发现这两个属性也可以由dept_name,deptjnfo这个非主属性决定,即依赖而deptjd dept_name deptjd,依赖这样就存在了传递依赖而且我们可以看deptjd emp_id,出传递依赖的一个明显缺点就是数据冗余非常严重那么如何解决传递依赖问题,其实非常简单,我们只需要将这连个属性删除就可以了,即dept_name,dept_info然后再Employeeemp_id emp_name emp_age dept_id,z AA创建一个部门表这Deptdept_id,dept_name,dept_info样如果要搜索某一个员工的部门信息可以通过数据库deptjnfo,连接来实现,查询语句如下㊀㊀e.emp_id,e.emp_name,d.d pt_namselect fromEmployeee Deptd e.dept_id-d.dept_idA where范式BC设关系模式如果对于的每个函数依赖若不属于则必含有RvU,FG1NF,R X-Y,Y X,X候选码,那么R£BCNF解释一下对于关系模式若中的所有非平凡的、完全的函数依赖的决定因素是码,R,R则属于R BCNFo若RGBCNF每一个决定属性集(因素)都包含(候选)码中的所有属性(主,非主属性)都完全函数依赖于码R(证明)Re3NF若贝不一定R£3NF ij R£BCNF在关系模式()中,表示学生,表示教师,表示课程STJ S,T,J ST J每一教师只教一门课每门课由一名教师教,某一学生选定某门课,就确定了一个固定的(教师某个学生选修某个教师的课就确定了所选课的名称S,)一()J T,S,T-J,T—J由关系模式的定义可以得到如下结论,若属于则有R BCNF,R,所有非主属性对每一个码都是完全函数依赖
1.所有的主属性对每一个不包含它的码,也是完全函数依赖
2.没有任何属性完全函数依赖于非码的任何一组属性3由于按定义排除了任何属性对码的传递依赖与部分依赖,所以但是若R£BCNF,Re3NFO贝未必属于R£3NF,ijR BCNFo.第一范式数据库的字段是单一属性,不可再分1解释•不能是复合属性,如果存在,应该拆分为多个属性•不能是多值属性,如果存在,应该建立一个实体,而让此属性与其存在对多的关系)1•不能是重复属性.第二范式任何非关键字段不能部分依赖任一侯选关键字(即必须完全依赖)解释2•表中必须存在侯选关键字,即每一行不同于其他任一行,是惟一区分的•任何非关键字段不能依赖于侯选关键字的一部分.第三范式任何非关键字段不能传递依赖任一侯选关键字解释3非关键字字段必须直接依赖任一侯选关键字•非关键字段不能依赖非侯选关键字因为样会形成传递依赖侯选关键字C B,A=B=C,因为这时的往往是外键,即其他表的主键,也就是说表中不能含有其他表的非主属B性范式任何字段都不能传递依赖任一侯选关键字
4.BC解释•与第三范式相比,一个是“任何非关键字段不能”,一个是“任何字段不能”,显然更严格了・侯选关键字或其部分字段不能传递依赖其他的侯选关关键字注释侯选关键字又叫侯选码,惟一标识一行数据,其真子集不能是侯选关键字,一个表可以存在多个侯选关键字,如用户表的username,userid主关键字又叫主键,主码,被选中的用来区分其它行的侯选关键字,一个表只有一个主关键字(部分依赖)如则部分依赖A,B-C,D,A-C,C A传递依赖则传递依赖C A第一范式()属性不可拆分或无重复的列
1.1NF这个简单,就是一个属性不允许再分成多个属性来建立列事实上,在目前的中是不DBMS可能拆分属性的,因为他们不允许这么做第二范式()完全函数依赖
2.2NF先讲讲什么是部分函数依赖部分函数依赖,就是多个属性决定另一个属性,但事实上,这多个属性是有冗余的例如,(学号,班级),姓名,事实上,只需要学号就能决定姓名,因此班级是冗余的,应该去掉满足第二范式的数据库设计必须先满足第一范式因此第二范式的目标就是消除函数依赖关系中左边存在的冗余属性•第三范式()消除传递依赖33NF不依赖于其他非主属性(消除传递依赖)满足第三范式的数据库必须先满足第二范式也就是,数据库中的属性依赖仅能依赖于主属性,不存在于其他非主属性的关联例如,图书,图书室的关系图书包括编号、出版商、页码等信息、,图书室包括图书室编号、所存图书(外键)其中,图书室的表中不应该存储任何图书的具体信息(例如,出版商),而只能通过主键图书编号来获得对应图书的信息范式()
4.BC BCNF()所有非主属性对每一个码都是完全函数依赖;1()所有的主属性对于每一个不包含它的码,也是完全函数依赖;2()没有任何属性完全函数依赖于非码的任意一个组合3属于不一定属于如果属于一定属于R3NF,BCNF,R BCNF,3NF・范式(英语:缩写)是数据库规范化中所使Boyce CoddBoyce-Codd normalform,BCNF,用的一种正规形式是在第三范式的基础上加上更严格约束,每个关系是箜三范式的子BCNF集,有从属关系它的定义是如果对于关系模式中存在的任意一个非平凡函数依赖都满足是的一个候R X-A,X R选键,那么关系模式就属于RBCNF,与第三范式的不同之处在于,第三范式允许是主属性(第三范式中不存在韭主键BCNF A被另一个非主键决定),而在中,任何属性(包括非主键和主键)都不能被非主键BCNF所决定范仞编辑h1关系模式R双主键)Property_id County_name Lot#Area其中依赖关系如下Property_id#-{County_name Lot#Area};J J{County_name,Lot#}-{Property_id#,Area};Area-County_name;很明显最后一个依赖违反了范式的要求,不是关系模式的主键,而依赖于它BC AreaR的是能够决定其他属性的主属性故应当规范化为County_name双主键)Property_id County_nameLot#(主键)Area County_name。