第一范式1NF
表中所有字段都是不可分割的原子值
create table student2(id int primary key, name varchar(20), address varchar(30));
insert into student2 values(1, 'Zhangsan', 'Xian’);
insert into student2 values(2, 'Zhangsi', 'Chengdu’);
insert into student2 values(3, 'Wangwu', 'Jilin');
create table student3(id int primary key, name varchar(20), country varchar(30), privence varchar(30), city varchar(30), details varchar(30));
insert into student3(id , name , country, privence) values(1, ‘Zhangsan','China','Xian');
insert into student3(id , name , country, privence) values(2, 'Zhangsi', 'China','Chengdu');
insert into student3(id , name , country, privence) values(3, 'Wangwu', 'China','Jilin');
范式设计的越详细对于某些实际操作可能更好,但是不一定都是好处
第二范式2NF
第二范式要求 必须是满足第一范式的要求,除主键外的每一列都必须完全依赖主键,不完全依赖只可能发生在联合主键的情况下
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(
product_id int,
customer_id int,
primary key(product_id, customer_id)
);
create table product(
id int primary key;
name varchar(20);
);
create table customer(
id int primary key;
name varchar(20);
);
分成三个表就满足第二范式
第三范式 3NF
必须先满足第二范式,除主键外的其他键不能有其他依赖,也就是传递依赖
网友评论