- Access 2013數據庫應用案例課堂
- 劉玉紅
- 7747字
- 2021-03-19 18:23:43
4.5 建立表之間的關系
良好的數據庫設計目標之一就是消除數據冗余(重復數據)。要實現這一目標,可將數據拆分為多個基于主題的表,以使每個記錄只顯示一次。然后,可通過在相關表中放置公共字段將拆分的信息組合到一起。而為了把不同表的數據組合在一起,必須建立表間的關系。
在Access 2013中,有3種類型的表關系。
1. 一對一關系
在一對一關系中,第一個表中的每條記錄在第二個表中只有一個匹配記錄,而第二個表中的每條記錄在第一個表中也只有一個匹配記錄。這兩個表通常是基于同一個主題。這種關系并不常見,因為多數與此方式相關的信息都存儲在一個表中。事實上,一對一關系通常都應該避免,因為它違反了規范化的規則。但在某些特殊情況下,可以使用一對一關系將一個表分成許多字段,或出于安全原因隔離表中的部分數據,或存儲僅應用于主表中子集的信息。創建此類關系時,這兩個表必須共享一個公共字段,并且該公共字段必須具有唯一索引。
2. 一對多關系
假設有一個訂單跟蹤數據庫,其中包含“客戶”表和“訂單”表??蛻艨梢院炇鹑我鈹盗康挠唵?。因此,“客戶”表和“訂單”表之間的關系就是一對多關系。
要在數據庫設計中表示一對多關系,需要設置表關系“一方”的主鍵,并將其作為額外公共字段添加到關系“多方”的表中。例如在訂單跟蹤數據庫中,需要將一個字段(即“客戶”表中的主鍵“客戶ID”字段)添加到“訂單”表中。然后,Access就可以使用“訂單”表中的“客戶ID”號來查找每個訂單的正確客戶。
3. 多對多關系
要表示多對多關系,用戶需要創建第三個表,該表通常稱為連接表,它將多對多關系劃分為兩個一對多關系。用戶可以將這兩個表的主鍵都插入到第三個表中,或者將第三個表的主鍵插入到這兩個表中。由此可知,第三個表可以作為一對多關系中的“一方”,也可以作為“多方”。
例如,在一個訂單跟蹤數據庫中,還包含“訂單納稅狀態”表,一個訂單納稅狀態可以對應多張訂單表,它與“訂單”表是一對多的關系,而“客戶”表與“訂單”表也是一對多的關系。因此我們可以得出以下結論:“訂單納稅狀態”表和“客戶”表是多對多的關系,而“訂單”表即是第三個表(即連接表),它作為一對多關系中的“多方”連接這兩個表,創建表關系時,用戶需要將這兩個表的主鍵字段插入到“訂單”表中,如圖4-70所示。

圖4-70 “訂單納稅狀態”表和“客戶”表是多對多的關系
若在訂單跟蹤數據庫中,還包含“客戶訪問”表,一個客戶可以多次訪問公司,則“客戶”表與“客戶訪問”表是一對多的關系。我們可以得出以下結論:“訂單”表和“客戶訪問”表是多對多的關系,而“客戶”表即是第三個表,它作為一對多關系中的“一方”連接這兩個表。創建表關系時,用戶需要將“客戶”表的主鍵字段插入到這兩個表中,如圖4-71所示。

