范式1NF,2NF,3NF

本文详细介绍了数据库的范式理论,包括1NF、2NF、3NF和BCNF,通过实例阐述了如何判断和解决表格不符合各范式的情况。例如,学生成绩表在1NF中需要拆分避免部分函数依赖,达到2NF;进一步消除传递函数依赖以满足3NF。理解并正确应用这些范式有助于优化数据库设计,提高数据一致性。
摘要由CSDN通过智能技术生成

范式

关系数据库中的关系要满足一定要求的,满足不同程度的要求的为不同的范式。

各种范式之间的关系
5NF⊂4NF⊂BCNF⊂3NF⊂2NF⊂1NF

  • 1NF:
    作为一个二维表,关系要符合一个最基本的田间,每个分量必须是不可分的数据项,即具有原子性。

1NF强调的是列的原子性,即列的属性不可再拆分。比如下表包含「姓名」、「性别」、「电话」字段。但是在实际应用场景中,「电话」是可以被拆分为「家庭电话」以及「工作电话」的。所以我们说,「电话」这一列不符合原子性原则,也就是说这个表不符合1NF。
正确的做法应该是将「电话」拆分为「家庭电话」和「工作电话」。
(总结:就是一个表中的属性,不能拆分成多个就说这个表符合第一范式)。

  • 2NF
    在第一范式的基础上,没有非主属性对于码的部分函数依赖。即每个非主属性完全依赖于任何一个候选码

举例学生成绩表(学号,姓名,科目,成绩,所属院系,系主任)
此表中由于成绩是由科目和学号共同确定的,只有当学号确定,科目确定,才能知道成绩。
所以这个表的码就是(学号,科目)这两个组成的。然后就是说主属性是学号和科目,非主属性是姓名,成绩,所属院系,系主任。
因为姓名可以不需要科目只由学号单独就能确定出来,所以说非主属性(姓名)部分函数依赖于码(学号,科目)。所以此表不符合第二范式,要想他符合2NF必须将此表分成两个表:学生表(学号,姓名,所属院系,系主任),成绩表(学号,科目,成绩)。

  • 3NF
    不存在非主属性对码的部分函数依赖和传递函数依赖。

举例学生表(学号,姓名,所属院系,系主任)
在这个表中,主属性是学号,由学号可以确定其他的属性,
但是由以下情况 学号–>所属院系,所属院系–>系主任 学号–>系主任
学号可以确定所属院系,所属院系可以确定系主任,学号又可以确定系主任
具有传递关系,即存在非主属性(系主任)对码(学号)的传递函数依赖,所以不符合第三范式。
要想符合3NF就拆分表:学生表(学号,姓名,所属院系) ,院系表(院系,系主任)。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值