主要有两点:
1.减少数据冗余, 节约数据存储空间, 提高sql执行效率;
这个目的非常好理解, 数据越少, 存储空间也就越少, 能存储的数据也就越多....例如图书信息表
图书信息表: {书号, 书名, 出版社ID, 出版社名称, 出版社地址, 作者姓名, 作者年龄, 作者地址}
可以发现表有如下特点:
(1) 表中所有字段都是单一属性;
(2) 每一列都是基本数据类型...图书信息表
图书信息表: {书号, 书名, 出版社ID, 出版社名称, 出版社地址, 作者名称}
主键: {书号, 出版社ID}
那作者信息是只和图书有关系, 和出版社信息是没有关系的....所以上述图书信息表中将出版社名称和作者姓名冗余进来,
冗余后的图书信息表
图书信息表: {书号, 书名, 出版社ID, 出版社名称, 作者ID , 作者姓名}
这时再进行查询时, 是单表查询, 顺序IO...其实并不是, 例如出版社地址信息, 业务上就不是很关心, 就不需要也冗余到图书表中.
就可以减少表的列宽度, 提高mysql每页读取的数据量, 降低IO次数, 提高性能.