- Access 2016數據庫應用與開發:實戰從入門到精通(視頻教學版)
- 劉玉紅
- 5027字
- 2020-11-28 16:03:09
4.6 建立表之間的關系
良好的數據庫設計目標之一就是消除數據冗余(即重復數據)。要實現這一目標,可將數據拆分為多個基于主題的表,盡量使每條記錄只出現一次,然后在相關表中放置公共字段,并建立各表之間的關系,從而將拆分的數據組合到一起,這也是關系型數據庫的運行原理。由此可知,表關系是數據庫中非常重要的一部分。
在Access 2016中共有三種類型的表關系,分別是一對一關系、一對多關系和多對多關系。本節將分別介紹這三種類型。
4.6.1 一對一表關系
在一對一關系中,第一個表中的每條記錄在第二個表中只有一個匹配記錄,而第二個表中的每條記錄在第一個表中也只有一個匹配記錄。這兩個表通常是基于同一個主題。
在實際應用中,這種關系并不常見,因為多數與此方式相關的信息都存儲在一個表中。事實上,一對一關系通常應該避免,因為這違反了規范化的規則。但在某些特殊情況下還是需要使用一對一表關系。
☆ 出于安全原因,隔離表中部分數據,僅限于特殊權限的用戶查看。
☆ 將常用和不常用字段放置于兩個表中,以提高常用字段的檢索和查詢效率。
在創建一對一關系時,兩個表必須共享一個公共字段,并且該公共字段必須具有唯一索引。創建一對一關系的具體操作步驟如下。
步驟1打開隨書光盤中的“素材\Ch04\客戶管理.accdb”文件,進入“客戶信息表”的設計視圖,單擊【表格工具】→【設計】選項卡下【關系】組中的【關系】按鈕,如圖4-60所示。

圖4-60 單擊【關系】按鈕
步驟2彈出【顯示表】對話框,在【表】選項卡下顯示了當前數據庫中所有的表對象。在其中選擇“客戶信息表”和“原始信息表”,單擊【添加】按鈕,如圖4-61所示。

圖4-61 【顯示表】對話框
步驟3此時將打開“關系”窗口,并且其中已添加了相應的表對象。在【顯示表】對話框中單擊【關閉】按鈕,關閉對話框,然后在“關系”窗口中,將“客戶信息表”中的“客戶ID”字段拖動至“原始信息表”中的“客戶ID”字段上,如圖4-62所示。

圖4-62 “關系”窗口
提示
在左側窗格中將表對象拖動到“關系”窗口中,也可添加該表對象到“關系”窗口中。
步驟4 彈出【編輯關系】對話框,保持默認設置不變,如圖4-63所示,單擊【創建】按鈕。

圖4-63 【編輯關系】對話框
步驟5此時已創建一對一表關系,兩個表中的“客戶ID”字段使用關系連接線連接起來,如圖4-64所示。

圖4-64 創建一對一表關系
步驟6單擊快速訪問工具欄中的【保存】按鈕,保存創建的表關系。將“客戶信息表”切換至數據表視圖,可以發現每條記錄的行首出現了圖標。單擊該圖標,Access以子表的形式顯示出“原始信息表”中該客戶的數據,如圖4-65所示。

圖4-65 創建關系后的效果
提示
若打開“原始信息表”的數據表視圖,在其中可以發現,Access同樣會以子表的形式顯示出“客戶信息表”中該客戶的數據。
4.6.2 一對多表關系
一對多表關系在數據庫中最為常見。在關系“一方”的字段必須具有唯一索引,該字段通常為主鍵,該表被稱為主表。關系“多方”的字段不應具有唯一索引,它可以有索引,但必須允許重復,該字段通常被稱為表關系的“外鍵”。
要在數據庫中表示一對多關系,需要設置表關系“一方”的主鍵,并將其作為額外公共字段添加到關系“多方”的表中。假設在客戶管理數據庫中,有“客戶信息表”和“訂單表”,一個客戶可以有多個訂單,而一個訂單只能對應一個客戶。因此,在一對多的表關系中,關系“一方”應為“客戶信息表”,而關系“多方”應為“訂單表”,這里就需要將“客戶信息表”中的“客戶ID”字段(主鍵)添加到“訂單表”中。
創建一對多表關系的具體操作步驟如下。
步驟1接上一節的操作,切換到“關系”窗口,單擊【關系工具】→【設計】選項卡下【關系】組中的【顯示表】按鈕,如圖4-66所示。

