数据库三大范式

后端 / 2020-05-11

何为范式?

设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。

1NF

  • 字段原子性,不可再分。
create table student(
	id int primary key,
	name varchar(20),
	address varchar(30)
);
insert into student values(1,'张三','中国山西省XX市XX县'

上面这个表,地址字段仍然可以继续拆分,因此不满足1NF

优化

create table student(
	id int primary key,
	name varchar(20),
	cuntry varchar(30),
	privence varchar(30),
	city varchar(30)
);

当我们把字段拆到不能再拆,即满足第一范式。

2NF

  • 必须满足第一范式
  • 除主键外字段必须完全依赖主键。
  • 只有在联合主键情况下,才会出现不完全依赖。
create table order(
	product_id int,
	customer_id int,
	product_name varchar(20),
	customer_name varchar(20),
	primary key(product_id,customer_id)
);

上面这个表存在很严重的问题,除主键外其他的字段只依赖主键部分。

优化

简单有效的方法就是:拆表

create table order(
	order_id int primary key,
	product_id int,
	customer_id int,

);


create table product(
	id int primary key,
	name varchar(20),
);


create table customer(
	id int primary key,
	name varchar(20)
);

这样就完全依赖主键了,满足2NF.

3NF

有空再说.....