圖4-71 “訂單”表和“客戶訪問”表是多對多的關系
4.5.1 表的索引
索引是對數據庫表中一列或多列的值進行排序的一種結構,使用索引可快速訪問數據庫表中的特定信息。索引好比是一本書的目錄,通過它可以快速鎖定需要的章節。創建索引可以大大提高系統的性能。當然其也有缺點,它增加了數據庫的存儲空間耗用,并且當對表中的數據進行添加、刪除或修改的時候,索引也要動態地維護,這樣就降低了數據的維護速度。
在創建索引的時候,應考慮如何選用合適的列創建索引。一般來說,用戶可以參考以下幾點創建索引。
(1)在經常需要搜索的列上創建索引,這樣可以加快搜索的速度。
(2)在作為主鍵的列上創建索引,這樣可以強制該列的唯一性和組織表中數據的排列結構。
(3)在經常用的鏈接的列上創建索引,這些列主要是一些外鍵,可以加快鏈接的速度。
(4)在經常需要根據范圍進行搜索的列上創建索引,因為索引已經排序,其指定的范圍是連續的。
(5)在經常需要排序的列上創建索引,因為索引已經排序,這樣查詢可以利用索引的排序,加快排序查詢時間。
索引分為單字段索引和多字段索引。如果用戶經常同時依據兩個或更多個字段進行搜索或排序,則可以為該字段組合創建索引。創建多字段索引時,需要設置字段的次序。如果在第一個字段中的記錄具有重復值,則Access會接著依據為索引定義的第二個字段來進行排序,以此類推。而在一個多字段索引中最多可以包含10個字段。
下面通過兩種方法來創建單字段索引。
1. 通過字段屬性列表框創建單字段索引
具體操作步驟如下。
step 01 啟動Access 2013,打開“應用”數據庫,并進入“客戶”表的【設計視圖】界面。
step 02 選中“客戶ID”字段,在字段屬性列表框中單擊【索引】選項右側的下拉按鈕,彈出索引列表,包括【無】、【有(有重復)】和【有(無重復)】3個選項,如圖4-72所示。

圖4-72 索引列表
提示
【無】選項表示不在此字段上創建索引(或刪除現有索引);
【有(有重復)】選項表示在此字段上創建索引;
【有(無重復)】選項表示在此字段上創建唯一索引。
step 03 “客戶ID”字段為主鍵,且不會重復,因此選擇【有(無重復)】選項,即可為該字段創建索引,如圖4-73所示。

圖4-73 選擇【有(無重復)】選項
step 04 使用同樣的方法,設置“客戶姓名”字段索引屬性為“有(有重復)”。
2. 通過索引設計器對話框創建單字段索引
下面為“客戶”表的“聯系電話”字段創建索引。具體操作步驟如下。
step 01 啟動Access 2013,打開“應用”數據庫,并進入“客戶”表的【設計視圖】界面。
step 02 切換到【設計】選項卡,單擊【顯示/隱藏】組中的【索引】按鈕,如圖4-74所示。

圖4-74 單擊【顯示/隱藏】組中的【索引】按鈕
step 03 彈出索引設計器,用戶可以看到,Access已經自動為主鍵“客戶ID”字段創建了索引,如圖4-75所示。

圖4-75 索引設計器
step 04 在【索引名稱】列中輸入新建的索引名稱“聯系電話”,單擊【字段名稱】列右側的下拉按鈕,在彈出的下拉列表中選擇“客戶姓名”字段,在【排序次序】列中選擇【升序】選項,即完成使用索引設計器創建索引的操作,如圖4-76所示。

圖4-76 創建“聯系電話”索引
在索引設計器下方,有【主索引】、【唯一索引】和【忽略空值】3個選項。利用這3個選項,用戶還可以設計其他的索引屬性。例如,若【主索引】選擇【是】選項,表示設計該字段為主鍵,若【唯一索引】選擇【是】選項,表示此字段中的值是唯一的,若【忽略空值】選擇【是】選項,表示該索引將排除值為空的記錄。
提示
數據類型為OLE對象或附件的字段不能創建索引。另外,Access還會自動為主鍵創建唯一索引。
4.5.2 創建表關系
表關系有助于合并兩個不同表中的數據。每個關系由兩個表中的字段組成,包含相對應的數據。Access中有3種不同的表關系,與此相對應的,創建表關系也應分為3種,即建立一對一表關系、一對多表關系以及多對多表關系。
1. 創建一對一表關系
一對一表關系在實際中運用得較少,但在某些情況下,還是非常有用的。假如在數據庫中,有“客戶”表和“原始信息”表,在這兩個表中都是某個客戶相關的信息,而且客戶名單是完全一致的,因此可以建立一對一表關系,將這兩個表合二為一。具體操作步驟如下。
step 01 啟動Access 2013,打開“應用”數據庫。切換到【數據庫工具】選項卡,單擊【關系】組中的【關系】按鈕,如圖4-77所示。

