【数据库】数据库中的三范式(简洁易懂,快速理解!!)

MySQL

数据库的三范式?

  • 第一范式:是数据库最基本的要求,列不可再分 (保证属性原子性)

  • 第二范式:行可以唯一区分,主键约束 (消除部分依赖)

  • 第三范式:表的非主属性不能依赖与其他表的非主属性 外键约束 且三大范式是一级一级依赖的,第二范式建立在第一范式上,第三范式建立第一第二范式上。(消除传递依赖)

下面对每个范式进行详细解释:

  1. 第一范式(1NF):确保每个列都是原子的,不可再分的

    每个列都应该只包含一个单独的值,且该值不可再分。换句话说,每个表格中的每个单元格必须包含一个单一的数据项,并且不能将多个值放在同一个字段中。

    比如,一个订单表中有订单号、客户姓名、客户地址和订单明细等字段,其中订单明细可能包含多个商品和对应的数量。如果把商品和数量都放在同一个字段中,就违反了第一范式。正确的做法是,将商品和数量分别拆分为单独的行。

  2. 第二范式(2NF):确保表中的非主键列完全依赖于主键

    在第二范式中,要求表格中的每个非主键列都完全依赖于主键,也就是说,任何一个非主键列都不能只依赖于主键的部分属性。

    例如,一个订单表中有订单号、商品编号、商品名称、商品单价和商品数量等列。在这个表格中,商品名称和商品单价依赖于商品编号,而不是订单号。因此,如果将它们保留在订单表中,就违反了第二范式。

    为了满足第二范式,正确的做法是将商品编号、商品名称和商品单价从订单表中移除,并放进一个新的商品表中,然后通过商品编号来连接订单和商品表。

  3. 第三范式(3NF):消除传递依赖

    在第三范式中,要求表格中的每个非主键列都不传递依赖于主键,也就是说,任何一个非主键列都只依赖于主键,而不依赖于其他非主键列。

    例如,一个学生信息表中包含了学生姓名、年龄、班级和班级所在的教室等列。在这个表格中,班级所在的教室实际上是依赖于班级的,而不是依赖于学生姓名或年龄。因此,如果将班级所在的教室保留在学生信息表中,就违反了第三范式。

猜你喜欢

转载自blog.csdn.net/miles067/article/details/132723068