本文介绍: 设计数据表时候,要考虑很多的问题:如果数据库设计得不合理的话,可能导致下面的几种问题:我们可以看出设计良好的数据库是很重要的,它有下面的优点:设计数据库我们得重视数据表设计,为了建立冗余度小,结构合理数据库,设计数据库必须遵循一定的规则关系数据库中,关于数据表设计的基本原则规则就称为范式范式是我们在设计数据库结构过程需要遵循的规则和指导方法。不过,有的时候为了提高某一些查询性能,我们还需要破坏范式规则,也就是反规范化。范式定义用到主键和候选键,我们先来看看相关概念数据库中的键是

文章是看尚硅谷的MySQL所写的笔记

1.为什么需要数据库设计

设计数据表时候,要考虑很多的问题:

如果数据库设计得不合理的话,可能导致下面的几种问题:

我们可以看出设计良好的数据库是很重要的,它有下面的优点:

计数据库,我们得重视数据表的设计,为了建立冗余度小,结构合理的数据库,设计数据库必须遵循一定的规则

2.范式(Normal Formal)

2.1范式概述

关系型数据库中,关于数据表设计的基本原则,规则就称为范式,范式是我们在设计数据库结构过程需要遵循的规则和指导方法
在这里插入图片描述
不过,有的时候为了提高某一些查询性能,我们还需要破坏范式规则,也就是反规范化。

2.2键和相关属性概念

范式的定义用到主键和候选键,我们先来看看相关的概念,数据库中的键是由一个多个属性组成的,我们来看一下数据表中常用的几种键和属性定义
在这里插入图片描述

在这里插入图片描述

2.3第一范式(1NF)

2.4第二范式(2NF)

比如说,在成绩表(学号,课程号,成绩)关系中,(学号,课程号)可以决定成绩,因为一个学生可以选多门课,一门课也可以被多个学生选择,所以学号或课程号都不能单独决定成绩
所以(学号,课程号)——>成绩就是完全依赖关系

比赛里面包含球员编号,姓名,年龄比赛编号比赛实际和比赛场地属性,候选键和主键都是(球员编号比赛编号),我们可以通过候选键(主键)来决定下面的关系
(球员编号比赛编号)——>(姓名,年龄比赛时间比赛场地,得分)
但是这个数据表不满足第二范式,因为数据表中字段之间还存在下面的对应关系:

(球员编号)——>(姓名,年龄)
(比赛编号)——>(比赛时间,比赛场地)
非主属性并非完全依赖候选键,这样会产生下面的问题。

为了避免上述情况,我们可以把球员比赛表设计成下面的三张表。

表名

属性(字段)

球员player

球员编号,姓名,年龄等属性

比赛game

比赛编号,比赛时间,比赛场地等属性

球员比赛关系player_game

球员编号,比赛编号,得分等属性

这样的话,每张数据表都符合第二范式,就避免了异常情况的发生
第二范式要求实体的属性完全依赖关键字,如果存在不完全依赖,那么这个属性和主关键字的这一部分就应该分离处理形成一个新的实体,新实体和原来实体之间是一对多的关系

2.5第三范式(3NF)

  • 第三范式建立在已经满足第二范式的基础上
  • 数据表中的每一个非主键字段都和主键字段直接相关
  • 也就是说数据表中的所有非主键字段不能依赖于其他非主键字段
  • 这个规则的意思是所有非主属性之间不能有依赖关系,它们是互相独立
  • 这里的主键可以拓展成为候选键
  • 在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.6范式的优缺点

3.反范式化

3.1概述

3.2 反范式的新问题

反范式虽然可以通过空间换实际,提升查询的效率,但是反范式也会带来一些新问题

3.3反范式的适用场景

当冗余信息大幅度提高查询效率时候,我们才会采取反范式的优化

增加冗余字段的建议
增加冗余冗余字段一定要符合下面的两个条件,满足下面的两个条件才可以考虑增加冗余字段
①这个冗余字段不需要经常进行修改
②这个冗余字段查询的时候不可或缺
在这里插入图片描述

4.BCNF(巴斯范式)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这个表符合第三范式
在这里插入图片描述
在这里插入图片描述

原文地址:https://blog.csdn.net/qq_52797170/article/details/125115139

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_22902.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注