圖4-77 單擊【數據庫工具】選項卡的【關系】按鈕
step 02 此時進入【關系】工作窗口,用戶可在此窗口中創建表關系,如圖4-78所示。

圖4-78 【關系】工作窗口
step 03 切換到【設計】選項卡,單擊【關系】組中的【顯示表】按鈕,如圖4-79所示;或者在【關系】工作窗口中,右擊,在彈出的快捷菜單中選擇【顯示表】命令,如圖4-80所示。

圖4-79 單擊【關系】組中的【顯示表】按鈕

圖4-80 選擇【顯示表】命令
step 04 打開【顯示表】對話框。在此對話框中,用戶可以看到,共有【表】、【查詢】和【兩者都有】3個選項卡,如圖4-81所示。

圖4-81 【顯示表】對話框
step 05 在【表】選項卡中,系統顯示出當前“應用”數據庫下包含的所有表對象。選擇“客戶”表,單擊【添加】按鈕,可將該表添加到【關系】工作窗口中,如圖4-82所示。

圖4-82 選擇“客戶”表
step 06 使用同樣的方法,添加“原始信息”表到【關系】工作窗口中。操作完成后,單擊【關閉】按鈕,此時【關系】工作窗口中將出現這兩個表的相關信息,如圖4-83所示。

圖4-83 【關系】工作窗口
提示
用戶也可以在導航窗格中選中這兩個表,按住左鍵不放,將其拖動到【關系】工作窗口中。
step 07 選中“客戶”表的“客戶ID”字段,按住左鍵不放將其拖到“原始信息”表的“客戶ID”字段處,松開鼠標后,彈出【編輯關系】對話框。在【關系類型】欄中可看到,當前的類型為“一對一”,如圖4-84所示。

圖4-84 【編輯關系】對話框
step 08 單擊【創建】按鈕,返回到工作窗口中,可以看到兩個表的“客戶ID”字段之間出現一條關系連接線,如圖4-85所示。

圖4-85 關系連接線
step 09 創建完成后,單擊【保存】按鈕,即可保存創建的表關系。在左側導航窗格中,雙擊打開“客戶”表,可以看到,每條記錄的行首出現了標記。單擊該標記,Access以子表的形式顯示出每個客戶的原始信息,如圖4-86所示。

圖4-86 “客戶”表的子表
step 10 同理,在左側導航窗格中,雙擊打開“原始信息”表,可以看到,每條記錄的行首也出現了標記。單擊該標記,Access以子表的形式顯示出每個客戶的詳細信息。至此,即完成創建一對一表關系的操作,如圖4-87所示。

圖4-87 “原始信息”表的子表
2. 創建一對多表關系
一對多表關系在數據庫中最為常見。在關系“一方”的字段必須具有唯一索引,該字段通常為主鍵,該表稱為主表。關系“多方”的字段不應具有唯一索引,它可以有索引,但必須允許重復,該字段通常稱為表關系的“外鍵”。當一個字段具有唯一索引而其他字段不具有唯一索引時,Access將創建一對多關系。
假設在訂單跟蹤數據庫中,有“客戶”表和“訂單”表,一個客戶可以有多個訂單,而一個訂單只能對應一個客戶,因此,在一對多的表關系中,關系“一方”應為“客戶”表,而關系“多方”應為“訂單”表。下面就以這兩個表為例,詳細介紹如何創建一對多表關系。具體操作步驟如下。
step 01 打開“應用”數據庫,進入“客戶”表和“訂單”表的【數據表視圖】界面。
step 02 切換到【表】選項卡,單擊【關系】組中的【關系】按鈕,如圖4-88所示,可進入【關系】工作窗口。

圖4-88 單擊【表】選項卡中的【關系】按鈕
提示
若進入的是“客戶”表的【設計視圖】界面,切換到【設計】選項卡,單擊【關系】組中的【關系】按鈕,同樣可以進入【關系】工作窗口,如圖4-89所示。

