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