如何定義Acess各表之間的關係

2022-03-17 09:02:51 字數 3557 閱讀 4924

「關係」簡介

在access資料庫中,不同表中的資料之間都存在一種關係,這種關係將資料庫裡各張表中的每條資料記錄都和資料庫中唯一的主題相聯絡,使得對乙個資料的操作都成為資料庫的整體操作,正所謂「牽一髮而動全身」。

就拿上幾課建立的表來說吧,「客戶資訊表」中的「公司名稱」和「訂單資訊表」中的「訂貨單位」所包含的值有很多是相同的。因為簽了訂單的「訂貨單位」肯定已經是公司的客戶了,這些客戶的名稱也被記載在「客戶資訊表」的「公司名稱」欄位中。當我們已知乙個客戶的名稱時,既可以通過「客戶資訊表」知道它的「客戶資訊」,也可以通過「訂單資訊表」了解它所簽訂的「訂單資訊」,所以說「公司名稱」作為紐帶將「客戶資料表」和「訂單資訊表」中的相應字段資訊連線在了一起,為了把資料庫中表之間的這種資料關係體現出來,access提供一種建立表與表之間「關係」的方法。用這種方法建立了關係的資料只需要通過乙個主題就可以調出來使用,非常方便。

當我們在「客戶資訊表」和「訂單資訊表」中建立這樣的關係以後,只需要看看「客戶資訊表」,在不增加表內容的情況下,就可以看到所有客戶的資訊及其所有「訂單」的情況,使這些資料一目了然。

access:定義表之間的關係 三聯

表之間的三種關係

在建立表之間的關係前,我們還是要提一下「關係」的三種型別「一對一」、「一對多」和「多對多」。在access中,可以在兩個表之間直接建立「一對一」和「一對多」關係,而「多對多」關係則要通過「一對多」關係來實現。我們分別來說說這三種「關係」。

首先是「一對一」關係,比如下面的兩個表:某學校學生月副食補助:

和某學校學生月助學金:

我們降這兩個表中的資料進行彙總生成新的表:「某學校學生月實發金額彙總」:

由於姓名字段可能會出現重複的情況,所以只有通過不可能出現重複的值的字段「學號」,才能將這兩個表唯一地聯絡起來,保證「副食補貼」和「助學金」不至於錯誤地發放,這樣「月副食補助表」中的乙個學號就只對應「月助學金」中的乙個學號,絕對不會弄錯。這樣兩個表的關係很明顯就是「一對一」了。

下面來看看「一對多」關係。在「客戶資訊表」和「訂單資訊表」中,「訂單資訊表」中的「訂貨單位」欄位和「客戶資訊表」中的「公司名稱」欄位中的值都是一樣的。其實只有那些訂貨了的單位才是公司的客戶,所以這兩個表之間是靠客戶公司的名字聯絡在一起的。但是每個客戶都可以訂很多份訂單。所以在「客戶資訊表」中的乙個「公司名稱」就能對應「訂單資訊表」中的幾份「訂單」。這樣的關係就是「一對多」。

最後使「多對多」關係,我們知道,書店中有很多書,同時一種書也可以在很多書店裡找到。這時「書」和「書店」的關係就是「多對多」關係了。

怎樣在表之間建立關係

現在我們就開始在表之間建立「關係」,首先單擊「工具」選單下的「關係」命令,彈出「關係」對話方塊,上面還有乙個「顯示表」對話方塊如下圖,通過「顯示表」對話方塊可以把需要建立關係的「表」或「查詢」加到「關係」對話方塊中去。

將兩個表「客戶資訊表」和「訂單資訊表」都選中,單擊「新增」按鈕把它們都新增到「關係」對話方塊上,單擊「關閉」按鈕把「顯示表」對話方塊關閉。以後再需要開啟它時,只要在「關係」對話方塊上單擊滑鼠右鍵,選擇「顯示表」命令就可以了。

在「關係」對話方塊中只有「客戶資訊表」和「訂單資訊表」的字段列表。怎麼建立關係呢?其實表都是由字段構成的,表之間的關係也由字段來聯絡。讓不同表中的兩個字段建立聯絡以後,表中的其他字段自然也就可以通過這兩個字段之間的關係聯絡在一起了。也就是說在「客戶資訊表」中的「公司名稱」和「訂單資訊表」中的「訂貨單位」兩個字段之間建立關係就可以了。先在「客戶資訊表」字段列表中選中「公司名稱」項,然後按住滑鼠左鍵並拖動滑鼠到「訂單資訊表」中的「訂貨單位」項上,鬆開滑鼠左鍵,這時在螢幕上出現「編輯關係」對話方塊。

這個對話方塊可以幫助我們編輯所建立的關係,通過左面的列表框可以改變建立關係的兩個欄位的**。可以單擊「新建...」按鈕建立新的關係,或者單擊「聯接型別」為聯接選擇一種聯接型別。單擊「聯接型別」按鈕,在彈出的新對話方塊中選擇第三項,然後單擊「確定」按鈕就可以了。回到「編輯關係」對話方塊後單擊「建立」按鈕。

現在在兩個列表框間就出現了一條「折線」,將「訂貨公司」和「公司名稱」兩個選項聯接在一起。關閉「關係」對話方塊,並儲存對「關係」布局的修改。在表間建立關係就是這樣的。

