数据库系统之(函数依赖,码,范式,规范化)

函数依赖

1.函数依赖(functional dependencies)

定义:
设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等则称“X函数确定Y”或“Y函数依赖于X”,记作X→Y。 X称为这个函数依赖的决定属性组,也称为决定因素(Determinant)。
在这里插入图片描述

2.平凡函数依赖与非平凡函数依赖(trivial and non-trivial)

  • X→Y,Y⊈X,则称X→Y是非平凡的函数依赖。

  • X→Y,但Y⊆X ,则称X→Y是平凡的函数依赖。

     例:	在关系SC(Sno, Cno, Grade)中,
     	    非平凡函数依赖: (Sno, Cno) → Grade
     		平凡函数依赖: (Sno, Cno) → Sno
     		(Sno, Cno) → Cno
    

3.完全函数依赖与部分函数依赖

  • 在关系模式R(U)中,如果X→Y,并且对于X的任何一个真子集X’,都有X’↛ Y, 则称Y完全函数依赖于X,记作X →F Y。
  • 若X→Y,但Y不完全函数依赖于X,则称Y部分函数依赖于X,记作X →P Y 。
    在这里插入图片描述

4.传递函数依赖

在R(U)中,如果X→Y,(Y⊈X),Y↛X,Y→Z,则称Z对X传递函 数依赖(transitive functional dependency)。记为:X → Z。
注意: 如果Y→X, 即X←→Y,则Z直接依赖于X。
在这里插入图片描述

码(超码,候选码)

  • 设K为关系模式R<U,F>中的属性或属性组合。若K →F U,则K
    称为R的一个候选码(Candidate Key)。

  • 如果U部分函数依赖于K,即K → U,则K称为超码(Surpkey)

  • 候选码是最小的超码,即K的任意一个真子集都不是候选码

      [例] S(Sno, Sdept, Sage) 
       		Sno→(Sno, Sdept,Sage), Sno是候选码
       		(Sno, Sdept)、 (Sno, Sage)、 (Sno, Sdept, Sage) 是超码
       		SC(Sno, Cno, Grade)中,(Sno, Cno)是候选码
    

范式

第三范式(3NF)

关系模式R<U,F>∈1NF,若R中不存在这样的码X、属性组Y及非主属性Z(Y⊇ Z),使得X→Y,Y→Z,Y↛X,成立,则称R<U,F> ∈ 3NF。

例:	S-D(Sno, Sdept) ∈ 3NF
		D-L(Sdept, Sloc)∈ 3NF

在这里插入图片描述

3NF的一些性质:

  • 若R∈3NF,则R的每一个非主属性既不部分函数依赖于候选码也不传递函数依赖于候选码。
  • 如果R∈3NF,则 R∈2NF。
  • 采用投影分解法将一个2NF的关系分解为多个3NF的关系,可以在一定程度上解决原2NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题。
  • 将一个2NF关系分解为多个3NF的关系后,并不能完全消除关系模式中的各种异常情况和数据冗余。

BCNF

设关系模式R<U,F>∈1NF,如果对于R的每个函数依赖X→Y, 且X ⊇ Y 时,X必含有码,那么R∈BCNF。即,在关系模式R<U,F>中,如果每一个决定因素都包含码,则R∈BCNF。

	例:STJ(S,T,J)∈ 3NF T→J ,(S,J)→T, (S,T)→J
	 SJ(S,J)∈ BCNF SJ的码为(S,J), all-key
	 TJ(T,J)∈ BCNF TJ的码为T, T→J

BCNF一些性质:

  • 所有非主属性对每一个码都是完全函数依赖。
  • 所有主属性对每一个不包含它的码也是完全函数依赖。
  • 没有任何属性完全函数依赖于非码的任何一组属性。

关系模式规范化

基本步骤

在这里插入图片描述

基本思想

  • 逐步消除数据依赖中不合适的部分,使模式中的各关系模式达到某种程度的“分离”
  • 采用“一事一地”的模式设计原则
    • 让一个关系描述一个概念、一个实体或者实体间的一种联系。
    • 若多于一个概念就把它“分离”出去。
  • 规范化实质上是概念的单一化

以上内容全部取自mooc的中国人民大学的《数据库系统概论》


版权声明:本文为sinat_20019511原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。