第一范式(1NF)
列具有原子性,设计列要做到列不再拆分。
| id | contry | 
|---|---|
| 1 | 中国上海 | 
| 2 | 美国纽约 | 
以上的表设计就不满足第一范式,因为contry对应的值可以拆分
so,满足第一范式的设计如下:
| id | contry | city | 
|---|---|---|
| 1 | 中国 | 上海 | 
| 2 | 美国 | 纽约 | 
第二范式(2NF)
在满足第一范式的基础上、满足一张表只能描述一件事情下面这张表既包含了学生信息又包含了课程信息所以不满足第二范式,正确的是把学生和课程拆开用分别用学生和课程表存储对应的信息。
| id | name | sex | course | source | 
|---|---|---|---|---|
| 1 | tom | male | Java | 100 | 
| 2 | lucy | female | Python | 800 | 
第三范式(3NF)
在满足第二范式的基础上,满足消除传递依赖(表中的数据如果能被推导出来,就不要设计一个字段单独存储)
| id | name | number | price | totalprice | 
|---|---|---|---|---|
| 1 | 牙膏 | 20 | 50 | 1000 | 
| 2 | 袜子 | 30 | 60 | 1800 | 
三范式就是一个空间最省原则。
反三范式
通过增加冗余或者重复数据 来提高数据库的读性能
 浪费存储空间,节省查询时间
 冗余字段:某一个字段属于一张表,但是它又在另外一张表中
总结
1.尽量根据三范式规则去设计数据库
 2.可以合理的加入冗余字段减少join操作让数据库执行的更快。