官术网_书友最值得收藏!

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 選擇【刪除】菜單命令

主站蜘蛛池模板: 哈巴河县| 永康市| 阿拉善左旗| 长寿区| 白河县| 汶上县| 遂溪县| 莒南县| 湖南省| 利川市| 永定县| 祁门县| 洛南县| 永城市| 唐山市| 泾阳县| 大田县| 贵州省| 天长市| 泸定县| 松阳县| 伊金霍洛旗| 内丘县| 个旧市| 莲花县| 郑州市| 潞西市| 棋牌| 郸城县| 恩平市| 色达县| 临武县| 蒙城县| 巴青县| 都兰县| 化德县| 萝北县| 峡江县| 舞阳县| 庄浪县| 武威市|