一文了解MYSQL三大范式和表约束


Posted in MySQL onApril 03, 2022

? 一,什么是范式

范式简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系。所以建立科学的,规范的的数据库是需要满足一些规范的来优化数据数据存储方式

范式一共有六种,这里主要详细介绍三大范式:
第一范式(1NF),第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了

? 二,三大范式的理解

1,第一范式(确保每列保持原子性)

首先第一范式是最基本的范式,而第一范式的合理遵循要按照系统的需求而定,第一范式也是为了确保每列保持原子性,如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第⼀范式。

例如:某些数据库系统中需要用到“地址”这个属性,本来直接将“地址”属性设计成⼀个数据库表的字段

一文了解MYSQL三大范式和表约束

2,第二范式(保证每列都和主键相关)

第⼆范式在第⼀范式的基础之上更进⼀层。第⼆范式需要确保数据库表中的每⼀列都和主键相关,而不能只与主键的某⼀部分相关(主要针对联合主键)。也就是说在⼀个数据库表中,⼀个表中只能保存⼀种数据,不可以把多种数据
保存在同⼀张数据库表中

例如:对于一张订单表,应该只包括订单信息,若第一张有数量信息,不符合第二范式,对于订单数量应该单独为一张表

一文了解MYSQL三大范式和表约束

3,第三范式(保证每列和主键直接相关,不能间接相关)

第三范式需要确保数据表中的每⼀列数据都和主键直接相关,而不能间接相关,即满足第二范式前提,如果某一属性依赖于其他非主键属性,而其他非主键属性又依赖于主键,那么这个属性就是间接依赖于主键,这被称作传递依赖于主属性。 解释就是一张表最多只存两层同类型信息

例如:在设计⼀个订单数据表的时候,可以将客户编号作为⼀个外键和订单表建立相应的关系

一文了解MYSQL三大范式和表约束

4,表的关系

(1)一对一

一对一就是⼀个学生对应⼀个学号

一文了解MYSQL三大范式和表约束

(2)一对多

一对多是 ⼀个班级包含多个学生(用两张表表示)

一文了解MYSQL三大范式和表约束

(3)多对多

⼀张表中的⼀条数据可以对应到另⼀张表的多条数据

一文了解MYSQL三大范式和表约束

?三,表的约束有哪些

?1,约束类型

表约束也是为了规范程序员正确使用表的,但表约束是预先设置的,设置之后就对所有插⼊和修改立即生效

⭐ NOT NULL - 指示某列不能存储 NULL 值。
⭐UNIQUE - 保证某列的每行必须有唯一的值。
⭐DEFAULT - 规定没有给列赋值时的默认值。
⭐PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
⭐FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
⭐CHECK - 保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略CHECK子句

一文了解MYSQL三大范式和表约束

?2,表的约束

(1)非空约束:NOT NULL

创建的字段默认是可以为空的

一文了解MYSQL三大范式和表约束

而添加了非空约束之后,设置的字段就不能为空了。

语法

字段名 数据类型 NOT NULL
说明了某列不可以存储空值

(2)主键约束:PRIMARY KEY

主键的特征:

1.主键可以由多个字段或单个字段组成

2. 主键不能为空且唯⼀

3. ⼀个表中只能有⼀个主键

独立主键语法:

语法: 字段 字段类型 primary key
示例:
create table test4(id int primary key,name varchar(250));

一文了解MYSQL三大范式和表约束

独立主键:该主键由一个字段组成,且该主键不能重复
联合主键:多个字段组成的主键,因此字段不能重复
一个主键可以有多个字段,一张表只能有一个主键

联合主键语法:

语法: primary key(字段1,字段2…)

示例:
> create table test5(
id int,
name varchar(250),
primary key(id,name)
);

一文了解MYSQL三大范式和表约束

(3)唯一约束:UNIQUE

唯⼀约束就是对应字段的值是唯⼀的,不能重复,但一个表可以有多个唯一索引

语法:

字段名 数据类型 unique
示例:
CREATE TABLE student_unique (
id INT unique,
name VARCHAR(250)
);

一文了解MYSQL三大范式和表约束

⭐ 唯一约束和主键约束区别(面试常考)

主键约束⼀个表只能有⼀个,⽽唯⼀约束可以有多个
主键约束不能有 null 值,⽽唯⼀约束可以有 null(唯⼀索引可以有多个 null)

(4)外键约束:FOREIGN KEY

外键用于关联其他表的主键或唯⼀键

外键可以插入NULL,多个NULL,若外键指定了值,那这个值一定要有效,有效是这个值在主表存在了

语法:

foreign key (字段名) references 主表(列)

示例:

创建学生表student,⼀个学生对应⼀个班级,⼀个班级对应多个学生。使用id为主键,classes_id为外键,关联班级表id