圖4-89 單擊【設計】選項卡中的【關系】按鈕
step 03 在【關系】工作窗口中,用戶可看到之前創建的表關系,如圖4-90所示。

圖4-90 創建的表關系
step 04 為便于演示,選中“原始信息”表,切換到【設計】選項卡,單擊【關系】組中的【隱藏表】按鈕,將該表隱藏起來,如圖4-91所示。

圖4-91 單擊【隱藏表】按鈕
step 05 隱藏以后,單擊【關系】組中的【顯示表】按鈕,彈出【顯示表】對話框。選中“訂單”表,單擊【添加】按鈕,如圖4-92所示。

圖4-92 【顯示表】對話框
step 06 添加完成后,單擊【關閉】按鈕,返回到【關系】工作窗口。用戶可以看到“訂單”表已添加成功,如圖4-93所示。

圖4-93 添加“訂單”表
step 07 選中“客戶”表的“客戶ID”字段,按住鼠標左鍵不放將其拖動到“訂單”表的“客戶ID”字段處,松開鼠標后,彈出【編輯關系】對話框。在【關系類型】欄中可看到,當前的類型為【一對多】,如圖4-94所示。

圖4-94 【編輯關系】對話框
step 08 單擊【創建】按鈕,返回到【關系】工作窗口中,可以看到這兩個表的“客戶ID”字段之間出現一條關系連接線,如圖4-95所示。

圖4-95 關系連接線
step 09 創建完成后,單擊【保存】按鈕,保存創建的表關系。切換到“客戶”表的【數據表視圖】界面,可以看到,每條記錄的行首出現了標記。單擊該標記,Access以子表的形式顯示出每個客戶的訂單信息。至此,即完成創建一對多表關系的操作,如圖4-96所示。

圖4-96 “客戶”表的子表
提示
在一對多表關系中,只有關系“一方”的數據表才能查看子表的信息。關系“多方”的數據表是無法出現子表的。
3. 創建多對多表關系
用戶既可以如圖4-70和圖4-71所示來表示多對多表關系,也可以直接創建多對多表關系。下面為“客戶訪問”表和“訂單”表創建多對多表關系。具體操作步驟如下。
step 01 打開“應用”數據庫,切換到【數據庫工具】選項卡,單擊【關系】組中的【關系】按鈕,進入【關系】工作窗口。用戶在其中可以查看當前數據庫中已存在的表關系,如圖4-97所示。

圖4-97 “應用”數據庫的表關系
step 02 切換到【設計】選項卡,單擊【關系】組中的【顯示表】按鈕,彈出【顯示表】對話框,將“客戶訪問”表添加到【關系】工作窗口中,如圖4-98所示。

圖4-98 添加“客戶訪問”表
step 03 選中“客戶訪問”表的“客戶ID”字段,按住鼠標左鍵不放將其拖動到“訂單”表的“客戶ID”字段處,松開鼠標后,彈出【編輯關系】對話框,如圖4-99所示。

圖4-99 【編輯關系】對話框
step 04 單擊【創建】按鈕,返回到【關系】工作窗口中,可以看到這兩個表的“客戶ID”字段之間出現一條關系連接線,如圖4-100所示。

圖4-100 關系連接線
step 05 創建完成后,單擊【保存】按鈕,即可保存創建的表關系。至此,就完成了創建多對多表關系的操作。
請注意,在數據庫實際應用中,用戶通常用兩個一對多關系來表示多對多關系,而不是直接創建兩個表的多對多關系。
4.5.3 查看與編輯表關系
表關系創建完成后,用戶可對表關系進行查看、編輯、隱藏或刪除等操作。這一系列的操作都可以通過【設計】選項卡中的【工具】和【關系】組來實現,如圖4-101所示。

圖4-101 【工具】組和【關系】組
具體操作步驟如下。
step 01 打開“應用”數據庫,進入【關系】工作窗口。
step 02 單擊“客戶”表和“原始信息”表之間的關系連接線,此時連接線顯示得較粗,表示其為選中狀態,如圖4-102所示。

