技術(shù) 點(diǎn)
- 技術(shù)
- 點(diǎn)
- V幣
- 點(diǎn)
- 積分
- 21536
|
天下本無(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ú)事,何必庸人自擾呢?
|
|