通俗易懂解释数据库第一二三范式

白昼怎懂夜的黑 提交于 2020-01-02 18:09:48

通俗易懂解释数据库第一二三范式

1NF: 字段是最小的的单元,不可分割(在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库)。

2NF:满足1NF,表中的字段必须完全依赖于全部主键而非部分主键 (一般我们都会做到)。

3NF:满足2NF,非主键外的所有字段必须互不依赖。

第一范式1NF

数据库表中的字段都是单一属性的,不可再分

属性是什么?就是表中的字段。不可分割的意思就按字面理解就是最小单位,不能再分成更小单位了。这个字段只能是一个值,不能被拆分成多个字段,否则的话,它就是可分割的,就不符合一范式。不过能不能分割并没有绝对的答案,看需求,也就是看你的设计目标而定。举例:学生信息组成学生信息表,有姓名、年龄、性别、学号等信息组成。姓名不可拆分吧?所以可以作为该表的一个字段。但我要说这个表要在国外使用呢?人家姓和名要分开,都有特别的意义,所以姓名字段是可拆分的,分为姓字段和名字段。简单来说,一范式是关系数据库的基础,但字段是否真的不可拆分,根据你的设计目标而定。

第二范式2NF

第二范式就是要有主键,要求其他字段都依赖于主键(数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖,即符合第二范式)

为什么要有主键?没有主键就没有唯一性,没有唯一性在集合中就定位不到这行记录,所以要主键。其他字段为什么要依赖于主键?因为不依赖于主键,就找不到他们。更重要的是,其他字段组成的这行记录和主键表示的是同一个东西,而主键是唯一的,它们只需要依赖于主键,也就成了唯一的。如果有同学不理解依赖这个词,可以勉强用“相关”这个词代替,也就是说其他字段必须和它们的主键相关。因为不相关的东西不应该放在一行记录里。举例:学生信息组成学生表,姓名可以做主键么?不能!因为同名的话,就不唯一了,所以需要学号这样的唯一编码才行。那么其他字段依赖于主键是什么意思?就是“张三”同学的年龄和性别等字段,不能存储别人的年龄性别,必须是他自己的,因为张三的学号信息就决定了,这行记录归张三所有,不能给无关人员使用。

第三范式3NF

第三范式就是要消除传递依赖,即“消除冗余”(在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合3NF)

简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在的员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性。

注:所谓的范式,还需根据实际情况进行判定。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!