圖4-102 選中關系連接線
step 03 切換到【設計】選項卡,單擊【工具】組中的【編輯關系】按鈕,彈出【編輯關系】對話框。在該對話框中,可以設置實施參照完整性、連接類型和新建表關系等,如圖4-103所示。

圖4-103 【編輯關系】對話框
提示
雙擊關系連接線,或者右擊,在彈出的快捷菜單中選擇【編輯關系】命令,同樣可以打開【編輯關系】對話框。
step 04 單擊【工具】組中的【清除布局】按鈕,彈出Microsoft Access對話框,提示是否將關系窗口的布局清除。若單擊【是】按鈕,將會刪除當前創建的所有表關系,如圖4-104所示。

圖4-104 Microsoft Access對話框
step 05 單擊【工具】組中的【關系報告】選項,Access將自動生成表關系的報表,并進入打印預覽模式,用戶可打印該報表,如圖4-105所示。

圖4-105 表關系的報表
step 06 選中“訂單”表,單擊【關系】組中的【隱藏表】按鈕,可在【關系】工作窗口中隱藏該表,如圖4-106所示。

圖4-106 隱藏“訂單”表
step 07 選中“客戶”表,單擊【關系】組中的【直接關系】按鈕,可以顯示并查看所有與該表有直接關系的表。即使這些表被隱藏,此時也會顯示出來。例如這里顯示出隱藏的“訂單”表,如圖4-107所示。

圖4-107 顯示直接關系
step 08 單擊【關系】組中的【所有關系】按鈕,用戶可以查看“應用”數據庫中所有的表關系,如圖4-108所示。

圖4-108 “應用”數據庫中所有的表關系
step 09 單擊【關系】組中的【關閉】按鈕,退出【關系】工作窗口,如果窗口中創建的表關系沒有保存,則會彈出對話框,提示是否保存,如圖4-109所示。

圖4-109 提示對話框
step 10 若要刪除“客戶”表和“訂單”表的表關系,在【關系】工作窗口中刪除關系連接線即可。首先選中這兩個表的關系連接線(選中狀態下顯示得較粗),按Delete鍵,彈出Microsoft Access對話框,單擊【是】按鈕,即可刪除表關系,如圖4-110所示?;蛘哌x中關系連接線后,右擊,在彈出的快捷菜單中選擇【刪除】命令,也可刪除表關系,如圖4-111所示。

圖4-110 Microsoft Access對話框

圖4-111 選擇【刪除】命令
提示
刪除表關系時,如果表關系中涉及的任何一個表處于打開狀態,或正在被其他程序使用,則用戶無法刪除該表關系。
4.5.4 實施參照完整性
Access允許數據庫實施參照完整性規則,從而保證數據不會丟失或遭到破壞。例如,“客戶”表和“訂單”表之間存在一對多關系,若想要刪除一個客戶,如果要刪除的客戶在“訂單”表中具有訂單,則刪除該客戶記錄后,這些訂單將成為“孤立記錄”。這些訂單仍然包含客戶ID,但該ID不再有效,因為它所參照的記錄已不存在。由此而知,使用參照完整性規則的目的就是防止出現孤立記錄并保持參照同步。
實施參照完整性的方法是為表關系啟用參照完整性。實施后,Access將拒絕違反表關系參照完整性的任何操作。下面在“應用”數據庫中對表關系實施參照完整性。具體操作步驟如下。
step 01 打開“應用”數據庫,切換到【數據庫工具】選項卡,單擊【關系】組中的【關系】按鈕,如圖4-112所示,進入【關系】工作窗口。

圖4-112 單擊【關系】組中的【關系】按鈕
step 02 切換到【設計】選項卡,單擊【關系】組中的【所有關系】按鈕,顯示出“應用”數據庫的所有表關系,如圖4-113所示。

圖4-113 “應用”數據庫中的所有表關系
step 03 雙擊“客戶”表和“客戶訪問”表之間的關系連接線,彈出【編輯關系】對話框,選中【實施參照完整性】復選框,單擊【確定】按鈕,如圖4-114所示。

