ACCESS:定義表之間的關(guān)系
來源:程序員人生 發(fā)布時(shí)間:2013-10-07 14:50:12 閱讀次數(shù):3942次
“關(guān)系”簡介
在Access數(shù)據(jù)庫中不同表中的數(shù)據(jù)之間都存在一種關(guān)系這種關(guān)系將數(shù)據(jù)庫里各張表中的每條數(shù)據(jù)記錄都和數(shù)據(jù)庫中唯一的主題相聯(lián)系使得對一個(gè)數(shù)據(jù)的操作都成為數(shù)據(jù)庫的整體操作正所謂“牽一發(fā)而動全身”
就拿上幾課建立的表來說吧“客戶信息表”中的“公司名稱”和“訂單信息表”中的“訂貨單位”所包含的值有很多是相同的因?yàn)楹灹擞唵蔚?ldquo;訂貨單位”肯定已經(jīng)是公司的客戶了這些客戶的名稱也被記載在“客戶信息表”的“公司名稱”字段中當(dāng)我們已知一個(gè)客戶的名稱時(shí)既可以通過“客戶信息表”知道它的“客戶信息”也可以通過“訂單信息表”了解它所簽訂的“訂單信息”所以說“公司名稱”作為紐帶將“客戶資料表”和“訂單信息表”中的相應(yīng)字段信息連接在了一起為了把數(shù)據(jù)庫中表之間的這種數(shù)據(jù)關(guān)系體現(xiàn)出來Access提供一種建立表與表之間“關(guān)系”的方法用這種方法建立了關(guān)系的數(shù)據(jù)只需要通過一個(gè)主題就可以調(diào)出來使用非常方便
當(dāng)我們在“客戶信息表”和“訂單信息表”中建立這樣的關(guān)系以后只需要看看“客戶信息表”在不增加表內(nèi)容的情況下就可以看到所有客戶的信息及其所有“訂單”的情況使這些數(shù)據(jù)一目了然

表之間的三種關(guān)系
在建立表之間的關(guān)系前我們還是要提一下“關(guān)系”的三種類型“一對一”“一對多”和“多對多”在Access中可以在兩個(gè)表之間直接建立“一對一”和“一對多”關(guān)系而“多對多”關(guān)系則要通過“一對多”關(guān)系來實(shí)現(xiàn)我們分別來說說這三種“關(guān)系”
首先是“一對一”關(guān)系比如下面的兩個(gè)表某學(xué)校學(xué)生月副食補(bǔ)助

和某學(xué)校學(xué)生月助學(xué)金

我們降這兩個(gè)表中的數(shù)據(jù)進(jìn)行匯總生成新的表“某學(xué)校學(xué)生月實(shí)發(fā)金額匯總”

由于姓名字段可能會出現(xiàn)重復(fù)的情況所以只有通過不可能出現(xiàn)重復(fù)的值的字段“學(xué)號”才能將這兩個(gè)表唯一地聯(lián)系起來保證“副食補(bǔ)貼”和“助學(xué)金”不至于錯(cuò)誤地發(fā)放這樣“月副食補(bǔ)助表”中的一個(gè)學(xué)號就只對應(yīng)“月助學(xué)金”中的一個(gè)學(xué)號絕對不會弄錯(cuò)這樣兩個(gè)表的關(guān)系很明顯就是“一對一”了
下面來看看“一對多”關(guān)系在“客戶信息表”和“訂單信息表”中“訂單信息表”中的“訂貨單位”字段和“客戶信息表”中的“公司名稱”字段中的值都是一樣的其實(shí)只有那些訂貨了的單位才是公司的客戶所以這兩個(gè)表之間是靠客戶公司的名字聯(lián)系在一起的但是每個(gè)客戶都可以訂很多份訂單所以在“客戶信息表”中的一個(gè)“公司名稱”就能對應(yīng)“訂單信息表”中的幾份“訂單”這樣的關(guān)系就是“一對多”
最后使“多對多”關(guān)系我們知道書店中有很多書同時(shí)一種書也可以在很多書店里找到這時(shí)“書”和“書店”的關(guān)系就是“多對多”關(guān)系了
怎樣在表之間建立關(guān)系
現(xiàn)在我們就開始在表之間建立“關(guān)系”首先單擊“工具”菜單下的“關(guān)系”命令彈出“關(guān)系”對話框上面還有一個(gè)“顯示表”對話框如下圖通過“顯示表”對話框可以把需要建立關(guān)系的“表”或“查詢”加到“關(guān)系”對話框中去

