范式含义(Normal From—NF)
在关系数据库中,数据表在设计时遵循的规范准则(这些规则是为指导与推荐的,类似一种约定俗成,用户的数据表在满足这些规则时也就等于满足这些范式,即“规则”=“范式”),范式的英文名称为Normal Form,简称NF。要想设计一个合理的关系型数据库,就需要满足一定的范式。范式一共有6种——1NF 2NF 3NF(常用三大范式),BCNF(巴斯科德范式),4NF(第四范式),5NF(第五范式/完美范式)。
在数据库设计时满足范式的意义:降低数据冗余,范式越高阶,数据冗余度就越低。在满足高阶范式时必须同时满足低阶范式。
基本概念
数据库的组成:
数据:
描述事物的符号(数字,文字,图片,图像,声音等等)
数据以记录的方式储存(数据表行为记录,列为字段)
表:
一条或多条不同的记录组成(数据表必须满足完整性,不允许相同的记录,不满足的要求的数据格式存在)
记录(数据):行
字段(属性):列(对于每一列的数据必须满足相同的数据格式)
关键名词:
超键:
在关系中能唯一标识元组的属性集称为关系模式的超键
例:表student(学号,学生姓名,学生性别,学生身份证号,教师编号)
其中的超键有(Sno),(Sno,Sname),(Sno,Sname,Ssex),(Sid,Sname,Sno),(Sid),(Sid Sname),(Sno,Tno)等等许多,但他们的特点是,依据其中一个键,则可获得其它唯一的键,例如依据学号获得学生的姓名只有一个,不会有多个值与之符合。
候选键:
不含有多余属性的超键称为候选键(候选键属于超键,是最小的超键),例如(Sno),(Sid)等等,但(Sno,Sname)就不满足,因为删除Sname属性后依旧满足成为超键的要求。注意:候选键的组成可以由一个或多个属性组成,比如表XX的最小超键为(属性1,属性2),在删除属性1或属性2后,就不满足超键的要求。
主键:
在关系型数据库中,多个属性组成的记录,可以依据一个属性集识别某一条记录或数据,这个属性及在数据表中式唯一的,例如(Sno)或(Sno,Sname)。注意:属性集由一个属性或多个属性组成,也就是主键可以为一个属性组成,也可以由多个属性组成。
外键:
如果关系模式R1中的某属性集不是R1的主键,而是另一个关系R2的主键则该属性集是关系模式R1的外键
例如:表teacher(教师编号,教师姓名,教师类型,教师身份证号)
其中,Tno在表student中不作为主键,但在teacher表中Tno可以作为一个主键存在,此时,Tno就为一个外键
主属性:
包含在任一候选键中的属性称为主属性
非主属性:
指不包含在任何一个候选键中的属性
三大范式
第一范式(1NF):
第一范式必须满足每个字段的值满足原子性,表中的每个字段不可在被拆分,例如:
表teacher中Tclass字段可以继续拆分职别与系别两个字段,这样就不满足第一范式
第二范式(2NF):
第二范式必须,满足所有非主键类属性必须依赖主键,例如表student2中
主键取Sno
但关于老师的内容(Tno,Tname,Tclass)与Sno不相关,所以将此表拆除为三张表
表1:student表(Sno,Sname,Ssex,Sid)
表2:teacher表(Tno,Tname,Tclass)
表3:s_t(关系表)表:(Sno,Tno,Sgrade)
拆分后的三张表满足2NF
第二范式解决的问题:
**数据冗余:**一个老师对应多个学生,创建学生用户数量巨大,但老师用户数量不及学生,这样重复的数据过多造成数据冗余
**插入异常:**如果加入一个新的老师用户,此时又没有学生用户属于此老师,老师用户数据无法插入
**删除异常:**若老师离职,学生用户的成绩信息也会被删除
**更新异常:**若改变教师信息,那么关于这个表的所有关于这个教师的信息也将被修改,否则将出现数据异常
第三范式(3NF):
在第二范式基础上,要求非属性类完全依赖主键,不能存在传递依赖
表student1满足第二范式要求,但(Tno,Tname,Tclass)三个属性,Tname,Tclass可以不依赖主键,直接依赖Tno属性,此时不满足第三范式要求
87364105481)]
表student1满足第二范式要求,但(Tno,Tname,Tclass)三个属性,Tname,Tclass可以不依赖主键,直接依赖Tno属性,此时不满足第三范式要求