圖4-66 單擊【顯示表】按鈕
步驟2彈出【顯示表】對話框,在【表】選項卡下選擇“訂單表”,如圖4-67所示,單擊【添加】按鈕。

圖4-67 【顯示表】對話框
步驟3將“訂單表”添加到“關系”窗口中,在【顯示表】對話框中單擊【關閉】按鈕,關閉對話框,然后在“關系”窗口中將“客戶信息表”中的“客戶ID”字段拖動至“訂單表”中的“客戶ID”字段上,如圖4-68所示。

圖4-68 “關系”窗口
步驟4彈出【編輯關系】對話框,保持默認設置不變,如圖4-69所示,單擊【創建】按鈕。

圖4-69 【編輯關系】對話框
步驟5此時已創建一對多表關系,兩個表中的“客戶ID”字段使用關系連接線連接起來,如圖4-70所示。

圖4-70 創建一對多表關系
步驟6單擊快速訪問工具欄中的【保存】按鈕,保存創建的表關系。重新打開“客戶信息表”的數據表視圖,單擊某條記錄行首的圖標,在下方將以子表的形式顯示出該客戶的所有訂單信息,如圖4-71所示。

圖4-71 創建關系后的效果
提示
在一對多的表關系中,只有關系“一方”的數據表才能查看子表的信息。關系“多方”的數據表是無法出現子表的。
4.6.3 多對多表關系
要表示多對多關系,用戶需要創建第三個表,該表通常被稱為聯接表。它將多對多關系劃分為兩個一對多關系,并將這兩個表的主鍵都插入第三個表中,或者將第三個表的主鍵插入這兩個表中,通過第三個表的連接建立起多對多的關系。注意,第三個表既可作為一對多關系中的“一方”,也可作為“多方”。
例如,在客戶管理數據庫中包含“訂單納稅狀態表”,一個訂單納稅狀態可以出現在多張訂單中,它與“訂單表”是一對多表關系,而“客戶信息表”與“訂單表”也是一對多表關系。因此可以說,“訂單納稅狀態表”和“客戶信息表”是多對多表關系,而“訂單表”即是第三個表(聯接表),它作為一對多關系中的“多方”連接這兩個表。創建表關系時,用戶需要將這兩個表的主鍵字段插入“訂單表”中,如圖4-72所示。

圖4-72 “訂單納稅狀態表”和“客戶信息表”是多對多表關系
假設在客戶管理數據庫中還包含“客戶訪問表”,一個客戶可以多次訪問公司,“客戶信息表”與“客戶訪問表”是一對多表關系。因此可以說,“訂單表”和“客戶訪問表”是多對多表關系,而“客戶信息表”即是第三個表,它作為一對多關系中的“一方”連接這兩個表。創建表關系時,用戶需要將“客戶信息表”的主鍵字段插入這兩個表,如圖4-73所示。

圖4-73 “訂單表”和“客戶訪問表”是多對多表關系
創建多對多表關系的具體操作步驟如下。
步驟1接上一節的操作,切換到“關系”窗口,單擊【關系工具】→【設計】選項卡下【關系】組中的【顯示表】按鈕,如圖4-74所示。

圖4-74 單擊【顯示表】按鈕
步驟2在彈出的【顯示表】對話框中選擇“客戶訪問表”,單擊【添加】按鈕,然后關閉對話框,即可將“客戶訪問表”添加到“關系”窗口中,如圖4-75所示。將“客戶訪問表”中的“客戶ID”字段拖動至“客戶信息表”中的“客戶ID”字段上。

圖4-75 添加“客戶訪問表”
步驟3彈出【編輯關系】對話框,保持默認設置不變,單擊【創建】按鈕,如圖4-76所示。

