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 | 北京师范大学出版社 |