数据库学习(5)MySQL数据库DDL——字段约束

数据库的范式

(1) 构造数据库必须遵循一定的规则,这种规则就是范式。
(2) 目前关系数据库有6种范式,一般情况下,只满足第三范式即可。

第一范式:原子性

(1) 第一范式是数据库的基本要求,不满足这一点就不是关系数据库。
(2) 数据表的每一列都是不可分割的基本数据项,同一列中不能有多个值,也不能存在重复的属性。
案例:

不符合第一范式,因为不能根据年级来查找数据
学号姓名班级
1000刘娜高三年级1班
符合第一范式
学号姓名年级班级
1000刘娜高三1班

第二范式:唯一性

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

无法区分重复的数据
学号考试成绩日期
230582018-07-15
230582018-07-15
数据具有唯一性
流水号学号考试成绩日期
201807152687230582018-07-15
201807152694230582018-07-15

第三范式:关联性

(1) 每列都与主键有直接关系,不存在传递依赖。
(2) 当满足第三范式,自动满足第一、第二范式。
(3) 依照第三范式,数据可以拆分保存到不同的数据表,彼此保持关联。
案例:

不符合第三范式
爸爸儿子女儿女儿的玩具女儿的衣服
陈华陈浩陈婷婷海绵宝宝校服
符合第三范式
表1
爸爸儿子女儿
陈华陈浩陈婷婷
表2
女儿女儿的玩具女儿的衣服
陈婷婷海绵宝宝校服

字段约束

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

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

主键约束

(1) 主键约束要求字段的值在全表必须唯一,而且不能为NULL值。
(2) 建议主键一定要使用数字类型,因为数字的检索速度会非常快。
(3) 如果主键是数字类型,还可以设置自动增长

CREATE TABLE t_teacher(
	id INT PRIMARY KEY AUTO_INCREMENT,
	......
);

注:AUTO_INCREMENT表示插入数据时不再需要给主键值了,主键值的生成就交给数据库完成(本质为计数器)。

非空约束

(1) 非空约束要求字段的值不能为NULL值。
(2) NULL值的意思是没有值,而不是""空字符串。

CREATE TABLE t_teacher(
	id INT PRIMARY KEY AUTO_INCREMENT,
	name VARCHAR(200) NOT NULL,
	married BOOLEAN NOT NULL DEFAULT FALSE
);

注:
(1) DEFAULT FALSE表示BOOLEAN类型的married字段默认为负。
(2) MySQL里本没有BOOLEAN这个类型,它会以TINYTINT类型来保存,如果为TRUE,那么为1;如果为FALSE,那么为0。

唯一约束

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

CREATE TABLE t_teacher(
	......
	tel CHAR(11) NOT NULL UNIQUE
);

案例

注:一般情况下,表名前面要加下划线来表示真实表或者虚拟表。例如,t_teacher为真实表;v_teacher为虚拟表。

CREATE TABLE t_teacher(
	id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
	name VARCHAR(20) NOT NULL,
	tel CHAR(11) NOT NULL UNIQUE,
	married BOOLEAN NOT NULL DEFAULT FALSE
);

外键约束

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

父表
deptnodnametel
10财务部1001
20技术部1002
30销售部1003
子表
empnonamesexdeptnohiredate
1陈浩102018-05-10
2李婷婷302018-03-22

外键约束的定义时写在子表上的
案例:

CREATE TABLE t_dept(
	deptno INT UNSIGNED PRIMARY KEY,
	dname VARCHAR(20) NOT NULL,
	tel CHAR(4) UNIQUE
);

CREATE TABLE t_emp(
	empno INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
	ename VARCHAR(20) NOT NULL,
	sex ENUM("男","女") NOT NULL,
	deptno INT UNSIGNED,
	hiredate DATE NOT NULL,
	tel CHAR(11) NOT NULL UNIQUE,
	FOREIGN KEY (deptno) REFERENCES t_dept(deptno)
);

注:ENUM为枚举的类型,意思是设置字段值时只能在这里进行挑选。

外键约束的闭环问题

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值