数据冗余
冗余简单说来就是重复数据。
还是以学生和班级表为例来说明。
假如我们把学生和班级信息全部存储在一个表中。
id stuname classname
1 a 1班
2 b 2班
3 c 3班
4 d 4班
5 e 1班
6 f 32班
7 g 1班
8 h 6班
9 i 3班
10 j 2班
11 k 5班
12 l 3班
从上面的数据中我们看到,班级名称存储在了学生表中,这个字段中有很多重复值,这就成为冗余。
数据的冗余会对数据的管理带来一些问题。
1.数据准确性。
由于班级名称仅仅作为一个普通的字符串来标识学生的班级,当学生表中的数据越来越多时,classname字段的值出错的机会会越来越大。比如上面数据中id为6的学生的记录,id为6的学生应该是3班,由于不小心,将班级写成了32班,而实际上,根本就不存在32班这个班级 ,因此如果要查询3班的所有学生时,就不能查到id为6的学生了。造成这种错误的原因主要是数据库不能对classname的字段值进行约束。
2.数据更新问题。
假如由于学校的原因需要对所有班级进行重新划分,班级名称全部进行调整。这是,需要对学生表的所有数据进行修改,很显然,数据库需要做大量的工作,人工也需要仔细清理检查。
因此,在设计数据库表时,对于这类相关联的数据,我们通常会将它们存储在一个新表中,而通过主外键进行关联起来。
然而,并不是所有的冗余都要避免,在数据量非常大的数据表中,我们通常会特意冗余某些字段,通常这些字段对应查询非常需要,但它们的值又基本不会变化或很少变化,这时,我们为了获得更好的查询性能,可以冗余这类字段。
比如,存储用户信息的user表,通常用户注册后的账户名是不允许修改的,在论坛帖子表中,我们通常只存储用户的id,但在展示用户发的帖子时,我们需要展示用户的帐户名,这种情况下,我们是可以在帖子表中冗余帐户名字段的。
关注微信公众号 javajidi_com,可以实时获取有价值的技术文章推送。
"Java基地"交流群:245130488
如果本站的内容对您有帮助,不妨小额赞助一下,让我们更有动力继续写出高质量的文章^_^。 ¥小额赞助




