数据库的三大范式(简单易懂)

当涉及数据库的三大范式时,我们谈论的是一种数据设计方法,目的是通过减少冗余和提高数据的一致性来优化数据库结构。我们使用一个例子来说明每个范式的概念。

第一范式(1NF):

第一范式要求每个表中的每个列都是原子的,即每个列中的数据不可再分。这有助于消除多值属性的重复和冗余。让我们看一个示例表,记录学生的课程成绩:

学生ID姓名课程
1张三数学, 英语, 物理
2李四历史, 数学

在这个表中,"课程" 列包含了多个课程,违反了第一范式。为了满足第一范式,我们将表拆分成两个表:

学生表(Students):

学生ID姓名
1张三
2李四

课程表(Courses):

学生ID课程
1数学
1英语
1物理
2历史
2数学

第二范式(2NF): 

第二范式要求每个非主键属性完全依赖于主键,即非主键属性不能只依赖于主键的一部分。考虑以下表,记录了订单详情:

订单详情表(OrderDetails):

订单号产品ID产品名称产品类别
1101商品A电子
1102商品B服装

在这个表中,"产品类别" 列依赖于 "产品ID",而不是整个主键 "订单号" 和 "产品ID"。为了满足第二范式,我们可以将表进行拆分:

订单表(Orders):

订单号
1

产品表(Products):

产品ID产品名称产品类别
101商品A电子
102商品B服装

订单详情表(OrderDetails):

订单号产品ID
1101
1102

第三范式(3NF):

第三范式要求消除非主键属性对主键之外的其他非主键属性的传递依赖。在上述示例中,"产品类别" 依赖于 "产品ID",而 "产品ID" 又依赖于 "订单号"。为了满足第三范式,我们可以将 "产品类别" 从 "订单详情表" 中移除,使其直接依赖于 "产品ID":

订单表(Orders):

订单号
1

产品表(Products):

产品ID产品名称产品类别
101商品A电子
102商品B服装

订单详情表(OrderDetails):

订单号产品ID
1101
1102

总结:

  • 第一范式:确保每列具有原子性,不可再分。
  • 第二范式:确保非主键属性完全依赖于主键。
  • 第三范式:消除非主键属性对非主键属性的传递依赖。

这些范式有助于设计规范的数据库结构,减少数据冗余、提高数据一致性。但在实际设计时,需根据业务需求权衡范式和反范式。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值