下面的学生选课数据库,存在大量冗余,比如表中课程名字有大量重复,专业名字大量重复,我们说这样的数据库存在冗余,是一个不好的数据库设计。

于是我们将上面的表分解为下面三张表。



专业名,课程名没有了冗余的现象,但有同学会说,学号出现在两张表中,而且比原表出现次数多,这算不算冗余。我们说,主键与外键在多表中的重复出现,不属于数据冗余。非键字段的重复出现,才是数据冗余!而且是一种低级冗余,即重复性的冗余。
其实,没有冗余的数据库设计可以做到。但是,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。
比如商品中的“单价、数量、金额”三个字段,“金额”就是由“单价”乘以“数量”派生出来的,它就是冗余。“金额”这个字段的存在,表明该表的设计不满足第三范式,因为“金额”可以由“单价”乘以“数量”得到,说明“金额”是冗余字段。但是,增加“金额”这个冗余字段,可以提高查询统计的速度,这就是以空间换时间的作法。

文章转载自贵州电大一数据库原理与应用,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




