数据库范式

范式是为了消除重复数据减少冗余数据,从而让数据库内的数据更好的组织,让磁盘空间得到更有效利用的一种标准化标准,满足高等级的范式的先决条件是满足低等级范式。

第一范式(1NF)

第一范式(1NF):是指数据库表中的每一列都是不可再分的基本数据项。

如果可以再分或者出现重复属性,就可能需要定义一个新的实体,新实体与原实体构成一对多的关系。

在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。

第二范式(2NF)

第二范式(2NF):要求数据库表中的每个实例或行必须被唯一地区分。通常需要给表加上一列作为唯一标识符,这个属性列被称为主键主关键字

第二范式(2NF)要求实体的每一个非主属性完全依赖于主键

所谓完全依赖是指不能存在仅部分属性依赖主键,如果存在,那么这个属性和主键的这一部分应该分离出来形成一个新的实体,新实体和原实体之间是一对多的关系。为实现区分通常要为表加上一个列,以存储各个实例的唯一标识。

第三范式(3NF)

第三范式(3NF):要求一个数据库表中不包含已经在其他表中包含的非主键信息。

第三范式要求非主属性对任一候选关键字段不存在传递函数依赖(消除传递依赖)。

例如,一个部门信息表,其中每个部门都有编号(dept_id)、部门名称、部门简介等信息。那么在员工信息表中列出 dep_id 后就不能再将部门名称、部门简介与部门有关的信息再加入员工信息表中。

也就是表中属性{A,B,C}不能存在传递依赖:A->B->C,主键A可以确定某一非主属性B,而B又可以确定C。

BC范式(BCNF)

BC范式是在第三范式基础上的一种特殊情况,要求主属性不依赖于主属性,也就是任何属性(2NF和3NF所限制的是非主属性)都对候选键不能存在传递依赖和部分依赖。

函数依赖

设R(U)是属性集U上的关系模式。X,Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不相等,则称X函数确定Y或者Y函数依赖于X。记为X->Y。

完全函数依赖

在R(U)中,如果Y函数依赖于X,并且对于X的任何一个真子集X’,都有Y不函数依赖于X’, 则称Y对X完全函数依赖。否则称Y对X部分函数依赖。

传递函数依赖

在R(U)中,如果X->Y, Y->Z, 则称Z对X传递函数依赖。

候选键(候选码)

设K是一个R(U)中的属性或属性集合(注意可以是属性集合,也即多个属性的组合),若K完全函数确定U,则K为R的候选键(Candidate key);

通俗地说就是,能够确定全部属性的某个属性或某组属性,称为候选键。若候选键多于一个,则选定其中一个作为主键。

主属性

包含在任何一个候选键中的属性,叫做主属性(Prime attribute),不包含在任何候选键中的属性称为非主属性或非键属性或非关键字段。