关系型数据库数据库基本概念

举报
xcc-2022 发表于 2022/07/22 18:05:43 2022/07/22
【摘要】 3.1 MySQL三大范式MySQL的三大范式能够规范开发人员对数据表的设计,使得开发人员能够设计出简洁、优雅的数据表结构。3.1.1 第一范式第一范式主要是确保数据表中每个字段的值必须具有原子性,也就是说数据表中每个字段的值为不可再次拆分的最小数据单元。例如,表3-1所示的t_user数据表的设计就不符合第一范式。表3-1 不符合第一范式的t_user数据表的设计其中,user_info字...

3.1 MySQL三大范式

MySQL的三大范式能够规范开发人员对数据表的设计,使得开发人员能够设计出简洁、优雅的数据表结构。


3.1.1 第一范式

第一范式主要是确保数据表中每个字段的值必须具有原子性,也就是说数据表中每个字段的值为不可再次拆分的最小数据单元。

例如,表3-1所示的t_user数据表的设计就不符合第一范式。

表3-1 不符合第一范式的t_user数据表的设计

其中,user_info字段为用户信息,可以进一步拆分成更小粒度的字段,不符合数据库设计对第一范式的要求。将user_info拆分后的数据表设计为如表3-2所示。

表3-2 符合第一范式的t_user数据表的设计

表3-2所示的数据表设计符合MySQL的第一范式。


3.1.2 第二范式

第二范式是指在第一范式的基础上,确保数据表中除了主键之外的每个字段都必须依赖主键。例如,表3-3所示的数据表设计就不符合第二范式。

表3-3 不符合第二范式的数据表的设计

由于商品的名称和价格字段不依赖于商品类别的主键id,所以不符合第二范式。可以将其修改成表3-4和表3-5所示的表设计。

表3-4 符合第二范式的t_goods_category数据表的设计

表3-5 符合第二范式的t_goods数据表的设计

商品信息表t_goods通过商品类别id字段category_id与商品类别数据表t_goods_category进行关联。


3.1.3 第三范式

第三范式是在第二范式的基础上,确保数据表中的每一列都和主键字段直接相关,也就是说,要求数据表中的所有非主键字段不能依赖于其他非主键字段。

在第三范式下,需要将表3-5所示的t_goods数据表进一步拆分成表3-6和表3-7所示的商品信息表,以及商品信息表与商品类别数据表的关联表。

表3-6 符合第三范式的t_goods商品信息表

表3-7 符合第三范式的t_goods_join_category关联表


3.1.4 反范式化

如果数据库中的数据量比较大,系统的UV和PV访问频次比较高,则完全按照MySQL的三大范式设计数据表,读数据时会产生大量的关联查询,在一定程度上会影响数据库的读性能。此时,可以通过在数据表中增加冗余字段来提高数据库的读性能。

例如,可以将商品信息表设计成表3-8所示。

表3-8 反范式化的t_goods商品信息表设计

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。