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

MySQL

数据库的三范式?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值