MySQL数据库规范化(范式)
原始数据表
| title | publisher | year | author1 | author2 | author3 |
| 《细说PHP》 | 电子工业出版社 | 2009 | 高洛峰 | ||
| 《细说JavaScript》 | 清华大学出版社 | 2013 | 高洛峰 | 颖欣 | |
| 《高并发的web站点》 | 电子工业出版社 | 2014 | 李文凯 | 张涛 | 李强强 |
| 《LAMP》兄弟连 | 北京师范大学出版社 | 2015 | 李超 | 李明 |
第一范式:
(1)内容相似的数据必须消除(“消除”的办法是在创建一个数据表来存放他们)
(2)必须为每一组相关数据创建一个数据表
(3)每条数据表记录必须用一个逐渐来标识
图书数据库:第一范式
| id | title | publisher | year | author |
| 1 | 《细说PHP》 | 电子工业出版社 | 2009 | 高洛峰 |
| 2 | 《细说JavaScript》 | 清华大学出版社 | 2013 | 高洛峰 |
| 3 | 《细说JavaScript》 | 清华大学出版社 | 2013 | 颖欣 |
| 4 | 《高并发的web站点》 | 电子工业出版社 | 2014 | 李文凯 |
| 5 | 《高并发的web站点》 | 电子工业出版社 | 2014 | 张涛 |
| 6 | 《高并发的web站点》 | 电子工业出版社 | 2014 | 李强强 |
| 7 | 《LAMP》兄弟连 | 北京师范大学出版社 | 2015 | 李超 |
| 8 | 《LAMP》兄弟连 | 北京师范大学出版社 | 2015 | 李明 |
第二范式:
(1)只要数据列里的内容出现重复,就意味着应该把数据表拆分为多个子表
(2)拆分形式的数据表必须用外键关联起来
titles的数据表:第二范式
| titleid | title | publisher | year |
| 1 | 《细说PHP》 | 电子工业出版社 | 2009 |
| 2 | 《细说JavaScript》 | 清华大学出版社 | 2013 |
| 3 | 《高并发的web站点》 | 电子工业出版社 | 2014 |
| 4 | 《LAMP》兄弟连 | 北京师范大学出版社 | 2015 |
authors数据表:第二范式
| authorid | author |
| 1 | 高洛峰 |
| 2 | 颖欣 |
| 3 | 李文凯 |
| 4 | 张涛 |
| 5 | 李强强 |
| 6 | 李超 |
| 7 | 李明 |
rel_title_author数据表:第二范式
| titleid | authorid |
| 1 | 1 |
| 2 | 1 |
| 2 | 2 |
| 3 | 3 |
| 3 | 4 |
| 3 | 5 |
| 4 | 6 |
| 4 | 7 |
第三范式:
(1)与主键没有直接关系的数据列必须消除(“消除”的办法是再创建一个数据表来存放他们)
titles数据表:第三范式
| titleid | title | publisherid | year |
| 1 | 《细说PHP》 | 1 | 2009 |
| 2 | 《细说JavaScript》 | 2 | 2013 |
| 3 | 《高并发的Web站点》 | 1 | 2014 |
| 4 | 《LAMP兄弟连》 | 3 | 2015 |
publishers数据表:第三范式
| publisherid | publisher |
| 1 | 电子工业出版社 |
| 2 | 清华大学出版社 |
| 3 | 北京师范大学出版社 |

浙公网安备 33010602011771号