数据库的三大设计范式
一、第一范式
1、特点:数据表中的所有字段都是不可分割的原字值
create table student(
id int primaryy key,
name varchar(20),
address varchar(30),
);
insert into student values(1,‘张三’,‘中国四川省成都市武侯区’);
像这种字段值还可以继续拆分的就不满足第一范式
create table student2(
id int primaryy key,
name varchar(20),
country varchar(20),
privence varchar(30),
city varchar(30),
);
insert into student2 values(1,‘张三’,‘中国’,‘四川省’,‘成都市’,‘武侯区’);
像这种就接近满足第一范式。
范式,设计的越详细,对于某些实际操作可能更好,但是不一定都是好处。
二、第二范式
1、特点:必须是满足第一范式的前提下,第二范式要求,除主键外的每一列都必须完全依赖于主键。(如果出现不完全依赖,只可能发生在联合主键的情况下。)
创建订单表
create table myorder(
product_id int,
customer)id int,
product_name varchar(20),
customer_name varchar(20),
primary key(product_id,customer_id)
);
像除主键以外的其他列,只依赖与主键的部分字段,这种就不满足第二范式。
create table myorder(
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),
);
像这种,没有出现联合主键的,就满足第二范式。
第三范式
1、特点:(1)必须先满足第二范式。(2)除开主键列的其他列之间不能有依赖传递关系。
creat table myorder(
order_id int primary,
customer_id int,
customer_name varchar(20),
);
像这种,customer_id,有可能会依赖于customer_name因此,不满足第三范式。若要满足第三范式应该对某一个字段新建一个表。
creat table myorder(
order_id int primary,
customer_id int,
);
creat table myorder(
order_id int primary,
customer_id int,
);