圖4-76 【編輯關系】對話框
步驟4完成創建“客戶信息表”和“客戶訪問表”的一對多表關系,此時“客戶訪問表”和“訂單表”即為多對多表關系,如圖4-77所示。

圖4-77 “客戶訪問表”和“訂單表”為多對多表關系
提示
用戶也可以直接將“客戶訪問表”的“客戶ID”字段拖動到“訂單表”的“客戶ID”字段上,從而創建兩個表之間的多對多關系。但在實際應用中,通常是用兩個一對多關系來表示多對多關系,而非直接創建。
4.6.4 查看與編輯表關系
表關系創建完成后,用戶可以根據需要對表關系進行查看、編輯或隱藏等操作。
1.查看表關系
查看表關系的具體操作步驟如下。
步驟1在要查看表關系的數據庫中單擊【數據庫工具】選項卡下【關系】組中的【關系】按鈕,如圖4-78所示。

圖4-78 單擊【關系】按鈕
步驟2打開“關系”窗口,在其中可查看當前數據庫中所有的表關系,如圖4-79所示。

圖4-79 “關系”窗口
2.編輯表關系
打開“關系”窗口后,功能區中會增加【關系工具】→【設計】選項卡,利用該選項卡中的各命令按鈕可編輯表關系,如圖4-80所示。

圖4-80 【關系工具】→【設計】選項卡
各按鈕的作用如下。
☆ 【編輯關系】:在“關系”窗口中單擊要編輯的關系連接線,此時該關系連接線顯示得較粗,表示為選中狀態,如圖4-81所示;然后單擊該按鈕,彈出【編輯關系】對話框,在其中可以設置實施參照完整性、設置聯接類型和新建表關系等,如圖4-82所示。

圖4-81 單擊選中關系連接線

圖4-82 【編輯關系】對話框
提示
雙擊關系連接線,或者在關系連接線上單擊鼠標右鍵,在彈出的快捷菜單中選擇【編輯關系】菜單命令,同樣可打開【編輯關系】對話框。
☆ 【清除布局】:單擊該按鈕,可隱藏“關系”窗口中所有的表對象及關系連接線,效果如圖4-83所示。

圖4-83 清除布局
☆ 【關系報告】:單擊該按鈕,Access將自動生成表關系的報表,并進入打印預覽模式,用戶可打印該報表,效果如圖4-84所示。

圖4-84 生成表關系的報表
☆ 【顯示表】:單擊該按鈕,將彈出【顯示表】對話框,在其中可添加表對象到“關系”窗口中。
☆ 【隱藏表】:在“關系”窗口中選擇表對象后,單擊該按鈕,可隱藏所選的表對象。
☆ 【直接關系】:在“關系”窗口中選擇表對象后,單擊該按鈕,可顯示出與該表有直接關系的所有表。
☆ 【所有關系】:單擊該按鈕,將顯示出當前所有的表關系。
☆ 【關閉】:單擊該按鈕,可退出“關系”窗口。
4.6.5 實施參照完整性
Access允許數據庫實施參照完整性規則,從而保護數據不會丟失或遭到破壞。例如,“客戶信息表”和“訂單表”之間存在一對多關系,假設要在“客戶信息表”中刪除一條客戶信息,而該客戶在“訂單表”中具有訂單,那么刪除該客戶信息后,這些訂單將成為“孤立記錄”。即,這些訂單仍然包含客戶ID,但該客戶ID不再有效,因為它所參照的客戶信息不再存在。由此而知,使用參照完整性規則的目的就是防止出現孤立記錄并保持參照同步。
實施參照完整性的具體操作步驟如下。
步驟1接上一節的操作,打開“關系”窗口,雙擊“客戶信息表”和“訂單表”的關系連接線,如圖4-85所示。

圖4-85 雙擊關系連接線
步驟2彈出【編輯關系】對話框,在其中選中【實施參照完整性】復選框,如圖4-86所示,單擊【確定】按鈕。

