当前位置: 首页 > news >正文

Cleared-MySQL (上)

一、数据库设计范式

数据库设计范式是用于组织数据库结构的规则,有助于减少数据冗余和提高数据的一致性。以下介绍常见的几种范式:

1. 第一范式(1NF)
  • 定义: 所有字段都是不可再分的原子值

  • 特点: 确保每个字段的最小单位不可再拆分。例如,存储地址时,不应将“省、市、区”组合在一个字段,而是分成三个单独字段

  • 示例图:

    id姓名地址
    1张三北京市朝阳区

    不符合 1NF,因为“地址”字段包含多个层次信息。调整后:

    id姓名省份城市区县
    1张三北京北京市朝阳区
2. 第二范式(2NF)
  • 定义: 在满足 1NF 的基础上,非主键字段完全依赖于主键

  • 特点: 避免部分依赖问题,防止数据冗余。例如,在学生表中,“班级名称”字段不应仅依赖于“班级号”,而是依赖整个复合主键

  • 示例图:

    学号班级号班级名称
    1101一年级一班

    此表不符合 2NF。应将“班级名称”拆分到单独的“班级”表中,用“班级号”关联,避免重复存储:

    • 学生表

      学号班级号
      1101
    • 班级表

      班级号班级名称
      101一年级一班
3. 第三范式(3NF)
  • 定义: 在满足 2NF 的基础上,非主键字段之间不存在传递依赖。
  • 特点: 防止传递依赖问题,使表结构更为简洁。例如,将“部门名称”单独拆分成部门表,通过部门编号关联到员工表
4. 反范式

反范式的主要思想是通过故意引入冗余数据来优化查询速度,以牺牲存储空间换取查询效率。在性能要求较高的数据库应用中(如大数据分析系统或实时查询系统),反范式的设计常被使用

反范式设计的适用场景

反范式通常适用于以下场景:

  1. 高频查询场景: 如果系统中某个查询特别频繁且涉及多表关联,使用反范式可以将所需数据冗余存储在一个表中,从而减少关联查询的开销。

  2. 数据仓库/OLAP系统: 在数据仓库等分析型数据库中,查询速度比数据冗余度更重要。反范式设计可以减少复杂查询的响应时间。

  3. 读取多于写入场景: 如果应用场景中读操作远多于写操作,可以使用反范式以优化读取效率。虽然数据冗余会增加更新时的一致性维护成本,但总体而言效率会提高。

反范式设计的常用策略

反范式设计可以通过以下几种常用策略实现:

1. 引入冗余字段

为了减少复杂的多表关联查询,可以将其他表的重要字段直接复制到当前表。例如,在一个包含“订单”表和“客户”表的系统中,客户信息可能经常需要随订单信息一起查询。在这种情况下,可以在“订单”表中冗余存储客户姓名和联系方式字段,减少多表查询的次数。

示例图:

  • 原始表设计:

    • 客户表

      客户ID客户姓名联系方式
      101张三12345678
    • 订单表

      订单ID客户ID金额
      201101500
  • 反范式设计后:

    订单ID客户ID客户姓名联系方式金额
    201101张三12345678500

这样,查询订单和客户信息可以一次完成,减少了表关联操作

2. 引入汇总字段

在高频统计查询中,反范式设计可以增加一个汇总字段来提前存储数据的聚合结果,从而减少实时计算的开销。例如,在订单表中增加一个“总销售额”字段,用于记录实时的销售总额

  • 原始表设计:

    订单ID商品ID数量单价
    2013013100
    2023022150
  • 反范式设计后添加汇总字段:

    订单ID商品ID数量单价总价
    2013013100300
    2023022150300

这样可以避免每次查询时进行总价计算。

3. 分区与分表

在数据量特别大的情况下,通过水平分区或分表将数据分布到多个表中,从而降低单个表的查询压力,增加查询效率。特别是在大数据分析场景中,通过分表可以有效提升查询性能

反范式设计的利弊

优点:

  • 提高查询速度: 避免多表关联,减少 SQL 查询中的 JOIN 操作
  • 适合高频查询和统计分析: 适合大量数据查询需求的场景,如报表系统

缺点:

  • 增加存储空间: 冗余数据会增加数据库的存储成本
  • 维护一致性复杂度增加: 冗余字段在数据更新时需要同步更新,容易引发数据一致性问题

二、查找算法及树型结构

数据库索引中常用的数据结构包括二叉树、红黑树和 B+ 树,这些结构为数据查找带来了高效性和稳定性

1. 二叉树(Binary Tree)
  • 定义: 每个节点最多有两个子节点,分别是左节点和右节点

  • 特点: 左子节点的值小于根节点,右子节点的值大于根节点

  • 示意图:

           8/ \3   10/ \    \1   6    14
    
2. 红黑树(Red-Black Tree)
  • 定义: 一种自平衡的二叉查找树,每个节点有红色或黑色标记,通过旋转和颜色变换保证树的平衡
  • 特点: 红黑树的插入和删除效率较高,复杂度为 O(log n),但在数据库中,存储量较大时,红黑树不适合磁盘存储
3. B+ 树(B+ Tree)
  • 定义: B+ 树是一种平衡多路查找树,其所有数据存储在叶节点,非叶节点只存储索引

  • 特点: 适合磁盘存储的大规模数据查找。叶节点间通过指针相连,便于范围查询

  • 示意图:

            [13]/    \[3,7]   [16,18]/ | \     / | \1  5  9   14 17 19
    

http://www.mrgr.cn/news/69974.html

相关文章:

  • java八股笔记-1-java基础
  • CDA LEVEL 2考试大纲
  • 安科瑞工业绝缘监测装置:保障煤矿井下6kV供电系统安全运行的关键应用——安科瑞 丁佳雯
  • 时序预测 | 改进图卷积+informer时间序列预测,pytorch架构
  • 动手学深度学习69 BERT预训练
  • WebGIS四大地图框架:Leaflet、OpenLayers、Mapbox、Cesium
  • 开源竞争-利用kimi编程助手搭建小程序(11)
  • 工业4.0时代下的人工智能新发展
  • terminal 终端
  • 动态规划-背包问题——[模版]01背包(背包母题)
  • CS61b part6
  • 云上盛宴-腾讯云双11活动玩法攻略
  • 【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,2-19
  • 【HuggingFace】基于检索策略的隐私政策标注应用
  • 【系统架构设计师】2024年下半年真题论文: 论多源异构数据集成方法(包括参考素材)
  • 安装软件时如何配置环境变量?怎么用上最新版本的python?
  • 【iOS】知乎日报前三周总结
  • JS拷贝指南:浅拷贝与深拷贝详解
  • 什么是红黑树
  • contos7.9 部署3节点 hadoop3.4 集群 非高可用
  • LC:二分查找——杂记
  • Java程序员找不到工作?BOSS已读不回?失业背后的真相:你可能只因为不会写简历!
  • PGMP-串串0203 项目集管理绩效域战略一致性
  • 【系统架构设计师】2024年下半年真题论文: 论分布式事务及其解决方案(包括参考素材)
  • 《面向未来的云计算技术与安全控制:从基础架构到高级防护》
  • 【渗透测试】payload记录