-- 重新设置学⽣表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id INT PRIMARY KEY auto_increment,
sn INT UNIQUE,
name VARCHAR(250) DEFAULT 'unkown',
qq_mail VARCHAR(250),
classes_id int,
FOREIGN KEY (classes_id) REFERENCES classes(id)
);

(5)默认值约束: DEFAULT

指定id列为主键

-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id INT NOT NULL PRIMARY KEY,
sn INT UNIQUE,
name VARCHAR(20) DEFAULT 'unkown',
qq_mail VARCHAR(20)
);

对于整数类型的主键,常配搭自增长auto_increment来使用。插入数据对应字段不给值时,使用最大值+1

– 主键是 NOT NULL 和 UNIQUE 的结合,可以不用 NOT NULL
id INT PRIMARY KEY auto_increment

总结 

到此这篇关于MYSQL三大范式和表约束的文章就介绍到这了,更多相关MYSQL三大范式和表约束内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
MySQL5.7并行复制原理及实现
Jun 03 MySQL
MySQL子查询中order by不生效问题的解决方法
Aug 02 MySQL
MySQL如何解决幻读问题
Aug 07 MySQL
MySQL 用 limit 为什么会影响性能
Sep 15 MySQL
MySQL定时备份数据库(全库备份)的实现
Sep 25 MySQL
Mysql数据库手动及定时备份步骤
Nov 07 MySQL
MySQL如何快速创建800w条测试数据表
Mar 17 MySQL
Windows下载并安装MySQL8.0.x 版本的完整教程
Apr 10 MySQL
mysql 索引的数据结构为什么要采用B+树
Apr 26 MySQL
MySQL提升大量数据查询效率的优化神器
Jul 07 MySQL
MySQL 原理优化之Group By的优化技巧
Aug 14 MySQL
MYSQL优化之数据表碎片整理详解
Innodb存储引擎中的后台线程详解
Apr 03 #MySQL
MySQL磁盘碎片整理实例演示
Mysql使用全文索引(FullText index)的实例代码
Apr 03 #MySQL
一文简单了解MySQL前缀索引
为什么MySQL不建议使用SELECT *
详解MySQL的主键查询为什么这么快
You might like
php录入页面中动态从数据库中提取数据的实现
2006/10/09 PHP
php从数组中随机抽取一些元素的代码
2012/11/05 PHP
php addslashes 利用递归实现使用反斜线引用字符串
2013/08/05 PHP
php初始化对象和析构函数的简单实例
2014/03/11 PHP
php输入流php://input使用浅析
2014/09/02 PHP
PHP实现图片的等比缩放和Logo水印功能示例
2017/05/04 PHP
PHP基于GD库实现的生成图片缩略图函数示例
2017/07/05 PHP
SUN的《AJAX与J2EE》全文译了
2007/02/23 Javascript
防止网站内容被拷贝的一些方法与优缺点好处与坏处分析
2007/11/30 Javascript
javascript+xml技术实现分页浏览
2008/07/27 Javascript
jQuery自动切换/点击切换选项卡效果的小例子
2013/08/12 Javascript
详解JS 比较两个Json对象的值是否相等的实例
2013/11/20 Javascript
JS实现简单的顶部定时关闭层效果
2014/06/15 Javascript
JavaScript实现自定义媒体播放器方法介绍
2017/01/03 Javascript
详解vue渲染函数render的使用
2017/12/12 Javascript
JS中封装axios来管控api的2种方式
2019/09/11 Javascript
Node.js path模块,获取文件后缀名操作
2020/11/07 Javascript
零基础学Python(一)Python环境安装
2014/08/20 Python
Python使用Srapy框架爬虫模拟登陆并抓取知乎内容
2016/07/02 Python
python3.6使用pymysql连接Mysql数据库
2018/05/25 Python
python pandas 对series和dataframe的重置索引reindex方法
2018/06/07 Python
Python selenium的基本使用方法分析
2019/12/21 Python
CSS实现聊天气泡效果
2020/04/26 HTML / CSS
Mio Skincare美国官网:身体紧致及孕期身体护理
2017/03/05 全球购物
梅西百货澳大利亚:Macy’s Australia
2017/07/26 全球购物
伦敦眼门票在线预订:London Eye
2018/05/31 全球购物
茱莉蔻美国官网:Jurlique美国
2020/11/24 全球购物
电子商务自荐书范文
2014/01/04 职场文书
会计助理岗位职责
2014/02/17 职场文书
研讨会主持词
2014/04/02 职场文书
项目技术负责人岗位职责
2015/04/13 职场文书
排球赛新闻稿
2015/07/17 职场文书
田径运动会广播稿
2015/08/19 职场文书
Jupyter notebook 输出部分显示不全的解决方案
2021/04/24 Python
python 实现的截屏工具
2021/05/08 Python
JavaScript分页组件使用方法详解
2021/07/26 Javascript