MySQL数据库定义语言学习笔记

MySQL数据库定义语言学习笔记

数据库的范式

◆ 构造数据库必须遵循一定得规则,这种规则就是范式。

◆ 目前关系数据库有6中范式,一般情况下,只满足第三范式即可。

第一范式:原子性

◆ 第一范式是数据库的基本要求,不满足这一点就不是关系数据库。

◆ 数据表得每一列都是不可分割得基本数据项,同一列中不能有多个值,也不能存在重复的属性。

不符合第一范式:

学号 姓名 班级
1000 刘娜 高三年级1班

符合第一范式:

学号 姓名 年级 班级
1000 刘娜 高三 1班

第二范式:唯一性

◆ 数据表中的每条记录必须是唯一的。为了实现区分,通常要为表加上一个列用于存储唯一标识,这个唯一属性列被称作主键列。

无法区分重复数据:

学号 考试成绩 日期
230 58 2018-07-15
230 58 2018-07-15

数据具有唯一性:

流水号 学号 考试成绩 日期
201807152687 230 58 2018-07-15
201807152694 230 58 2018-07-15

第三范式:关联性

◆ 每列都与主键有直接关系,不存在传递依赖

违反第三范式:

爸爸 儿子 女儿 女儿的玩具 女儿的衣服
陈华 陈浩 陈婷婷 海绵宝宝 校服

符合第三范式:

爸爸 儿子 女儿
陈华 陈浩 陈婷婷
女儿 女儿的玩具 女儿的衣服
陈婷婷 海绵宝宝 校服

◆ 依照第三范式,数据可以拆分保存到不同的数据表,彼此保持关联

编号 部门 电话
10 财务部 1001
20 技术部 1002
30 销售部 1003
编号 姓名 性别 部门 入职日期
1 陈浩 10 2018-05-10
2 李婷婷 30 2018-03-22

字段约束

◆ MySQL中的字段约束共有四种:

约束名称 关键字 描述
主键约束 PRIMARY KEY 字段值唯一,且不能为NULL
非空约束 NOT NULL 字段值不能为NULL
唯一约束 UNIQUE 字段值唯一,且可以为NULL
外键约束 FOREIGN KEY 保持关联数据的逻辑性

主键约束

◆ 主键约束要求字段的值在全表必须唯一,而且不能为NULL值

◆ 建议主键一定要使用数字类型,因为数字的检索速度会非常块

◆ 如果主键是数字类型,还可以设置自动增长

1
2
3
4
CREATE TABLE t_teacher(
id INT PRIMARY KEY AUTO_INCREMENT,
......
);

非空约束

◆ 非空约束要求字段的值不能为NULL值

◆ NULL值以为没有值,而不是 “” 空字符串

1
2
3
4
5
6
CREATE TABLE t_teacher(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(200) NOT NULL,
married BOOLEAN NOT NULL DEFAULT FALSE
);
# 不能为空时,DEFAULT 默认值

唯一约束

◆ 唯一约束要求字段值如果不为NULL,那么在全表必须唯一

1
2
3
4
CREATE TABLE t_teacher(
......
tel CHAR(11) NOT NULL UNIQUE
);

外键约束

◆ 外键约束用来保证关联数据的逻辑关系

父表:

deptno dname tel
10 财务部 1001
20 技术部 1002
30 销售部 1003

子表:

empno name sex deptno hiredate
1 陈浩 10 2018-05-10
2 李婷婷 30 2018-03-22

◆ 外键约束的定义是写在子表上的

1
2
3
4
5
6
7
8
9
10
CREATE TABLE t_emp(
empno INT UNSIGNED PRIMARY KEY,
ename VARCHAR(20) NOT NULL,
sex ENUM("男", "女") NOT NULL,
deptno INT UNSIGNED,
hiredate DATE NOT NULL,
FOREIGN KEY (deptno) REFERENCES t_dept(deptno)
);
# ENUM()规定字段值,只能在规定的字段值之内挑选一个
# FOREIGN KEY 规定外界约束

外建约束的闭环问题

◆ 如果形成外键闭环,我们将无法删除任何一张表的记录。

PS: 所以创建数据表的时候不推荐使用外键约束。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×