圖4-86 【編輯關系】對話框
步驟3為所選表實施參照完整性,此時關系連接線上分別以和
符號標記出一對多的表關系,如圖4-87所示。

圖4-87 實施參照完整性的效果
注意,在實施參照完整性之后,Access將拒絕違反表關系參照完整性的任何操作,并會嚴格限制主表和中間表的記錄修改和更新操作。限制規則如下。
☆ 如果在主表的主鍵字段中不存在某條記錄,則不能在相關表的外鍵字段中輸入該記錄,否則會創建孤立記錄,即不允許在“多端”的字段中輸入“一端”主鍵中不存在的值。
☆ 當“多端”的表中含有和主表相匹配的記錄時,不可從主表中刪除這條記錄。例如,如果在“訂單表”中有某客戶的訂單,則不能從“客戶信息表”中刪除該客戶的記錄。但是如果在【編輯關系】對話框中選中了【級聯刪除相關記錄】復選框,則用戶在進行刪除操作時可以刪除“客戶信息表”中某個客戶的記錄,系統會同時刪除“訂單表”中該客戶所有的訂單記錄,從而保證數據的完整性。
☆ 當“多端”的表中含有和主表相匹配的記錄時,不可從主表中改變相應的主鍵的值。例如,如果在“訂單表”中有某客戶的訂單,則不能從“客戶信息表”中改變該客戶的客戶ID值。但是如果在【編輯關系】對話框中選中了【級聯更新相關字段】復選框,則允許完成此操作。
4.6.6 設置級聯選項
用戶有時可能需要更新或刪除關系一方的值,那么關系另外一方的值會發生什么變化呢?對于數據庫完整性而言,用戶希望當關系一方的值更新或刪除時,系統能自動更新或刪除所有受影響的值,這樣數據庫可以進行完整更新,有效地防止了整個數據庫呈現不一致的狀態。
Access提供的【級聯更新相關字段】和【級聯刪除相關記錄】兩個選項可以解決該問題,如圖4-88所示。如果實施了參照完整性并選中【級聯更新相關字段】復選框,當更新主鍵時,Access將自動更新參照主鍵的所有字段。同樣地,如果選中【級聯刪除相關記錄】復選框,當刪除包含主鍵的記錄時,Access會自動刪除參照該主鍵的所有記錄。

圖4-88 設置級聯選項
提示
如果主鍵是“自動編號”字段,那么設置【級聯更新相關字段】復選框將不起作用,因為系統無法更改“自動編號”字段中的值。此外,只有實施了參照完整性,才能設置相關級聯選項。
4.6.7 刪除表關系
若要刪除表關系,只需在“關系”窗口中刪除關系連接線即可。下面介紹兩種刪除表關系的方法。
提示
刪除表關系時,如果表關系中涉及的任何一個表處于打開狀態,或正在被其他程序使用,則無法刪除該表關系。
⑴ 在“關系”窗口中選擇要刪除的關系連接線(選中狀態時顯示得較粗),按Delete鍵,彈出Microsoft Access對話框,單擊【是】按鈕,即可刪除表關系,如圖4-89所示。

圖4-89 Microsoft Access對話框
⑵ 在關系連接線上單擊鼠標右鍵,在彈出的快捷菜單中選擇【刪除】菜單命令,如圖4-90所示。

圖4-90 選擇【刪除】菜單命令
- 深入核心的敏捷開發:ThoughtWorks五大關鍵實踐
- 工程軟件開發技術基礎
- Learning Docker
- 技術領導力:程序員如何才能帶團隊
- 三維圖形化C++趣味編程
- Spring Boot+Spring Cloud+Vue+Element項目實戰:手把手教你開發權限管理系統
- x86匯編語言:從實模式到保護模式(第2版)
- R大數據分析實用指南
- ANSYS Fluent 二次開發指南
- C語言程序設計
- Frank Kane's Taming Big Data with Apache Spark and Python
- Cocos2d-x by Example:Beginner's Guide(Second Edition)
- Building Slack Bots
- Python程序設計教程
- Maven for Eclipse