數據庫的三大設計範式
一、第一範式
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,
);