设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 4541|回复: 7
打印 上一主题 下一主题

[表] 【Access小品】天下本无事--数据冗余问题概论

[复制链接]
跳转到指定楼层
1#
发表于 2014-4-4 11:43:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  天下本无事,庸人自扰之。这句话大体说得是没事找事,无事生非的意思。

  Access的初学者最常干的庸人自扰的事情,就是设计很多的冗余字段,几乎没有初学者能避免干这件事情。所以说了无数次不要这样做都没用,这个魔咒总是萦绕在初学者的上空,就像当今的雾霾一样难以治理。

  什么是冗余字段呢?看看今天版友zengtao同志的一个问题中的实例。这个实例中有两个表,数据表结构如下:

  A表:客户编号(主键),零件图号,零件名称

  B表:内部编号(主键),客户编号(外键),零件图号,零件名称,更改信息

  zengtao同志的问题是:如何通过窗体将A表的零件图号,零件名称传入B表中?

  解决从A表向B表写入数据,有很多的方法,解决起来非常简单。可是当你解决了zengtao同志的这个问题后。过几天,zengtao同志的还会提出另外一个问题:如何删除相同的记录?如果你问他什么是相同的记录?是如何产生的?他一定会告诉你,客户编号相同,零件图号和零件名称重复的记录就是相同记录。由于没有控制好录入的校验,所以搞重复了。这个问题解决了,再过十天半个月,zengtao同志说不定又会提出一个问题:A表中某个客户的零件图号修改了,怎么对B表中的图号做相同修改。继续解决了这个问题,zengtao同志还会没完没了得提出新的问题。
  
  导致zengtao同志苦恼和纠结的根源在什么地方?答案是:数据冗余了!也就是说B表中的零件图号,零件名称两个字段是毫无意义和毫无必要的。如果删除了这两个字段,那也就意味着不给zengtao同志提出一系列问题的机会。连机会都没有了,zengtao同志也就没法胡折腾了。

  为什么初学者容易搞出数据冗余的表结构呢?这通常与不理解或不知道数据库呈现数据的方法有关。实际上数据表主要的功能是存储数据,而真正呈现数据更多的是用查询。查询也叫数据视图,你可以把它看成观看数据表的镜子。查询有很强的功能,这些功能中就存在将多个表联系起来呈现数据的能力。

  就zengtao同志的数据表来讲,当我们删除B表中的零件图号,零件名称两个字段后,仍然能够透过查询来观察我们需要的数据。我们可以这样干:

  Select B.内部编号,B.客户编号,A.零件图号,A.零件名称,B.更改信息
   From B inner join A on B.客户编号=A.客户编号

  对了,这就是zengtao同志需要看到的结果。注意:是需要看到的!不是需要在B表中实际存在的。这个差异很大。大在什么地方呢?大在zengtao同志不需要再去为同步数据进行任何考虑。天下本无事,何必庸人自扰呢?

本帖被以下淘专辑推荐:

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖1 订阅订阅
推荐
发表于 2014-4-5 23:14:44 | 只看该作者
是否需要数据冗余,看实际情况吧。遵守3范式是牵一发动全身,实际应用中各有难处,关系型数据库也有其缺点。
回复 支持 1 反对 0

使用道具 举报

点击这里给我发消息

2#
发表于 2014-4-4 11:47:35 | 只看该作者
抢沙发
回复

使用道具 举报

点击这里给我发消息

3#
发表于 2014-4-4 11:55:01 | 只看该作者
呵呵。。刚开始我也是那么干的。总觉得一个表里越详细越细化更好。。现在就不那么做了。
4#
发表于 2014-4-4 13:37:01 | 只看该作者
这个问题我倒是从一开始学起就不存在(大约是因为以前存储空间不足,很注意避免重复数据),但是后来的实际操作中也发现了一些问题,其实也是各有千秋。
比如客户地址,客户名称,有时候是会变化的,而发货记录希望保存以前的名称地址以方便查询,如果发货记录仅保存客户ID,当这些记录变动时则只能查询到更新后的数据,虽然无伤大雅,但毕竟在数据呈现上有缺失
6#
发表于 2015-2-25 11:02:13 | 只看该作者
{:soso_e189:}
7#
发表于 2016-8-20 16:09:24 | 只看该作者
已经阅读,谢谢
8#
发表于 2016-8-20 16:10:38 | 只看该作者
已经阅读,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-4 02:59 , Processed in 0.108894 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表