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