前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据库的三大范式

数据库的三大范式

作者头像
半月无霜
发布2023-03-03 15:00:57
7340
发布2023-03-03 15:00:57
举报
文章被收录于专栏:半月无霜

数据库的三大范式

一、介绍

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

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

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

二、概念

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入门到入土

三、最后

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

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-06-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数据库的三大范式
    • 一、介绍
      • 二、概念
        • 1)第一范式
        • 2)第二范式
        • 3)第三范式
      • 三、最后
      相关产品与服务
      数据库
      云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档