函数依赖                          

函数依赖:设X,Y是关系R两个属性集合,当任何时刻R中的任意两个元组中的X属性相同时,则它们的Y属性值也相同,则称X函数决定Y,或Y函数依赖于X。
平凡函数依赖:当关系中属性集合Y是属性集合X的子集时,存在函数依赖X→Y,即一组属性函数决定它的所有子集,这种函数依赖称为平凡函数依赖。
非平凡函数依赖:当关系中属性集合Y不是属性集合X的子集时,存在函数依赖X→Y,则称这种函数依赖为非平凡函数依赖。
完全函数依赖:设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。
 

数据库范式

涉及关系型数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,
各种范式呈递次规范,越高的范式数据库冗余越小。            
第一范式(1NF):所谓第一范式(1NF)是指在关系模型中,对域添加的一个规范要求,所有的域都应该是原子性的,
                              即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。
                              即实体中的某个属性有多个值时,必须拆分为不同的属性。在符合第一范式(1NF)表中的每个域值只能是实体的一个属性或一个属性的一部分。
                              简而言之,第一范式就是无重复的域。
第二范式(2NF):在1NF的基础上,非主属性必须完全函数依赖于候选码(在1NF的基础上消除非主属性对主码的部分函数依赖);
                              第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,
                              如果存在,那么这个属性和主关键字的这一部分应当分离出来形成一个新的实体,新实体与原实体是一对多的关系。
                              为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。
                              简而言之,第二范式就是在第一范式的基础上非主属性完全依赖于主键。
第三范式(3NF):在2NF的基础上,非主属性不得传递依赖于主属性,或者说,任何非主属性不依赖于其他非主属性。 
                                                  

超码、候选码、主码、外码

超码:一个或者多个属性的集合,这些属性可以在一个实体集中唯一地标识一个实体;若K是一个超码,则K的任意超集也构成一个超码。
候选码:若K是超码,且其任意真子集都不构成超码,则称K是候选码。                            
主码:由数据库设计者选中的,用于在同一实体集中区分不同实体的候选码,称之为主码。
外码:若K不是关系模式R的码,但却是另一个关系模式S的码,则称X是R的外码。