何为范式?
设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。
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
有空再说.....