• 数据库三大范式


            讲真!【三大范式】我一直不太想了解,因为学的时候只记得很绕口,导致脑子根本跟不上,现在也就只是知道有这个东西,有没有用过不太知道【三大范式:感觉有被冒犯到】好了!不抹黑自己了。

            同志们【三大范式】还是很重要的,不要提到三大范式就只想到第一范式、第二范式、第三范式,不然我可是会提问:什么是第一范式、第二范式、第三范式?记不起来了?那就不要拒绝我,继续往下看吧!

    第一范式:数据表中的每一列(也就是每个字段)都不可以再拆分。

    这句话其实是个问句:什么叫不可再拆分?

    举个例子:

    idaddress
    1中国广东
    2中国广西

    上面有一个用户表,表中address【一般我们会存 中国广东 这样子】但是,按照第一范式我们还可以拆分成国家、省份,所以原本的一个字段要拆成两个字段

    idcountryprovince
    1中国广东
    2中国广西

    不要吐槽麻烦(我们还年轻,我们不怕麻烦)其实这样也有好处,比如说刚刚的用户地址,当你只是单纯的展示地址,那么一个字段就非常nice啦!但是,如果后期有国家省份筛选统计怎么办?所以遵循第一范式,规范的设计表结构很有必要!

    第二范式:在满足第一范式的基础上,非主键列完全依赖于主键,而不能只依赖于主键的一部分。

    第三范式:在满足第二范式的基础上,非主键只依赖于主键,而不依赖于其他非主键。

    说实话,这个是我可以看懂的吗?个人建议小盆友尽量不要记这些绕口的话术

    下面建个订单表来举个例子:

    idcommodity_namecommodity_priceaddresscreate_time
    1衣服9.9中国广东2022-08-23
    2衣服9.9中国广西2022-08-23

    这个表就不满足范式规则(大家不要学哈!)遵循三大范式,我们需要设计联合主键:

    商品表

    idcommodity_namecommodity_price
    1衣服9.9
    2裤子19.9

    用户表

    idaddress
    1中国广东
    2中国广西

    订单表

    idcommodity_iduser_idcreate_time
    1112022-08-23
    2122022-08-23

    大概就是这样:把每个字段拆分到极简,让每张表只描述一件事情,减少数据冗余,节省空间,避免增删改异常【上面的表就简单举个例子,有些粗糙的,大家不要学】当然,这样的设计表还是有点问题的,我们查询时就会增加复杂度,查询性能也会降低。所以实际上,一般互联网公司的设计都是反范式的,通过冗余一些数据,避免跨表跨库,利用空间换时间,提高性能【感觉讲了个寂寞~】

  • 相关阅读:
    netfilter&iptables探讨(1)——基本原理
    Java泛型
    《流畅的python》阅读笔记 - 第六章:使用一等函数实现设计模式
    基于C#的窗体阴影效果方案 - 开源研究系列文章
    Flink 运行时架构(三)
    Matlab:设置日期和时间显示格式
    一篇文章带你搞懂什么是幂等性问题?如何解决幂等性问题?
    C专家编程 第6章 运动的诗章:运行时数据结构 6.3 操作系统在a.out文件里干了些什么
    在HbuilderX中,@tap和@click的含义 与 区别 及 使用方式
    LeetCode——面试题 02.01. 移除重复节点
  • 原文地址:https://blog.csdn.net/ZBYTSL/article/details/126489251