尽量避免数据维护时出现插入, 更新和删除异常;
插入异常: 表中的实体随另外的实体存在而存在;
以下表为例
选课表:{学号, 学生姓名, 课程号, 课程名称, 学分}
主键:{学号, 课程号}
在增加课程时...更新异常:更改表中单独属性时, 会更新表中的多行
同样以选课表为例
在修改语文学分时, 会影响多行数据, 就被称为更新异常....所以上述图书信息表中将出版社名称和作者姓名冗余进来,
冗余后的图书信息表
图书信息表: {书号, 书名, 出版社ID, 出版社名称, 作者ID , 作者姓名}
这时再进行查询时, 是单表查询, 顺序IO...其实并不是, 例如出版社地址信息, 业务上就不是很关心, 就不需要也冗余到图书表中.
就可以减少表的列宽度, 提高mysql每页读取的数据量, 降低IO次数, 提高性能....这里可以去掉出版社名称列,
图书信息表
图书信息表: {书号, 书名, 出版社ID, 作者ID , 作者姓名}
可以将出版社信息缓存到内存中, 在读取图书信息后, 在程序内存中拼接出版社名称信息.