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

数据库设计三范式

作者头像
伊泽瑞尔
发布2022-06-01 08:20:38
3110
发布2022-06-01 08:20:38
举报
文章被收录于专栏:大数据与知识图谱

计算机擅长接受指令,不擅了解你的思想。——高德纳(Donald Knuth)。现代计算机鼻祖,《计算机程序设计艺术》作者

在设计关系数据库时,需要遵从不同的规范,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式。

各范式呈递次规范,越高的范式数据库冗余越小。

关系数据库六范式

第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。

在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。

一般来说,数据库只需满足第三范式(3NF)就行了。

第一范式

原子性。即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。

第一范式(1NF)是对关系模式的设计基本要求。

例子:

代码语言:javascript
复制
表1字段为:

用户,姓名,手机,地址

表2字段为:

用户,姓名,手机,省,市,详细地址

表1要查询某个省某个市并按其分类,显然无法满足,也不符合第一范式。

第二范式

第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。

第二范式(2NF)要求数据库表中的每个实例或记录必须可以被唯一地区分。选取一个能区分每个实体的属性或属性组,作为实体的唯一标识。即表必须有主键

第二范式(2NF)要求实体的属性完全依赖于主关键字,所谓完全依赖是指不能存在仅依赖主关键字一部分的属性。

例子:

代码语言:javascript
复制
表1字段为:

订单id,商品id,商品价格,折扣,数量,商品名

我们知道一个订单中可以有多个商品,所以单一的订单id是不足以成为主键的,主键应该是(订单id + 商品id),可以看到折扣和数量完全依赖(取决)于主键,而价格,商品名只依赖于商品id。所以表1不符合2NF,就会造成数据冗余,应该将其拆分成2个表,如下表2和表3。

表2字段为:

订单id,商品id,折扣,数量

表3字段为:

商品id,商品价格,商品名

第三范式

第三范式(3NF)是第二范式(2NF)的一个子集,即满足第三范式(3NF)必须满足第二范式(2NF)。

任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)。

例子:

代码语言:javascript
复制
表1字段为:

订单id,订单日期,用户id,用户姓名,用户城市

主键是订单id

其中非主键列订单日期、用户id、用户姓名、用户城市完全依赖于主键(订单id),不存在部分依赖的问题,所以符合2NF,但用户姓名、用户城市直接依赖的是用户id(非主键列),而不是直接依赖于主键,它是通过传递才依赖于主键,所以不符合 3NF。需要将其拆分,如下表2和表3。

表2字段为:

订单id,订单日期,用户id

表3字段为:

用户id,用户姓名,用户城市

总结

1NF好辨认,但2NF和3NF很容易混淆,关键区别如下。

2NF:非主键列是否完全依赖于主键,还是依赖于主键的一部分。

3NF:非主键列是直接依赖于主键,还是直接依赖于非主键列。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据与知识图谱 微信公众号,前往查看

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

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

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