用 DBMS 中的例子解释 3NF

当一个关系在 2NF 中并且没有传递依赖关系时,一个关系在 3NF 中,或者一个关系在 3NF 中,当它在 2NF 中并且所有非键属性直接依赖于候选键时。

示例

考虑一个关系学生(rollno,game,feestructure)

罗尔诺游戏费用结构
1篮球500
2篮球500
3篮球500
4蟋蟀600
5蟋蟀600
6蟋蟀600
7网球400

F − {rollno -> game, rollno -> feestructure, game -> fee}

Rollno+= {rollno, game, feestructure}

=> rollno is primary key

上面的student表是1NF,因为没有多值属性。

学生表也在 2NF 中,因为所有非键属性都完全依赖于主键 (rollno)。但是该表不在 3NF 中,因为存在传递依赖,即游戏-> 费用结构。

费用结构通过游戏对 rollno 具有传递/间接依赖性。

异常

上面的学生表也存在所有三个异常 -

  • 插入异常- 除非我们让学生玩该游戏,否则无法将新游戏插入到表中。

  • 删除异常- 如果从表中删除 rollno 7,我们也会丢失有关网球的完整信息。

  • 更新异常-为了改变篮球的费用结构,我们需要在不止一个地方做出改变。

因此,现在要将上述学生表首先转换为 3NF,我们需要将表分解如下 -

分解为 3NF

为了克服这些异常,应将学生表分成更小的表。

如果 X->Y 是传递依赖,则将 R 分为 R1(X + ) 和 R2(RY + )。

游戏->费用结构是一个传递依赖[因为游戏既不是键也不是费用是键属性]

R1=游戏+=(游戏,费用结构)

R2=(student-feestructure + ) = (rollno,game)

所以把student表分成R1(game,feestructure)和R2(rollno,game)。

R1

罗尔诺游戏
1篮球
2篮球
3篮球
4蟋蟀
5蟋蟀
6蟋蟀
7网球

R2

游戏费用结构
Basketball500
Cricket600
Tennis400

以上两个表都没有所有三个异常。

以上是 用 DBMS 中的例子解释 3NF 的全部内容, 来源链接: utcz.com/z/338758.html

回到顶部