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

mysql 数据库设计三大范式

作者头像
很酷的站长
发布2022-12-16 21:35:10
2K0
发布2022-12-16 21:35:10
举报
mysql 数据库设计三大范式
mysql 数据库设计三大范式
1. 什么是设计范式

设计表的依据,按照范式设计出来的表,不会出现数据的冗余

数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构清晰的;反之则是乱七八糟,不仅会给开发人员制造麻烦,而且还可能存储了大量不需要的冗余数据

不仅仅只有三大范式,还有第四范式、第五范式、第六范式等,通常来讲,满足三大范式就基本足够

项目的数据库设计并不一定要完全满足于三大范式,有些时候我们会适量的冗余让 query 尽量减少 join

2. 三大范式

第一范式(1 NF):要求属性(列)具有原子性,即每列都是不可再分解的数据

虽然第一范式要求各列保存原子性,不能再分解,但是这种要求是和我们的需求相关联的,不拆分也行;如果要考虑可扩展性,那么就进行拆分吧。如下表所示,没有根据城市筛选用户的需求,可以这样存储城市数据

id

name

address

1

张三

河南省开封市兰考县

2

李四

广东省深圳市福田区

对 address 进行拆分,使其具有原子性(原子性:指不可再分解的意思)

id

name

province

city

area

1

张三

河南省

开封市

兰考县

2

李四

广东省

深圳市

福田区

第二范式(2 NF):建立在第一范式基础上,除主键外的每一列都必须完全依赖于主键

如果要出现不完全依赖主键,只可能发生在联合主键的情况下

第二范式是对记录的唯一性约束,要求有唯一性标识,即实体的唯一性,如下所示:即可 name 和 address 完全一致,但是主键值是不一样的,这样就实现了数据的唯一性

id

name

address

1

张三

河南省开封市兰考县

2

张三

河南省开封市兰考县

第三范式(3 NF):建立在第二范式基础上,对字段冗余性的约束,它要求字段没有冗余

假设员工的薪资水平由岗位决定,也就是 salary 由 job 决定,和人员(name)无关

员工表:

id

name

job

salary

1

张三

Web 前端开发工程师

5000

2

李四

PHP 后端开发工程师

8000

3

王五

PHP 后端开发工程师

8000

那么,我们将遵循第三范式将员工表拆分为两张表,如下所示

员工表:

id

name

job_id

1

张三

100

2

李四

101

3

王五

101

薪资表:

id

name

salary

100

Web 前端开发工程师

5000

101

后端开发工程师

8000

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

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