之所以需要良好的數(shù)據(jù)庫設(shè)計,目標(biāo)之一就是為了消除數(shù)據(jù)冗余(重復(fù)數(shù)據(jù)),。 為了實(shí)現(xiàn)該目標(biāo),,可將數(shù)據(jù)拆分為多個基于主題的表,以使每個數(shù)據(jù)只顯示一次,。 然后,,通過在相關(guān)表中放置公共字段來為 Access 提供將拆分的信息組合到一起 的方法。 但是,,若要正確執(zhí)行該步驟,,必須了解表之間的關(guān)系,然后在數(shù)據(jù)庫中指定這些關(guān)系。 本文內(nèi)容簡介在數(shù)據(jù)庫中為每個主題創(chuàng)建一個表后,必須為 Access 提供在需要時將這些信息重新組合到一起的方法,。 具體方法是在相關(guān)的表中放置公共字段,,并定義表之間的關(guān)系。 然后,,可以創(chuàng)建查詢,、窗體和報表,以同時顯示幾個表中的信息,。 例如,,下面顯示的窗體包含來自幾個表的信息:
1. 此窗體中的信息來自“客戶”表... 2. ...“訂單”表... 3. ...“產(chǎn)品”表... 4. ...和“訂單明細(xì)”表。 “受票方”框中的客戶名稱是從“客戶”表中檢索到的,,“訂單 ID”和“訂單日期”值來自“訂單”表,,“產(chǎn)品名稱”來自“產(chǎn)品”表,“單價”和“數(shù)量”值來自“訂單明細(xì)”表,。 這些表以多種方式互相鏈接在一起,,以便將各自的信息呈現(xiàn)到窗體中。 在上述示例中,,表中的各個字段必須互相協(xié)調(diào),,這樣它們才能顯示有關(guān)相同訂單的信息。 這種協(xié)調(diào)是使用表之間的關(guān)系來實(shí)現(xiàn)的,。 表關(guān)系是通過匹配鍵字段中的數(shù)據(jù)來運(yùn)作的 ,,鍵字段通常是兩個表中使用相同名稱的字段。 在大多數(shù)情況下,,這些匹配字段是其中一個表的主鍵(它為每條記錄提供唯一標(biāo)識符),,并且是另一個表的外鍵。 例如,,通過在“員工”和“訂單”表的“員工 ID”字段之間創(chuàng)建表關(guān)系,,可以將員工和他們負(fù)責(zé)的訂單相關(guān)聯(lián)。
1. “員工 ID”出現(xiàn)在兩個表 中,一個是主鍵... 2. ...一個是外鍵,。 表關(guān)系的類型Access 中有三種類型的表關(guān)系,。
為什么創(chuàng)建表關(guān)系?您可以使用“關(guān)系”窗口或從“字段列表”窗格中拖動字段來顯式創(chuàng)建表關(guān)系,。 當(dāng)需要在數(shù)據(jù)庫對象中使用表時,, Access 會使用表關(guān)系來確定如何聯(lián)接這些表。 應(yīng)該在創(chuàng)建其他數(shù)據(jù)庫對象(如窗體,、查詢和報表)之前創(chuàng)建表關(guān)系,,這樣做有以下幾個原因:
了解參照完整性在設(shè)計數(shù)據(jù)庫時,,您將數(shù)據(jù)庫信息拆分為許多基于主題的表,,以最大限度地降低數(shù)據(jù)冗余。 然后,,您通過在相關(guān)表中放置公共字段來為 Access 提供將數(shù)據(jù)重新組合到一起的方法,。 例如,為表示一對多關(guān)系,,您從“一方”表中獲得主鍵,,將其作為附加字段添加到“多方”表。 若要將數(shù)據(jù)重新組合到一起,,Access 獲得“多方”表中的值,,并在“一方”表中查找相應(yīng)的值。 通過這種方法,,“多方”表中的值參照“一方”表中相應(yīng)的值。 假設(shè)“運(yùn)貨商”和“訂單”之間存在一對多關(guān)系,,您希望刪除一個運(yùn)貨商,。 如果要刪除的運(yùn)貨商在“訂單”表中具有訂單,則刪除該運(yùn)貨商記錄后,,這些訂單將成為“孤立記錄”,。 這些訂單仍然包含運(yùn)貨商 ID,但該 ID 不再有效,,因為它所參照的記錄不再存在,。 參照完整性的目的是防止出現(xiàn)孤立記錄并使參照保持同步,以使這種假設(shè)的情況永遠(yuǎn)不會發(fā)生,。 實(shí)施參照完整性的方法是為表關(guān)系啟用參照完整性,。 實(shí)施后,Access 將拒絕違反此表關(guān)系參照完整性的任何操作,。 這意味著 Access 會拒絕更改參照目標(biāo)的更新操作,,也會拒絕刪除參照目標(biāo)的刪除操作。 您可能確實(shí)需要更改某個運(yùn)貨商的主鍵,,而該運(yùn)貨商在“訂單”表中有訂單,。 在此類情況下,您真正需要的是 Access 在一次操作中自動更新所有受影響的行,。 這樣,,Access 可以確保進(jìn)行完整更新,,以便數(shù)據(jù)庫不會出現(xiàn)不一致的狀態(tài)(即更新某些行,不更新其他行),。 因此,,Access 支持“級聯(lián)更新相關(guān)字段”選項。 如果您實(shí)施了參照完整性并選擇“級聯(lián)更新相關(guān)字段”選項,,在您更新主鍵時,,Access 將自動更新參照主鍵的所有字段。 您可能還會需要刪除某一行及所有相關(guān)記錄,, 例如,,某個運(yùn)貨商記錄以及其所有相關(guān)訂單。 因此,,Access 支持“級聯(lián)刪除相關(guān)記錄”選項,。 如果實(shí)施了參照完整性并選擇“級聯(lián)刪除相關(guān)記錄”選項,則當(dāng)您刪除關(guān)系主鍵方的記錄時,,Access 會自動刪除參照該主鍵的所有記錄,。 查看表關(guān)系要查看表關(guān)系,請單擊“數(shù)據(jù)庫工具”選項卡上的“關(guān)系”,。 將打開“關(guān)系”窗口,,并顯示所有現(xiàn)存的關(guān)系。 如果尚未定義表關(guān)系,,并且您是第一次打開“關(guān)系”窗口,,則 Access 會提示您向窗口中添加表或查詢。 打開“關(guān)系”窗口
表關(guān)系由“關(guān)系”窗口中表之間繪制的關(guān)系線表示。 不實(shí)施參照完整性的關(guān)系在支持該關(guān)系的公共字段之間顯示為細(xì)線,。 單擊關(guān)系線選擇關(guān)系時,,該線變粗指示它被選中。 如果對此關(guān)系實(shí)施參照完整性,,則該線在兩端都會變粗,。 此外,,在關(guān)系一側(cè)線條較粗部分上會顯示數(shù)字“1”,而在另一側(cè)線條較粗部分上會顯示無限大符號 (∞),。 在“關(guān)系”窗口處于活動狀態(tài)時,,可以選擇功能區(qū)中的以下命令: 在“設(shè)計”選項卡上的“工具”組中:
在“設(shè)計”選項卡上的“關(guān)系”組中:
|
|