將兩個(gè)表“客戶信息表”和“訂單信息表”都選中單擊“添加”按鈕把它們都添加到“關(guān)系”對話框上單擊“關(guān)閉”按鈕把“顯示表”對話框關(guān)閉以后再需要打開它時(shí)只要在“關(guān)系”對話框上單擊鼠標(biāo)右鍵選擇“顯示表”命令就可以了

在“關(guān)系”對話框中只有“客戶信息表”和“訂單信息表”的字段列表怎么建立關(guān)系呢?其實(shí)表都是由字段構(gòu)成的表之間的關(guān)系也由字段來聯(lián)系讓不同表中的兩個(gè)字段建立聯(lián)系以后表中的其他字段自然也就可以通過這兩個(gè)字段之間的關(guān)系聯(lián)系在一起了也就是說在“客戶信息表”中的“公司名稱”和“訂單信息表”中的“訂貨單位”兩個(gè)字段之間建立關(guān)系就可以了先在“客戶信息表”字段列表中選中“公司名稱”項(xiàng)然后按住鼠標(biāo)左鍵并拖動鼠標(biāo)到“訂單信息表”中的“訂貨單位”項(xiàng)上松開鼠標(biāo)左鍵這時(shí)在屏幕上出現(xiàn)“編輯關(guān)系”對話框

這個(gè)對話框可以幫助我們編輯所建立的關(guān)系通過左面的列表框可以改變建立關(guān)系的兩個(gè)字段的來源可以單擊“新建”按鈕創(chuàng)建新的關(guān)系或者單擊“聯(lián)接類型”為聯(lián)接選擇一種聯(lián)接類型單擊“聯(lián)接類型”按鈕在彈出的新對話框中選擇第三項(xiàng)然后單擊“確定”按鈕就可以了回到“編輯關(guān)系”對話框后單擊“創(chuàng)建”按鈕

現(xiàn)在在兩個(gè)列表框間就出現(xiàn)了一條“折線”將“訂貨公司”和“公司名稱”兩個(gè)選項(xiàng)聯(lián)接在一起關(guān)閉“關(guān)系”對話框并保存對“關(guān)系”布局的修改在表間建立關(guān)系就是這樣的
“關(guān)系”與“子數(shù)據(jù)表”
打開“客戶信息表”你會發(fā)現(xiàn)這個(gè)表中增加了一些新的表它們是“客戶信息表”的子表也就是“訂單信息表”

在這種“一對多”的情況下完全可以通過“客戶信息表”中的“公司名稱”信息將這兩個(gè)表的內(nèi)容都串起來在主表中的每一個(gè)記錄下面都會帶著一個(gè)甚至幾個(gè)子表中的“訂單”記錄具有“一對一”關(guān)系的兩個(gè)表之間互為對方的“子表”
通常在建立表之間的關(guān)系以后Access會自動在主表中插入子表但這些子表一開始都是不顯示出來的在Access中讓子表顯示出來叫做“展開”子數(shù)據(jù)表讓子表隱藏叫做將子數(shù)據(jù)表“折疊”展開的時(shí)候方便查閱訂單信息而折疊起來以后有可以比較方便的管理“客戶信息表”
要“展開”子數(shù)據(jù)表只要用鼠標(biāo)單擊主表第一個(gè)字段前面一格對應(yīng)記錄的子記錄就“展開”了并且格中的小方框內(nèi)“加號”變成了“減號”如果再單擊一次就可以把這一格的子記錄“折疊”起來了小方框內(nèi)的“減號”也變回“加號”如果主表很大的話這樣一個(gè)一個(gè)地“展開”和“折疊”子數(shù)據(jù)表就顯得太麻煩了Access為我們提供了一種操作方式它可以一下子“展開”或“折疊”當(dāng)前數(shù)據(jù)表的所有子數(shù)據(jù)表打開一個(gè)帶有子數(shù)據(jù)表的表時(shí)在“格式”菜單“子數(shù)據(jù)表”項(xiàng)的子菜單中有三個(gè)命令“全部展開”“全部折疊”和“刪除”“全部展開”命令可以將主表中的所有子數(shù)據(jù)表都“展開”“全部折疊”命令可以將主表中的所有子數(shù)據(jù)表都“折疊”起來不需要在主表中顯示子數(shù)據(jù)表的這種方式來反映兩個(gè)表之間的“關(guān)系”時(shí)就可以使用“刪除”命令來把這種用子數(shù)據(jù)表顯示的方法刪除但這時(shí)兩個(gè)表的“關(guān)系”并沒有被刪除如果想恢復(fù)在主表上顯示“子數(shù)據(jù)表”的形式可以先打開主表比如“客戶信息表”單擊“插入”菜單下的“子數(shù)據(jù)表”命令彈出“插入子數(shù)據(jù)表”對話框如下圖