「關係」與「子資料表」

開啟「客戶資訊表」,你會發現這個表中增加了一些新的表,它們是「客戶資訊表」的子表,也就是「訂單資訊表」。

在這種「一對多」的情況下,完全可以通過「客戶資訊表」中的「公司名稱」資訊將這兩個表的內容都串起來。在主表中的每乙個記錄下面都會帶著乙個甚至幾個子表中的「訂單」記錄。具有「一對一」關係的兩個表之間互為對方的「子表」。

通常在建立表之間的關係以後,access會自動在主表中插入子表。但這些子表一開始都是不顯示出來的。在access中,讓子表顯示出來叫做「展開」子資料表,讓子表隱藏叫做將子資料表「摺疊」。展開的時候方便查閱訂單資訊,而摺疊起來以後有可以比較方便的管理「客戶資訊表」。

要「展開」子資料表,只要用滑鼠單擊主表第乙個字段前面一格,對應記錄的子記錄就「展開」了,並且格中的小方框內「加號」變成了「減號」。如果再單擊一次,就可以把這一格的子記錄「摺疊」起來了,小方框內的「減號」也變回「加號」。如果主表很大的話,這樣乙個乙個地「展開」和「摺疊」子資料表就顯得太麻煩了,access為我們提供了一種操作方式,它可以一下子「展開」或「摺疊」當前資料表的所有子資料表。開啟乙個帶有子資料表的表時,在「格式」選單「子資料表」項的子選單中,有三個命令「全部展開」、「全部摺疊」和「刪除」,「全部展開」命令可以將主表中的所有子資料表都「展開」,「全部摺疊」命令可以將主表中的所有子資料表都「摺疊」起來。不需要在主表中顯示子資料表的這種方式來反映兩個表之間的「關係」時,就可以使用「刪除」命令來把這種用子資料表顯示的方法刪除。但這時兩個表的「關係」並沒有被刪除。如果想恢復在主表上顯示「子資料表」的形式,可以先開啟主表,比如「客戶資訊表」,單擊「插入」選單下的「子資料表」命令,彈出「插入子資料表」對話方塊如下圖:

在列表框中選取「表」----「訂單資訊表」,然後在「鏈結子欄位」組合框中選取「訂貨單位」字段,並在「鏈結主欄位」組合框中選取「公司名稱」字段,單擊「確定」按鈕就可以在主資料表「客戶資訊表」中重新插入子資料表「訂單資訊表」了。必須要注意的是在任何乙個資料表中插入子資料表都需要在兩個表之間建立「關係」,如果這兩個表的「主鏈結字段」和「子鏈結字段」之間還沒有建立聯結的話,在單擊「確定」按鈕插入「子資料表」的時候就會詢問是否要在這兩個表之間建立相應的「關係」,只有建立「關係」以後,才能完成「插入子資料表」過程。用這樣的方式在表之間建立「關係」不像在「關係」對話方塊中建立的「關係」那樣直觀。所以我們提倡在關係對話方塊中建立好錶與表之間的「關係」,由access自動地建立子資料表。

結束語:這一課通過「客戶資訊表」和「訂單資訊表」將表與表之間的「關係」展現在我們面前,如果你已經掌握了表的操作,那就開始看下一課;如果你還沒有完全掌握「表」,就將這四課再好好看一看,因為表是資料庫中最重要的乙個部分了。

實施參照完整性

在我們建立表之間的關係時,視窗上有乙個核取方塊「實施參照完整性」,單擊它之後,「級聯更新相關字段」和「級聯刪除相關字段」兩個核取方塊就可以用了。

如果選定「級聯更新相關字段」核取方塊,則當更新父行(一對

一、一對多關係中「左」表中的相關行)時,access就會自動更新子行(一對

一、一對多關係中的「右」表中的相關行),選定「級聯刪除相關字段」後,當刪除父行時,子行也會跟著被刪除。而且當選擇「實施參照完整性」後,在原來折線的兩端會出現「1」或「oo」符號,在一對一關係中「1」符號在折線靠近兩個表端都會出現,而當一對多關係時「oo」符號則會出現在關係中的右表對應折線的一端上。

CGI,FASTcgi,PHP fpm之間的關係

剛開始對這個問題我也挺糾結的,看了 http權威指南 後,感覺清晰了不少。首先,cgi是幹嘛的?cgi是為了保證web server傳遞過來的資料是標準格式的,方便cgi程式的編寫者。web server 比如說nginx 只是內容的分發者。比如,如果請求 index.html,那麼web serv...

配置apache php mysql之間的關係

1 index.php檔案放入 usr local apache2 htdocs 目錄下 其中index.php裡面內容為 phpinfo dbc mysql connect 127.0.0.1 root win2009 if dbc else mysql close dbc2 new mysqli...

usb的endpoint,pipe之間的關係

端點 endpoint 每乙個usb裝置在主機看來就是乙個端點的結合,主機只能通過端點與裝置進行通訊,以使用裝置的功能 每乙個端點實際上就是乙個一定大小的資料緩衝區。管道 pipe 乙個usb管道是驅動程式的乙個資料區緩衝與乙個外設端點的連線,它代表了一種在兩者之間移動資料的能力。一旦裝置被配置,管...