圖4-114 【編輯關系】對話框
step 04 返回到【關系】工作窗口,可以看到,這兩個表的關系連接線上分別以和
符號標記出一對多的表關系,如圖4-115所示。

圖4-115 關系連接線上的符號
當用戶對數據庫實施參照完整性以后,系統將會嚴格限制主表和中間表的記錄修改和更新操作。限制規則如下。
●如果在主表的主鍵字段中不存在某條記錄,則不能在相關表的外鍵字段中輸入該記錄,否則會創建孤立記錄。即不允許在“多方”的字段中輸入“一方”主鍵中不存在的值。
●當“多方”的表中含有和主表相匹配的記錄時,不能從主表中刪除這條記錄。例如,如果在“訂單”表中有某客戶的訂單,則不能從“客戶”表中刪除該客戶的記錄。但是如果在【編輯關系】對話框中選中【級聯刪除相關記錄】復選框,則用戶在進行刪除操作時,可以刪除“客戶”表中某個客戶的記錄,但是系統會同時刪除“訂單”表中該客戶所有的訂單記錄,從而保證數據的完整性。
●當“多方”的表中含有和主表相匹配的記錄時,不可從主表中改變相應的主鍵值。例如,如果在“訂單”表中有某客戶的訂單,則不能從“客戶”表中改變該客戶的客戶ID值。但是如果在【編輯關系】對話框中選中【級聯更新相關字段】復選框,則允許完成此操作。
4.5.5 設置級聯選項
用戶有時可能需要更新或刪除關系一方的值,那么關系另外一方的值會發生什么變化呢?對于數據庫完整性而言,用戶希望當關系一方的值更新或刪除時,系統能自動更新或刪除所有受影響的值。這樣,數據庫可以進行完整更新,有效地防止整個數據庫呈現不一致的狀態。
Access提供的【級聯更新相關字段】選項和【級聯刪除相關記錄】選項正好可以解決此問題。如果實施了參照完整性并選中【級聯更新相關字段】復選框,當更新主鍵時,Access將自動更新參照主鍵的所有字段。同樣地,如果選中【級聯刪除相關記錄】復選框,當刪除包含主鍵的記錄時,Access會自動刪除參照該主鍵的所有記錄。
下面在“應用”數據庫中對所有表關系實施參照完整性并設置級聯選項。具體操作步驟如下。
step 01 打開“應用”數據庫,切換到【數據庫工具】選項卡,單擊【關系】組中的【關系】按鈕,進入【關系】工作窗口。
step 02 雙擊“客戶”表和“訂單”表之間的關系連接線,彈出【編輯關系】對話框,選中【實施參照完整性】復選框。此時用戶可以看到,【級聯更新相關字段】和【級聯刪除相關記錄】兩個復選框均變為可選狀態,選中這兩個復選框,單擊【確定】按鈕,如圖4-116所示。

圖4-116 【編輯關系】對話框
step 03 使用同樣的方法,為其他表設置級聯選項。這樣就對數據庫中的表都設置了參照完整性和級聯選項,如圖4-117所示。

圖4-117 設置參照完整性和級聯選項
提示
如果主鍵是自動編號字段,則選中【級聯更新相關字段】復選框時將不起作用,因為系統無法更改自動編號字段中的值。
- Mastering OpenCV Android Application Programming
- 軟件測試項目實戰之性能測試篇
- 教孩子學編程:C++入門圖解
- Apache Mesos Essentials
- Linux操作系統基礎案例教程
- 琢石成器:Windows環境下32位匯編語言程序設計
- Spring Boot企業級項目開發實戰
- WordPress 4.0 Site Blueprints(Second Edition)
- 好好學Java:從零基礎到項目實戰
- Learning Unreal Engine Android Game Development
- Spring Boot+MVC實戰指南
- Clojure for Machine Learning
- Robot Framework Test Automation
- SAP Web Dynpro for ABAP開發技術詳解:基礎應用
- Solr權威指南(下卷)