Office中國(guó)論壇/Access中國(guó)論壇

 找回密碼
 注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

返回列表 發(fā)新帖
查看: 4761|回復(fù): 7
打印 上一主題 下一主題

[表] 【Access小品】天下本無(wú)事--數(shù)據(jù)冗余問(wèn)題概論

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2014-4-4 11:43:31 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  天下本無(wú)事,庸人自擾之。這句話(huà)大體說(shuō)得是沒(méi)事找事,無(wú)事生非的意思。

  Access的初學(xué)者最常干的庸人自擾的事情,就是設(shè)計(jì)很多的冗余字段,幾乎沒(méi)有初學(xué)者能避免干這件事情。所以說(shuō)了無(wú)數(shù)次不要這樣做都沒(méi)用,這個(gè)魔咒總是縈繞在初學(xué)者的上空,就像當(dāng)今的霧霾一樣難以治理。

  什么是冗余字段呢?看看今天版友zengtao同志的一個(gè)問(wèn)題中的實(shí)例。這個(gè)實(shí)例中有兩個(gè)表,數(shù)據(jù)表結(jié)構(gòu)如下:

  A表:客戶(hù)編號(hào)(主鍵),零件圖號(hào),零件名稱(chēng)

  B表:內(nèi)部編號(hào)(主鍵),客戶(hù)編號(hào)(外鍵),零件圖號(hào),零件名稱(chēng),更改信息

  zengtao同志的問(wèn)題是:如何通過(guò)窗體將A表的零件圖號(hào),零件名稱(chēng)傳入B表中?

  解決從A表向B表寫(xiě)入數(shù)據(jù),有很多的方法,解決起來(lái)非常簡(jiǎn)單?墒钱(dāng)你解決了zengtao同志的這個(gè)問(wèn)題后。過(guò)幾天,zengtao同志的還會(huì)提出另外一個(gè)問(wèn)題:如何刪除相同的記錄?如果你問(wèn)他什么是相同的記錄?是如何產(chǎn)生的?他一定會(huì)告訴你,客戶(hù)編號(hào)相同,零件圖號(hào)和零件名稱(chēng)重復(fù)的記錄就是相同記錄。由于沒(méi)有控制好錄入的校驗(yàn),所以搞重復(fù)了。這個(gè)問(wèn)題解決了,再過(guò)十天半個(gè)月,zengtao同志說(shuō)不定又會(huì)提出一個(gè)問(wèn)題:A表中某個(gè)客戶(hù)的零件圖號(hào)修改了,怎么對(duì)B表中的圖號(hào)做相同修改。繼續(xù)解決了這個(gè)問(wèn)題,zengtao同志還會(huì)沒(méi)完沒(méi)了得提出新的問(wèn)題。
  
  導(dǎo)致zengtao同志苦惱和糾結(jié)的根源在什么地方?答案是:數(shù)據(jù)冗余了!也就是說(shuō)B表中的零件圖號(hào),零件名稱(chēng)兩個(gè)字段是毫無(wú)意義和毫無(wú)必要的。如果刪除了這兩個(gè)字段,那也就意味著不給zengtao同志提出一系列問(wèn)題的機(jī)會(huì)。連機(jī)會(huì)都沒(méi)有了,zengtao同志也就沒(méi)法胡折騰了。

  為什么初學(xué)者容易搞出數(shù)據(jù)冗余的表結(jié)構(gòu)呢?這通常與不理解或不知道數(shù)據(jù)庫(kù)呈現(xiàn)數(shù)據(jù)的方法有關(guān)。實(shí)際上數(shù)據(jù)表主要的功能是存儲(chǔ)數(shù)據(jù),而真正呈現(xiàn)數(shù)據(jù)更多的是用查詢(xún)。查詢(xún)也叫數(shù)據(jù)視圖,你可以把它看成觀看數(shù)據(jù)表的鏡子。查詢(xún)有很強(qiáng)的功能,這些功能中就存在將多個(gè)表聯(lián)系起來(lái)呈現(xiàn)數(shù)據(jù)的能力。

  就zengtao同志的數(shù)據(jù)表來(lái)講,當(dāng)我們刪除B表中的零件圖號(hào),零件名稱(chēng)兩個(gè)字段后,仍然能夠透過(guò)查詢(xún)來(lái)觀察我們需要的數(shù)據(jù)。我們可以這樣干:

  Select B.內(nèi)部編號(hào),B.客戶(hù)編號(hào),A.零件圖號(hào),A.零件名稱(chēng),B.更改信息
   From B inner join A on B.客戶(hù)編號(hào)=A.客戶(hù)編號(hào)

  對(duì)了,這就是zengtao同志需要看到的結(jié)果。注意:是需要看到的!不是需要在B表中實(shí)際存在的。這個(gè)差異很大。大在什么地方呢?大在zengtao同志不需要再去為同步數(shù)據(jù)進(jìn)行任何考慮。天下本無(wú)事,何必庸人自擾呢?

本帖被以下淘專(zhuān)輯推薦:

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 分享淘帖1 訂閱訂閱
推薦
發(fā)表于 2014-4-5 23:14:44 | 只看該作者
是否需要數(shù)據(jù)冗余,看實(shí)際情況吧。遵守3范式是牽一發(fā)動(dòng)全身,實(shí)際應(yīng)用中各有難處,關(guān)系型數(shù)據(jù)庫(kù)也有其缺點(diǎn)。

點(diǎn)擊這里給我發(fā)消息

2#
發(fā)表于 2014-4-4 11:47:35 | 只看該作者
搶沙發(fā)
回復(fù)

使用道具 舉報(bào)

點(diǎn)擊這里給我發(fā)消息

3#
發(fā)表于 2014-4-4 11:55:01 | 只看該作者
呵呵。。剛開(kāi)始我也是那么干的。總覺(jué)得一個(gè)表里越詳細(xì)越細(xì)化更好!,F(xiàn)在就不那么做了。
4#
發(fā)表于 2014-4-4 13:37:01 | 只看該作者
這個(gè)問(wèn)題我倒是從一開(kāi)始學(xué)起就不存在(大約是因?yàn)橐郧按鎯?chǔ)空間不足,很注意避免重復(fù)數(shù)據(jù)),但是后來(lái)的實(shí)際操作中也發(fā)現(xiàn)了一些問(wèn)題,其實(shí)也是各有千秋。
比如客戶(hù)地址,客戶(hù)名稱(chēng),有時(shí)候是會(huì)變化的,而發(fā)貨記錄希望保存以前的名稱(chēng)地址以方便查詢(xún),如果發(fā)貨記錄僅保存客戶(hù)ID,當(dāng)這些記錄變動(dòng)時(shí)則只能查詢(xún)到更新后的數(shù)據(jù),雖然無(wú)傷大雅,但畢竟在數(shù)據(jù)呈現(xiàn)上有缺失
6#
發(fā)表于 2015-2-25 11:02:13 | 只看該作者
{:soso_e189:}
7#
發(fā)表于 2016-8-20 16:09:24 | 只看該作者
已經(jīng)閱讀,謝謝
8#
發(fā)表于 2016-8-20 16:10:38 | 只看該作者
已經(jīng)閱讀,謝謝
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則

QQ|站長(zhǎng)郵箱|小黑屋|手機(jī)版|Office中國(guó)/Access中國(guó) ( 粵ICP備10043721號(hào)-1 )  

GMT+8, 2024-10-23 08:37 , Processed in 0.123742 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表