熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

使用參照完整性來加強基本商業規則

2013-11-13 22:22:14  來源: Oracle 

  對於數據庫系統來說擁有一套執行基本商業規則的方法是非常重要的如果一個事物元試圖插入更新或者刪除一個表格行那麼它就違反了商業規則然後數據庫必須拒絕這個事物元並在應用程序中做錯誤的標記雖然通過程序代碼來規范規則是可行的但是如果有一個更加簡單的方法來執行那是最合人意了因為表格可以通過SOL*PLUS和其他有效的方法來訪問所以數據庫水平可以通過提供更好的解決方案來約束
  
  Oracle提供了大量的約束完整性和數據庫的觸發器來幫助商業規則的管理讓我們暫時先來探索一些約束完整性然後再將焦點放到外碼的約束上這個將是我們這篇文章的主要內容
  
  參照完整性(RI)的規則確定了一對多和多對多的關系強迫在關系計劃中另外有效值同樣也被約束強迫對於Web服務器應用程序來說約束特別重要因為Web服務器允許約束在數據庫服務器中檢查發生因此它擔當了校對約束的任務
  
  在Oracle表格中可以應用幾種類型的約束來規范數據的完整性它包括
  
  ·檢查約束在行插入時間的時候這個約束被有效的引入到列中在檢驗region所有出現的地方時需要使用一個應用程序來檢查是東西或者北現在將檢查約束加入到表格說來定義確保region欄的有效性
  
  ·非空約束這個約束被用作說明一個列中不包含一個空值在SQL insert和update時間中這個是被強迫加入的
  
  ·主碼約束這個約束是用來確定表格的主碼這個操作需要原來的列是唯一的並且Oracle將在目標主碼上創建一個唯一的索引
  
  ·參考約束這是外鍵約束由Oracle來完成一個參考約束僅僅應用在SQL 的插入和刪除時間裡比如一個一對多的關系存在於EMPLOYEE和DEPENDENT表格中每個職工可能有許多相依賴的關系但是每個關系僅僅屬於一個職工這個參考約束在insert時間告訴Oracle在DEPENDENTemp_num中的值必須和職員欄中的EMPLOYEEemp_num相匹配因此在關系欄添加之前一定要確保有效職員存在如果這個行依舊存在於DEPENDENT表格中那麼在SQL delete時間裡參照約束可以用來確定職員不被刪除
  
  ·唯一約束這個約束確保表格中所有列的值不會出現在復寫條目中
  
  注意唯一和主鍵的區別它們都是創建一個唯一的索引一個表格僅含有一個主鍵約束列但是它有可能在其他列中含有許多的唯一約束
  
  外鍵約束
  參照完整性外鍵約束確定了表格或者視圖的欄作為外鍵這個外鍵欄和一個主鍵或者唯一鍵在另外一個表格中建立了直接的關系這個表格包含的外鍵被引用做孩子並且參考鍵被用做雙親表格外鍵和參考鍵可以被用在同一個表格中除此之外雙親和子表必須在相同的數據庫中
  
  下面是創建一個外鍵約束的語法
  
  ALTER TABLE (table_name)
   ADD
    CONSTRAINT (foreign key constraint name)
    FOREIGN KEY
    ( field name )
    REFERENCES primary_table_name
    (primary_table_primary_index_field)
  
  雖然外鍵約束通常被用在應用程序編碼的場所來進行完整性的檢查但是使用參考完整性的約束加入到I/O開銷中來執行insert和update操作是重要的另外的I/O是可歸於外鍵必須使雙親表有效的事實通過保證參考列表被檢索可使這個開銷最小在大量的重載中它在使先前的完整約束喪失能力重載和在重載完成後使約束恢復能力的過程中非常有用一旦約束被激活任何錯誤都可被紀錄和操作
  
  參照完整性有時候需要雙重編碼比如在多重SQL*Form中你也許不知道參照完整性是否違反了規則直到你將許多頁面放到表格中並且你的表格試圖提交的事物元的時候在Web服務器應用程序中你需要非常小心的保證Oracle事物元的安全
  
  參照完整性
  一個數據庫系統要有能力執行商業規則參照完整性是Oracle提供給商業規則的一個方法有關系統允許商業規則利用約束來控制並參照完整性成了關聯表格的骨干
  
  許多應用程序不使用外鍵參考完整性它們利用應用程序代碼來執行商業規則這個方法並不簡單因為應用表格可以通過其他的方法比如SQL*PLUS被訪問
From:http://tw.wingwit.com/Article/program/Oracle/201311/18900.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.