移除不必要的資料 (重複的資料),是理想資料庫設計的其中一項目標。 為達成此目的,您可以將資料分割成許多不同主題的資料表,讓每項事實只呈現一次。 接著你提供 Access 一種方法,將分散的資訊重新整合起來——你透過將共用欄位放在相關的表格中來達成此目標。 但若要能夠正確地執行此步驟,必須先了解資料表之間的關聯,才能在資料庫中指定這些關聯。
本文內容
簡介
當你為資料庫中的每個主題建立表格後,還必須提供 Access 一個在需要時重新整合這些資訊的方法。 您可以在相關的資料表中放入共同欄位,同時定義不同資料表間的關聯以達成此目的。 接著您可以建立查詢、表單及報表,藉此同時顯示不同資料表的資訊。 舉例來說,此處所示的表單包含了來自數個資料表的資訊:
1. 此形式資訊來自客戶表......
2. ...命令表......
3. ...產品桌......
4. ...以及訂單細節表。
[付款人] 方塊中的 [客戶名稱] 是來自 [客戶] 資料表,[訂單識別碼] 和 [訂單日期] 的值來自 [訂單] 資料表,[產品名稱] 來自 [產品] 資料表,[單價] 與 [數量] 的值則來自 [訂單詳細資料] 資料表。 這些資料表會以各種方式互相連結,以便將資訊從各個資料表帶入此表單。
前述範例的資料表各欄位必須經過調整,才會顯示同筆訂單的資訊。 您可以利用資料表關聯進行此項調整。 資料表關聯會比對兩個資料表內,名稱相同之索引鍵欄位內的資料。 在大部分情況下,這些相符的欄位通常是某個資料表的主索引鍵 (提供每筆記錄的唯一識別碼),在其他資料表中則是外部索引鍵。 例如員工可以藉由建立 [員工] 資料表與 [訂單] 資料表之 [員工識別碼] 欄位間的關聯,而與其所負責的訂單建立關聯。
1. EmployeeID 同時出現在兩個資料表中——作為主鍵......
2. ...以及作為外鍵。
資料表關聯的類型
Access 中的資料表關聯有三種類型。
- 一對多關聯
我們以包含客戶資料表和訂單資料表的訂單追蹤資料庫為例。 客戶可以下許多筆訂單。 所以 [客戶] 資料表中的每位客戶在 [訂單] 資料表中可能會有很多筆訂單。 因此,[客戶] 資料表和 [訂單] 資料表之間的關聯就會是一對多關聯。
若要在資料庫設計中表示一對多關聯,可以將「單端」關聯的主索引鍵,新增到「多端」關聯的資料表中做為其欄位。 以此案例為例,您可以將新欄位 (即 [客戶] 資料表中的 [識別碼] 欄位) 加入 [訂單] 資料表,然後將其命名為「客戶識別碼」。 Access 接著可以使用訂單表中的顧客編號,為每筆訂單找到正確的顧客。 - 多對多關聯
現在讓我們來看看產品資料表和訂單資料表之間的關係。 單筆訂單可以包含多項產品。 另一方面,單項產品也可以出現在許多訂單上。 因此,[訂單] 資料表的每一筆記錄,在 [產品] 資料表中都可以包含許多筆記錄。 而 [產品] 資料表的每一筆記錄,在 [訂單] 資料表中也都可以有許多筆記錄。 此關係稱為多對多關聯。 請注意,若要偵測資料表之間現有的多對多關聯,必須同時考量關聯的兩端。
若要表示多對多關聯,必須建立稱為連接資料表的第三個資料表,將多對多關聯分成兩個一對多關聯。 將兩個資料表中的主索引鍵都插入到第三個資料表。 如此一來,第三個資料表就會記錄關聯中每一個出現的項目或執行個體。 例如,[訂單] 資料表及 [產品] 資料表具有多對多關聯,這種關聯是藉由建立兩個與 [訂單詳細資料] 資料表的一對多關聯來定義。 一個訂單可以含有多項產品,而每項產品可以出現在多筆訂單上。 - 一對一關聯
在一對一關聯中,第一個資料表的每一筆記錄在第二個資料表中只能有一筆相符的記錄,而第二個資料表中的每一筆記錄在第一個資料表中也只能有一筆相符的記錄。 這種類型的關聯並不常見,因為以這種方式所產生的資訊通常會儲存在同一個資料表。 基於安全考量,您可以使用一對一關聯將一個含有許多欄位的資料表分成幾個獨立的部分資料表,或者使用一對一關聯儲存只適用於主資料表子集的資訊。 當您真正辨識出這類關聯時,兩個資料表必須共用一個共同欄位。
為何需要建立資料表關聯?
您可以使用 [資料庫關聯圖] 視窗明確地建立資料表關聯,也可從 [欄位清單] 窗格拖曳欄位以達成此目的。 Access 利用資料表關係來決定在需要在資料庫物件中使用時,如何連接資料表。 以下是您在建立其他資料庫物件 (如表單、查詢及報表) 之前,必須先建立資料表關聯的理由。
- 資料表關聯會影響您的查詢設計
若要使用多個資料表的記錄,通常必須建立連接數個資料表的查詢。 執行查詢時,會將第一個資料表的主索引鍵欄位值,與第二個資料表的外部索引鍵欄位值進行比對。 例如,若要傳回列有每位客戶之所有訂單的資料列,必須建立以 [客戶識別碼] 欄位為基礎的查詢,藉此連接 [客戶] 資料表與 [訂單] 資料表。 您可以在 [資料庫關聯圖] 視窗中手動指定要連接的欄位。 但如果你已經在資料表之間定義了關係,Access 會根據現有的資料表關係提供預設的加入。 此外,如果你使用其中一個查詢精靈,Access 會利用你已定義的資料表關係收集的資訊,提供有根據的選擇,並預先填入適當的預設值。 - 資料表關聯會影響您的表單和報表設計
當你設計表單或報告時,Access 會利用你已定義的資料表關係所收集的資訊,提供有根據的選擇,並預先填入適當的預設值。 - 資料表關聯是用來執行強迫參考完整性、避免資料庫中發生記錄孤立的基礎。 孤立記錄是指所參考的記錄已經不存在的記錄,例如參考到某個不存在之客戶記錄的訂單記錄,就是一個孤立記錄。
設計資料庫時,您會將所有資訊分成幾個資料表,且每一個資料表都有一個主索引鍵。 接著在參考這些主索引鍵的關聯資料表中新增外部索引鍵。 這些成對的外部索引鍵與主索引鍵是資料表關聯與多重資料表查詢的基礎。 這些外鍵-主鍵參考必須保持同步非常重要。 參考完整性可以確保讓這些參考保持同步,而且必須依據資料表關聯。
了解參考完整性
設計資料庫時,可以將資料庫資訊分成許多不同主題的資料表,藉此盡量避免資料重複。 接著你讓 Access 有一種方式,可以透過將共用欄位放到相關資料表中,將資料重新整合起來。 例如,若要表示一對多關聯,可以將「單端」的資料表主索引鍵,新增到「多端」的資料表中做為額外欄位。 為了將資料重新組合,Access 會取「多」表中的值,並查詢「一」表中的對應值。 如此一來,「多端」資料表中的值即會參考「單端」資料表中對應的值。
假設 [貨運公司] 和 [訂單] 資料表之間存在一對多關聯,而您想要刪除某一家貨運公司的記錄。 如果想要刪除的貨運公司在 [訂單] 資料表中有一些訂單記錄,則當您將該貨運公司的記錄從 [貨運公司] 資料表中刪除之後,這些訂單記錄便會變成「孤立」記錄。 這些訂單記錄仍然留有貨運公司識別碼,但是該識別碼已經無效,因為所參考的記錄已經不存在。
參考完整性之目的,在避免出現孤立的記錄,並保持參考的同步,讓這種假設情況不會發生。
您可以在資料表關聯中啟用強迫參考完整性。 一旦強制執行,Access 會拒絕任何違反該資料表關係參照完整性的操作。 這表示 Access 會拒絕改變參考目標的更新,以及移除參考目標的刪除。 你可能有合理的需求需要更改某個貨主的主金鑰,因為該貨主在訂單表中有訂單。 在這種情況下,你真正需要的是 Access 能在一次操作中自動更新所有受影響的列。 這樣 Access 就能確保更新完整完成,避免資料庫處於不一致狀態,有些列更新,有些列未更新。 因此 Access 支援 Cascade Update Related Fields 選項。 當你強制執行參照完整性並選擇「 連鎖更新相關欄位 」選項,然後更新主鍵時,Access 會自動更新所有參考主鍵的欄位。
您偶爾可能也需要刪除資料列及其所有相關記錄 (例如,貨運公司的記錄及所有其相關的訂單)。 因此,Access 支援「 連鎖刪除相關紀錄 」選項。 當你強制執行參照完整性並選擇「 連鎖刪除相關紀錄 」選項,然後刪除關係中主鍵端的紀錄時,Access 會自動刪除所有參考主鍵的紀錄。
檢視資料表關聯
要查看你的資料表關係,請在資料庫工具標籤中點擊「關係」。「關係」視窗會打開並顯示所有現有的關係。 如果尚未定義資料表關係,且您是第一次開啟關係視窗,Access 會提示您向視窗新增資料表或查詢。
開啟資料庫關聯圖視窗
點選 檔案,點 選開啟,然後選擇並開啟資料庫。
在 [資料庫工具] 索引標籤上的 [資料庫關聯圖] 群組中,按一下 [資料庫關聯圖]。
在關係設計標籤中,關係群組中點選「所有關係」。
這會顯示您資料庫中所有已定義的關聯。 請注意,只有在 [導覽選項] 對話方塊中選取了 [顯示隱藏物件] 核取方塊後,才會顯示隱藏的資料表 (在資料表 [屬性] 對話方塊中選取了 [隱藏] 核取方塊的資料表) 及其關聯。
資料表關聯是以 [資料庫關聯圖] 視窗中資料表之間所畫的關聯線來表示。 支援關聯的共同欄位之間若出現細線,表示是未執行強迫參考完整性的關聯。 當您按一下關聯線選取該關聯時,選取的線會變粗。 若您針對此關聯執行強迫參考完整性,這條線在兩端都會變得更粗。 此外,在關聯的一端線較粗的部分上方會出現數字 1,而另一端線較粗的部分上方則會出現無限符號 (∞)。
您可以從作用中之 [資料庫關聯圖] 視窗的功能區中選取下列命令:
在「關係設計」標籤中,工具群組:
- 編輯:關係 打開 「編輯關係」 對話框。 當您選取關聯線時,您可以按一下 [編輯關聯],變更資料表的關聯。 您也可以按兩下關聯線。
- 清晰的佈局 將所有表格和關係從關係視窗中移除。 請注意,此命令只會隱藏資料表與關聯 ,而不會實際將其刪除。
- 關係報告 建立一份報告,顯示資料庫中的資料表和關係。 此報表只會顯示 [資料庫關聯圖] 視窗中所未隱藏的資料表與關聯。
在關係 設計 標籤的 關係群組中 :
- 新增表格 允許在關係視窗中選擇表格。
- 隱藏資料表:在 [資料庫關聯圖] 視窗中隱藏所選的資料表。
- 直接關聯:在 [資料庫關聯圖] 視窗中顯示所選資料表尚未顯示之所有關聯與關聯資料表。
- 所有關係 在「關係」視窗中顯示資料庫中所有的關係及相關資料表。 請注意,只有在 [導覽選項] 對話方塊中選取了 [顯示隱藏物件] 核取方塊後,才會顯示隱藏的資料表 (在資料表 [屬性] 對話方塊中選取了 [隱藏] 核取方塊的資料表) 及其關聯。
- 結束 關閉了「關係」視窗。 關閉 [資料庫關聯圖] 視窗。若您變更 [資料庫關聯圖] 視窗的版面配置,系統即會詢問您是否要儲存變更。