数据库三范式理解
在谈数据库范式之前,我们要明白一些关于数据库的基本概念,具体有一下几个:元组(Tuple):是关系数据库中的基本概念,关系是一张表,表中的每行即数据库中的一条记录,就是一个元组,每列就是一个属性。
超键(Super Key):能够唯一决定一个元组的属性集合。可以是一个属性也可以是多个属性,都叫做超键。
候选键(Candidate Key):不含有多余属性的超键,称为候选键。
主键(Primary Key):标识元组的一个候选键。
PS:1 无论是超键、候选键、主键,他们都是唯一确定一个元组
2 超键包含候选键、候选键包含主键
数据库范式出现的背景
数据冗余:指数据之间的重复,也可以说是同一数据存储在不同数据文件中的现象;
函数依赖:如果一个属性决定于另一个属性,那么可以说另一个属性依赖于这个属性,比如《机房收费系统》中学生表,学生号可以决定学生姓名,即知道了一个学生的学生号,就可以知道他的姓名。
函数依赖又可以分为平凡依赖和非平凡依赖。
按性质分可分为部分依赖和完全依赖。
完全依赖:设X,Y是关系R的两个属性集合,X’是X的真子集,存在X→Y,但对每一个X’都有X’!→Y,则称Y完全函数依赖于X。
部分依赖:设X,Y是关系R的两个属性集合,存在X→Y,若X’是X的真子集,存在X’→Y,则称Y部分函数依赖于X。
传递函数依赖:设X,Y,Z是关系R中互不相同的属性集合,存在X→Y(Y !→X),Y→Z,则称Z传递函数依赖于X。
数据库范式是为了消除数据冗余、减少数据操作异常出现的。
第一范式:原子性,字段不可再分;是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。
第二范式:在第一范式基础上,要求数据表的中的每个实例或行必须可以被唯一的区分。为实现区分通常需要为表加上一个列,一储存各个实例的唯一标示,即没有重复的记录。
第三范式:第而范式基础上,消除间接依赖(某些字段不完全依赖主键的,可以将其移除)
数据库的设计要尽量遵循范式设计,这样才能减少冗余数据,减少出错的异常
摘自 李龙生的专栏