MySQL 笔记(三):三大范式
2021/5/3 2:25:16
本文主要是介绍MySQL 笔记(三):三大范式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、什么是范式
为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。
二、第一范式
2-1、要求
确保每列的原子性,每个列都不可以再拆分
2-2、错误设计
+----+----------+--------+------------------+----------+------+---------------------------------------+ | id | username | gender | email | nickname | age | region | +----+----------+--------+------------------+----------+------+---------------------------------------+ | 1 | admin | 男 | admin@qq.com | 管理员 | 25 | 广东省、深圳市、龙岗区、龙岗大道127号 | | 2 | zhangsan | 男 | zhangsan@126.com | 张三 | 24 | 广东省、广州区、天河区、珠江大道29号 | +----+----------+--------+------------------+----------+------+---------------------------------------+
分析:上述表很明显就不符合数据库第一范式的表设计,为何不符合?region列不具有原子性。因为还可以拆分成省份、城市、区域、详细地址字段。
2-3、正确设计
+----+----------+--------+----------+------+----------+--------+--------+---------------+ | id | username | gender | nickname | age | province | city | region | adress | +----+----------+--------+----------+------+----------+--------+--------+---------------+ | 1 | admin | 男 | 管理员 | 25 | 广东省 | 深圳市 | 龙岗区 | 龙岗大道127号 | | 2 | zhangsan | 男 | 张三 | 24 | 广东省 | 广州市 | 天河区 | 珠江大道29号 | +----+----------+--------+----------+------+----------+--------+--------+---------------+
三、第二范式
3-1、要求
在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分
3-2、错误设计
+-----------+----------+------------+------+--------+----------+-------------+ | orders_id | goods_id | goods_name | nuit | prices | username | phone | +-----------+----------+------------+------+--------+----------+-------------+ | 0001 | 1 | iphone13 | 台 | 9800 | 大当家 | 0755-864510 | | 0001 | 2 | 智能扫把 | 把 | 150 | 大当家 | 0755-864510 | | 0002 | 3 | 玩具车 | 辆 | 450 | 王二狗 | 0755-816540 | +-----------+----------+------------+------+--------+----------+-------------+
分析:上述表很明显不符合第二范式,order_id 和 good_id 作为联合主键。但 good_name、number、unit、price 只和 good_id 有关,很明显和 order_id 主键无关,除此之外,上述表里做了两件事(订单信息、商品信息),第二范式的目的在于保证一张表只做一件事情,很明显违反第二范式。
3-3、正确设计
+-----------+----------+-------------+ | orders_id | username | phone | +-----------+----------+-------------+ | 0001 | 大当家 | 0755-864510 | | 0002 | 王二狗 | 0755-816540 | +-----------+----------+-------------+ +----------+------------+------+--------+ | goods_id | goods_name | nuit | prices | +----------+------------+------+--------+ | 1 | iphone13 | 台 | 9800 | | 2 | 智能扫把 | 把 | 150 | | 3 | 玩具车 | 辆 | 450 | +----------+------------+------+--------+ +----------+----------+ | order_id | goods_id | +----------+----------+ | 1 | 1 | | 1 | 2 | | 2 | 3 | +----------+----------+
四、第三范式
4-1、要求
在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键
4-2、错误设计
+----------+--------------+----------+------+--------+ | goods_id | goods_name | category | nuit | prices | +----------+--------------+----------+------+--------+ | 1 | iphone13 | 3C数码 | 台 | 9800 | | 2 | 智能扫把 | 智能家居 | 把 | 150 | | 3 | iphone12 pro | 3C数码 | 台 | 5800 | +----------+--------------+----------+------+--------+
4-3、正确设计
+----------+--------------+------+--------+ | goods_id | goods_name | nuit | prices | +----------+--------------+------+--------+ | 1 | iphone13 | 台 | 9800 | | 2 | 智能扫把 | 把 | 150 | | 3 | iphone12 pro | 台 | 5800 | +----------+--------------+------+--------+ +-------------+---------------+ | category_id | category_name | +-------------+---------------+ | 1 | 3C数码 | | 2 | 智能家居 | +-------------+---------------+ +-------------+----------+ | category_id | goods_id | +-------------+----------+ | 1 | 1 | | 2 | 2 | | 1 | 3 | +-------------+----------+
这篇关于MySQL 笔记(三):三大范式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-20部署MySQL集群入门:新手必读指南
- 2024-11-20部署MySQL集群教程:初学者指南
- 2024-11-20部署MySQL集群项目实战:新手教程
- 2024-11-20部署MySQL集群资料:新手入门教程
- 2024-11-20MySQL集群部署教程:入门级详解
- 2024-11-20MySQL集群教程:入门与实践指南
- 2024-11-20部署MySQL集群教程:新手入门指南
- 2024-11-20MySQL读写分离教程:轻松入门
- 2024-11-20部署MySQL集群入门:一步一步搭建你的数据库集群
- 2024-11-19部署MySQL集群学习:入门教程