• 数据库的三大范式


    数据库的三大范式

    一、介绍

    没有规矩,不成方圆。这句话在数据库的规范中同样适用,所以就有了这几项规定,数据库的三大范式

    我相信很多人都听过三大范式,面试题中也经常会问到,什么是数据库三大范式,这太常见了。

    以前我只是机械式的回复面试官,但以后不会,不仅要学会说概念说规范,还能从实际出发,要不要严格遵守三大范式。

    二、概念

    1)第一范式

    概念每一个列都是不可再分的列

    例如下面这张表,由于region字段可以再细分为省份province和城市city,所以此表将不满足第一范式

    name sex region
    半月无霜 广东省广州市

    region字段拆分后,满足了第一范式

    name sex province city
    半月无霜 广东省 广州市

    2)第二范式

    概念:在满足第一范式后,消除非主属性对主属性的部分函数依赖

    先看看这张订单表,订单编号商品ID用户ID作为联合主键

    每一个字段本身都不可再分,满足第一范式。

    但其中有个字段用户名称,它依赖于用户ID,所以此表并不满足第二范式

    订单编号 商品ID 用户ID 数量 金额 用户名称
    1001 1 1 1 9.9 半月无霜
    1002 1 2 1 9.9 阿超

    在修改后,将变成两张表,分别为订单表和用户表

    订单编号 商品ID 用户ID 数量 金额
    1001 1 1 1 9.9
    1002 1 2 1 9.9
    用户ID 用户名称
    1 半月无霜
    2 阿超

    什么是部分函数依赖?

    对于数据库主键而言,其他的字段需要完全依赖于主键,而不能依赖主键中的部分。

    上面这张表而言,正式因为有用户名称依赖于主键中的其中一个用户ID,所以不满足第二范式

    3)第三范式

    概念:在第二范式的基础上,进一步消除非主属性对主属性的传递函数依赖

    先来看这样一张订单表,订单ID是主键字段

    订单ID 订单编号 商品ID 商品名称 用户ID 数量 金额
    1 1001 1 java入门到入土 1 1 9.9

    由于,商品ID依赖于订单ID,而商品名称又依赖于订单ID,所以造成了间接依赖,也就是传递函数依赖。

    修改成以下两张表,消除他们的依赖关系,将满足第三范式

    订单ID 订单编号 商品ID 用户ID 数量 金额
    1 1001 1 1 1 9.9
    商品ID 商品名称
    1 java入门到入土

    三、最后

    在项目开发中,一定要严格遵循三范式的原则设计库表结构吗?

    这个肯定不是,如果完全按照三范式进行设计,那么数据查询就一定需要大量的表关联,这样就会造成查询性能上的问题。

    所以,冗余一部分常用的查询字段,避免表关联,这对我们的项目最有帮助。

    我是半月,祝你幸福!!!

  • 相关阅读:
    学习笔记TF034:实现Word2Vec
    学习笔记TF033:实现ResNet
    学习笔记TF032:实现Google Inception Net
    学习笔记TF031:实现VGGNet
    学习笔记TF030:实现AlexNet
    学习笔记TF029:实现进阶卷积网络
    学习笔记TF028:实现简单卷积网络
    学习笔记TF027:卷积神经网络
    学习笔记TF026:多层感知机
    学习笔记TF025:自编码器
  • 原文地址:https://www.cnblogs.com/banmoon/p/16407556.html
Copyright © 2020-2023  润新知