• 数据库的三大范式


    为什么需要数据规范化?

    • 信息重复
    • 更新异常
    • 插入异常
      • 无法正常显示信息
    • 删除异常
      • 丢失有效的信息

    范数据库设计(规范性和性能的问题)

    关联查询的表不得超过三张表

    • 考虑商业化的需求和目标(成本,用户体验)数据库的性能更加重要
    • 在规范性能的问题的时候,需要适当的考虑一下规范性
    • 故意给某些表增加一些冗余的字段。(从多表查询中变为单表查询)
    • 故意增加一些计算列(从大数据库降低为小数据量的查询:索引)

    三大范式

            概念解释:三大范式其实就是数据库建表的规范

    第一范式(1NF) 

    • 原子性:保证每一列不可再分
    • 要求一张表中的数据每一列都是不可分割的原子项数据

    例子

            下面的这张表就是不符合第一范式的,因为家庭信息和学校信息中的数据都不是原子项数据(家庭信息和学校信息不是唯一的)

            修改之后:此时所有的数据就是原子项数据

     

    第二范式(2NF)

    • 前提:满足第一范式
    • 第二范式需要确保数据表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。每张表只描述一件事情
    • 消除部分依赖,要求一张表中的每一列都完全依赖于主键(针对于组合主键),也就是不会出现某一列只和部分主键相关

    例子:

            这是订单表,由于同一订单中会出现不同的产品,所以将订单号与产品号作为组合主键,但是我们可以看到其中的产品数量,产品折扣和产品价格与主键中的订单号,产品号都有关而订单时间与订单金额只与订单号有关,这就导致了部分依赖。(产品和订单分开)

             修改之后:为了消除部分依赖,所以应该分表!

    第三范式(3NF)

    • 前提:满足第一范式和第二范式
    • 第三范式需要确保数据表中的每一列数据表和主键直接相关,而不能间接相关
    • 消除传递依赖,要求一张表中的每一列都和主键是直接依赖的,不是间接依赖

    例子:

            下表中的所有属性的确都完全依赖于学号,但是实际上班主任性别与班主任年龄确是直接依赖于班主任姓名的,而不是直接依赖于学号,这样就导致了传递依赖(班主任和学号分开)

     修改之后:此时就不会产生传递依赖的问题了!

     

  • 相关阅读:
    华南X99平台打鸡血教程
    【LeetCode】701.二叉搜索树中的插入操作
    子不语发生工商变更:注册资本增至3000万元,预计全年净利润下滑
    数字孪生管理系统,智慧校园建设规划方案
    掌握Midjourney视觉艺术的关键提示词指南
    Redis学习(02)列表、集合、Hash、Zset
    10分钟了解数据架构、数据模型
    C#实现钉钉自定义机器人发送群消息帮助类
    C#图解教程(第四章)
    记录两个Excel导出出现的问题
  • 原文地址:https://blog.csdn.net/qq_46423017/article/details/126219485