1)、第一范式:属性不可再分
例如:字段(地址),可细分为(省份)(城市)(乡村)(等)。
2)、第二范式:非主属性不能部分依赖主属性(主键),仅依赖于复合主键的部分字段
create table score(
sid int,
cid int,
cname varchar(100),
score int,
primary key(sid,cid)
)
以上不满足第二范式
cname 依赖于cid,不依赖于sid
假如需要修改,则可以将cname放到课程表中。
但是有时候为了提高查询效率,也可以这样做。
但更多时候这样做会产生冗余字段。
3)、第三范式:非主属性不能依赖于非主属性。
create table student(
id int primary key,
name varchar(50),
schoolName varchar(50),
schoolPhone varchar(100)
);
不满足第三范式
schoolName 依赖于schoolPhone
通常会将学校信息存储于学校表,然后学生表再与学校表建立关联。
create table school(
id int primary key,
schoolName varchar(50),
schoolPhone varchar(100)
);
create table student(
id int primary key,
name varchar(50),
schoolid int
foreign key (id) references school(id)
);