三范式
第一范式:1NF 原子性 数据不可再分
例1.错误数据库表的设计
错误:违背数据库三范式的原子性
周行知 湖南 php
周行知 湖南 html
第二范式:2NF 唯一性 使得每一行 数据具有唯一性,并消除数据之间的部分依赖
例1
create table tab1(
id int,
name varchar(10)
);
insert into tab1 values(1,'a');
insert into tab1 values(1,'a');
对比
错误数据库设计
create table tab2(
id int,
name varchar(10),
primary key(id)
);
insert into tab2 values(1,'a');
insert into tab2 values(1,'a');
错误原因:违反数据库设计第二范式:唯一性
2.消除数据部分依赖
回到定义中去。
什么叫做依赖?
依赖,就是在一个表中,其中某个字段的值B可以由另一个字段值A来决定
字段B依赖字段A
或
字段Aj决定字段B
学生姓名 性别 课程名称 学分 成绩
周行知 男 计算机 2 100
选择"周行知",性别就确定。除非周行知不阴不阳
你确定性别男,难道你认为所有的男人都叫周行知吗?
主键决定其他字段
其他字段依赖主键
什么叫部分依赖?
如果某个字段,只依赖部分主键字段,此时就称为部分依赖
身份证号码 学生姓名 性别 课程名称 学分 成绩
4301111111 周行知 男 计算机程序设计艺术 10 78
建议:销毁部分依赖
解决方案:
id int auto_increment primary key,
经验:每个表都要设计主键
第三范式 独立性,消除传递依赖。
使得每个字段都独立依赖与主键字段(独立性),而要消除其中部分主键字段的内部依赖---这种