Skip to content

Latest commit

 

History

History
74 lines (59 loc) · 2.43 KB

数据库三范式.md

File metadata and controls

74 lines (59 loc) · 2.43 KB

数据库三范式

NF: Normal Form, 范式

1NF

1NF, 第一范式

# 概念
1NF指的是表的属性(即列)具有原子性, 不可再分

# 反例
id          name            mail_sex
1           wyx             wyx@163.com_男

# 正例
id          name            mail            sex
1           wyx             wyx@163.com     男

2NF

2NF, 第二范式

# 概念
2NF指的是在1NF的基础上, 不能有部分依赖(部分依赖的前提是有组合主键, 也就是非主键属性不能只依赖部分主键)
如果是单一主键, 则符合第二范式

# 反例(该表有两个主键, 学生编号和教师编号, 但是学生姓名只依赖于学生编号, 教师姓名只依赖于教师编号, 这就是部分依赖)
student_id(PK)          teacher_id(PK)          student_name            teacher_name
1001                    001                     zhangsan                wanglaoshi

# 正例(应该拆分成两张表)
student_id(PK)          student_name          
1001                    zhangsan
teacher_id(PK)          teacher_name          
001                     wanglaoshi              

3NF

3NF, 第三范式

# 概念
3NF指的是在2NF的基础上, 非主键字段和主键字段不能产生传递依赖

# 反例(classname依赖于classid, classid依赖于主键id, 这就是传递依赖)
id(PK)          name          classid            classname
1               wyx           101                1班

# 正例
id(PK)          name          classid(FK)            
1               wyx           101              
classid(PK)     classname
101             1班                                 

反三范式

# 概念
通常情况下表的设计要按照3NF, 有时候会例外, 反三范式会提高查询的效率

# Example
现在有两个表, 一个相册表, 一个图片表, 一个相册表中包含很多图片,
相册表中的view(浏览次数)是可以遍历图片表推导出来的, 但是这样会造成查询效率很低,
所以反三范式, 在相册表中加一个view属性, 提高了查询效率.

id(PK)          name          view          
1               相册1          30  
id(PK)          name          view            albumid(FK)
10              1.jpg         30              1 

思维导图

数据库三范式.xmind

sanfanshi