数据库建表范式(第一范式,第二范式,第三范式)

数据库建立为了要操作方便,还要避免数据冗余(很多多余的数据会让数据库变得异常庞大)。看了网上很多介绍三种范式的,我觉得我有点笨吧,好久才搞明白怎么回事,希望以后有人能很容易的看懂

参考链接:
https://blog.csdn.net/u014458048/article/details/56678698
https://blog.csdn.net/u013164931/article/details/79692402

基础知识请点击参考链接

第一范式(1NF):属性不可再分割,符合原子性,第一范式就是无重复的列…
个人理解:每一列都只有一个属性,不能继续分割。
下面不属于第一范式:原因 进货和销售这两列还能继续分割 ,在这里插入图片描述

第二范式(2NF):要求数据库表中的每个实例或行必须可以被唯一地区分;即所有非关键字段都完全依赖于整组候选关键字;消除部分依赖 …
个人理解:非主属性,全部依赖“主键”,而不是只依赖主键(主码)的一部分。
下面这张表中学号和准考证号都是主键(主码),想找到张三的成绩,用学号或者准考证号两者的任一个都能找到,符合第二范式的话是必须依赖学号和准考证号两个缺一不可。
在这里插入图片描述

第三范式 (3NF):消除依赖传递 ,不存在非主属性对码的传递性依赖以及部分性依赖 ,属性不能传递依赖于主属性…
个人理解:消除依赖传递 (非主属性是直接依赖于主键,还是直接以来非主键列)
下面这张表中的系主任这一列,是通过学号直接找到的还是通过系名找到的?
先找到学号,然后找到系名,最后找到系主任,这就是传递依赖
在这里插入图片描述


第一范式: 列不能重复 (列不能分割,一个列中不能有多个属性)
第二范式: 消除部分依赖 (非主属性依赖主键全部,不是依赖主键的一部分)
第三范式: 消除依赖传递 (非主属性是直接依赖于主键,还是依赖非主键列)

参考链接:https://blog.csdn.net/gui951753/article/details/79609874
https://blog.csdn.net/u014458048/article/details/56678698
https://blog.csdn.net/u013164931/article/details/79692402

猜你喜欢

转载自blog.csdn.net/xy3233/article/details/86314329