数据库中的三大范式-个人总结

作用:减少数据库数据的冗余,和提高数据的一致性。

  1. 第一范式(1NF):

    • 每一列的数据都必须是单一值,不能包含,数组、集合或其他复杂的数据结构。

    • 每一列中的数据类型应该是相同的。

  2. 第二范式(2NF):表中的非主键列必须完全依赖表的主键。

    例子:

    假设有一个课程注册表,其中主键是 (学生ID, 课程ID),表中还有一列 "学生姓名":

    学生ID课程ID学生姓名课程名
    1101张三数学
    1102张三英语

    这里 "学生姓名" 仅依赖于 "学生ID"(主键的一部分),而不是整个主键 (学生ID, 课程ID),这违反了第二范式。为了符合第二范式,应将学生信息拆分到一个单独的表中:

    学生信息表:

    学生ID学生姓名
    1张三

    课程注册表:

    学生ID课程ID课程名
    1101语文
    1102数学
    1103英语
  3. 第三范式(3NF):表中的所有非主键列必须直接依赖于主键,而不能依赖于其他非主键列。这意味着表中不存在传递依赖。

    例子:

    假设在课程注册表中,添加了一列 "教师姓名",并且教师姓名依赖于 "课程ID":

    学生ID课程ID课程名教师姓名
    1101数学李老师
    1102英语王老师

    这里,"教师姓名" 依赖于 "课程ID",而 "课程ID" 又依赖于 "学生ID"(主键),这是一个传递依赖,违反了第三范式。为了解决这个问题,我们可以将教师信息单独拆分成一个表:

    课程信息表:

    课程ID课程名称教室姓名
    101数学李老师
    102英语王老师

    课程注册表(中间表):

    学生ID课程ID
    1101
    1102

总结:

第一范式(1NF):确保表中的每一列都是原子值,没有重复的列或嵌套数据结构。

第二范式(2NF):消除部分依赖,确保所有非主键列都完全依赖于整个主键。

第三范式(3NF):消除传递依赖,确保所有非主键列直接依赖于主键。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值