在列表框中選取“表”“訂單信息表”然后在“鏈接子字段”組合框中選取“訂貨單位”字段并在“鏈接主字段”組合框中選取“公司名稱”字段單擊“確定”按鈕就可以在主數(shù)據(jù)表“客戶信息表”中重新插入子數(shù)據(jù)表“訂單信息表”了必須要注意的是在任何一個(gè)數(shù)據(jù)表中插入子數(shù)據(jù)表都需要在兩個(gè)表之間建立“關(guān)系”如果這兩個(gè)表的“主鏈接字段”和“子鏈接字段”之間還沒有建立聯(lián)結(jié)的話在單擊“確定”按鈕插入“子數(shù)據(jù)表”的時(shí)候就會詢問是否要在這兩個(gè)表之間建立相應(yīng)的“關(guān)系”只有建立“關(guān)系”以后才能完成“插入子數(shù)據(jù)表”過程用這樣的方式在表之間建立“關(guān)系”不像在“關(guān)系”對話框中建立的“關(guān)系”那樣直觀所以我們提倡在關(guān)系對話框中建立好表與表之間的“關(guān)系”由Access自動地創(chuàng)建子數(shù)據(jù)表
結(jié)束語這一課通過“客戶信息表”和“訂單信息表”將表與表之間的“關(guān)系”展現(xiàn)在我們面前如果你已經(jīng)掌握了表的操作那就開始看下一課;如果你還沒有完全掌握“表”就將這四課再好好看一看因?yàn)楸硎菙?shù)據(jù)庫中最重要的一個(gè)部分了
實(shí)施參照完整性
在我們建立表之間的關(guān)系時(shí)窗口上有一個(gè)復(fù)選框“實(shí)施參照完整性”單擊它之后“級聯(lián)更新相關(guān)字段”和“級聯(lián)刪除相關(guān)字段”兩個(gè)復(fù)選框就可以用了
如果選定“級聯(lián)更新相關(guān)字段”復(fù)選框則當(dāng)更新父行(一對一一對多關(guān)系中“左”表中的相關(guān)行)時(shí)Access就會自動更新子行(一對一一對多關(guān)系中的“右”表中的相關(guān)行)選定“級聯(lián)刪除相關(guān)字段”后當(dāng)刪除父行時(shí)子行也會跟著被刪除而且當(dāng)選擇“實(shí)施參照完整性”后在原來折線的兩端會出現(xiàn)“”或“OO”符號在一對一關(guān)系中“”符號在折線靠近兩個(gè)表端都會出現(xiàn)而當(dāng)一對多關(guān)系時(shí)“OO”符號則會出現(xiàn)在關(guān)系中的右表對應(yīng)折線的一端上
設(shè)置了實(shí)施參照完整性就可以使我們在表中修改了一個(gè)記錄的時(shí)候不會影響到查詢的操作特別是在有很多表而且各個(gè)表之間都有關(guān)系聯(lián)接時(shí)“實(shí)施參照完整性”會帶來更多的方便
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