MySQL学习笔记(十七)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL学习笔记(十七)

10.1 第一范式


  • 第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式1NF中表的每一行只包含一个实例的信息。简而言之,第一范式就是无重复的列 [1] 


  • 地位:最核心、最重要的范式,所有表的设计都需要满足


  • 要求:必须有主键,并且每一个字段原子性不可再分
【案例】:判断是否满足第一范式
 学生编号    学生姓名    联系方式
 -------------------------------------
 1001        张三      zs@gmail.com,1359999999
 1002        李四      ls@gmail.com,13699999999
 1001        王五      ww@163.net,13488888888
 【存在问题】:
 1、最后一条记录和第一条重复(不唯一,没有主键)
 2、联系方式字段可以再分,不是原子性的
 【更改】:
 学生编号(pk)    学生姓名    email           联系电话
 -------------------------------------------------------------
     1001        张三      zs@gmail.com    1359999999
     1002        李四      ls@gmail.com    13699999999
     1003        王五      ww@163.net      13488888888


10.2 第二范式


  • 要求:建立在第一范式之上,要求所有非主键字段完全依赖主键,不要产生部分依赖


  • 多对多三张表,关系表两个外键
【案例】:判断是否满足第一范式
 学生编号 学生姓名 教师编号 教师姓名
 1001 张三 001 王老师
 1002 李四 002 赵老师
 1003 王五 001 王老师
 1001 张三 002 赵老师
 确定主键:
 学生编号(PK) 教师编号(PK) 学生姓名 教师姓名
 1001 001 张三 王老师
 1002 002 李四 赵老师
 1003 001 王五 王老师
 1001 002 张三 赵老师
 /**以上虽然确定了主键,但此表会出现大量的冗余,主要涉及到的冗余字段为“学生姓名”和“教师姓名”,出现冗余的
 原因在于,学生姓名部分依赖了主键的一个字段学生编号,而没有依赖教师编号,而教师姓名部门依赖了主键的一个
 字段教师编号,这就是第二范式部分依赖。***/
 解决方案如下:
 学生信息表
 学生编号( PK) 学生姓名89 / 103
 1001                张三
 1002                李四
 1003                王五
 教师信息表
 教师编号( PK)   教师姓名
 001             王老师
 002             赵老师
 教师和学生的关系表
 学生编号(PK) fk学生表的学生编号 教师编号(PK) fk教师表的教师编号
         1001                        001
         1002                        002
         1003                        001
         1001                        002
 /*如果一个表是单一主键,那么它就复合第二范式,部分依赖和主键有关系
 以上是一种典型的“多对多”的设计*/


10.3 第三范式


  • 要求:建立在第二范式之上,要求所有非主键字段直接依赖主键,不要产生传递依赖
【案例】:判断是否满足第三范式
 学生编号( PK) 学生姓名 班级编号 班级名称
 1001 张三 01 一年一班
 1002 李四 02 一年二班
 1003 王五 03 一年三班
 1004 赵六 03 一年三班
 /*从上表可以看出,班级名称字段存在冗余,因为班级名称字段没有直接依赖于主键,班级名称字段依赖于班级编号,
 班级编号依赖于学生编号,那么这就是传递依赖,解决的办法是将冗余字段单独拿出来建立表,如:*/
 学生信息表
 学生编号( PK) 学生姓名 班级编号( FK)
 1001 张三 01
 1002 李四 02
 1003 王五 03
 1004 赵六 03
 班级信息表
 班级编号( PK) 班级名称
 01 一年一班
 02 一年二班
 03 一年三班


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5月前
|
存储 关系型数据库 MySQL
Linux C/C++ 开发(学习笔记八):Mysql数据库图片存储
Linux C/C++ 开发(学习笔记八):Mysql数据库图片存储
136 0
|
5月前
|
关系型数据库 MySQL 数据库
Linux C/C++ 开发(学习笔记七):Mysql数据库C/C++编程实现 插入/读取/删除
Linux C/C++ 开发(学习笔记七):Mysql数据库C/C++编程实现 插入/读取/删除
110 0
|
4月前
|
SQL Oracle 关系型数据库
MySQL学习笔记
MySQL学习笔记
29 0
|
2月前
|
SQL druid Java
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
49 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
|
2月前
|
SQL Java 关系型数据库
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(上)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
69 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(上)
|
2月前
|
SQL 关系型数据库 MySQL
MySQL学习笔记
这篇文章是一份关于MySQL数据库操作的学习笔记,涵盖了数据库的终端操作、数据类型、建表约束、事务处理以及SQL的连接查询等基础知识点。
|
2月前
|
SQL 关系型数据库 MySQL
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)
31 6
|
2月前
|
存储 关系型数据库 MySQL
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)(上)
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)
33 4
|
2月前
|
SQL 关系型数据库 MySQL
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)(中)
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)
25 3
|
5月前
|
SQL 关系型数据库 MySQL
简简单单 My SQL 学习笔记(1)——表中数据的整删改查
简简单单 My SQL 学习笔记(1)——表中数据的整删改查
下一篇
无影云桌面