一、基本概念
属性: 教科书上解释为:“实体所具有的某一特性”,由此可见,属性一开始是个逻辑概念,比如说,“性别”是“人”的一个属性。在关系数据库中,属性又是个物理概念,属性可以看作是“表的一列”。
元组 :表中的一行就是一个元组。
分量: 元组的某个属性值。在一个关系数据库中,它是一个操作原子,即关系数据库在做任何操作的时候,属性是“不可分的”。否则就不是关系数据库了。
码: 表中可以唯一确定一个元组的某个属性(或者 属性组 ),如果这样的码有不止一个,那么大家都叫 候选码, 我们从候选码中挑一个出来做 主键 ,它就叫 主码。
外码: 一个属性(或属性组),它不是码,但是它别的表的码,它就是外码。
主属性: 一个属性只要在任何一个候选码中出现过,这个属性就是主属性。
非主属性: 与上面相反,没有在任何候选码中出现过,这个属性就是非主属性。
主码(从候选码中选出的一个码)
主属性 ∈ 码
候选码(能够唯一确定一个元组的元素)
码实际为一个具有唯一功能的元素或元素组,但是应该将其看做一个具有这样功能的 set
有码即是有能够唯一确定一个元组的主键,也就有了主属性,非主属性。
二、数据库范式
数据库的 2NF
符合 1NF ,并且, 非主属性完全依赖于码 , 但是可以传递依赖。 (也就是有码,主属性概念的要求)
第 三范式( 3NF ): 符合 2NF ,并且, 消除传递依赖
BC 范式( BCNF ): 符合 3NF ,并且, 消除主属性的传递依赖。
若一个关系达到了第三范式,并且它只有一个候选码,或者它的每个候选码都是单属性,则该关系自然达到 BC 范式。
第四范式: 要求把同一表内的多对多关系删除。
第五范式: 从最终结构重新建立原始结构。
但在绝大多数应用中不需要设计到这种程度。并且,某些情况下,过于范式化甚至会对数据库的逻辑可读性和使用效率起到阻碍。数据库中一定程度的冗余并不一定是坏事情。
注意:一定要在理解了基本的名词概念后采取理解理论的定义,要不会浪费很多不必要的时间和误解。