對於數據庫系統來說
擁有一套執行基本商業規則的方法是非常重要的
如果一個事物元試圖插入
更新
或者刪除一個表格行
那麼它就違反了商業規則
然後
數據庫必須拒絕這個事物元並在應用程序中做錯誤的標記
雖然通過程序代碼來規范規則是可行的
但是如果有一個更加簡單的方法來執行那是最合人意了
因為表格可以通過SOL*PLUS和其他有效的方法來訪問
所以數據庫水平可以通過提供更好的解決方案來約束
Oracle提供了大量的約束完整性和數據庫的觸發器來幫助商業規則的管理
讓我們暫時先來探索一些約束完整性
然後再將焦點放到外碼的約束上
這個將是我們這篇文章的主要內容
參照完整性(RI)的規則確定了一對多和多對多的關系強迫在關系計劃中
另外
有效值同樣也被約束強迫
對於Web服務器應用程序來說
約束特別重要
因為Web服務器允許約束在數據庫服務器中檢查發生
因此
它擔當了校對約束的任務
在Oracle表格中可以應用幾種類型的約束來規范數據的完整性
它包括
·檢查約束
在行插入時間的時候
這個約束被有效的引入到列中
在檢驗region所有出現的地方時
需要使用一個應用程序來檢查是東
南
西
或者北
現在
將檢查約束加入到表格說來定義確保region欄的有效性
·非空約束
這個約束被用作說明一個列中不包含一個空值
在SQL insert和update時間中這個是被強迫加入的
·主碼約束
這個約束是用來確定表格的主碼
這個操作需要原來的列是唯一的
並且
Oracle將在目標主碼上創建一個唯一的索引
·參考約束
這是外鍵約束由Oracle來完成
一個參考約束僅僅應用在SQL 的插入和刪除時間裡
比如
一個一對多的關系存在於EMPLOYEE和DEPENDENT表格中
每個職工可能有許多相依賴的關系
但是每個關系僅僅屬於一個職工
這個參考約束在insert時間告訴Oracle在DEPENDENT
emp_num中的值必須和職員欄中的EMPLOYEE
emp_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