程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> 在Oracle9i中定義視圖約束

在Oracle9i中定義視圖約束

編輯:Oracle數據庫基礎

在Oracle9i出現之前,Oracle視圖總是從它們的基表(base tables)中動態產生的,並且視圖中不能包含約束。通過隱藏所有的內部表格連接操作,Oracle視圖可以簡化復雜的查詢。

例如,下面的視圖用以顯示五金(widget)產品的訂貨信息。

create or replace vIEw
widget_orders
as
select
cust_name,
order_date,
product_name,
sum(qty*price) total cost
from
customer
natural join
orders
natural join
order_item
natural join
product
where
product_type = 'widget';

在定義了這個視圖之後,我們就能過對它進行復雜的查詢。

select * from widget_orders where order_date > sysdate-5;

傳統的視圖所帶來的問題就是我們不能對視圖定義參考完整性約束(referential integrity constraints)。從Oracle9i開始,Oracle支持下面的視圖約束。

非空(NOT NULL):這個約束總是從創建視圖的基表中繼承而來的。
唯一性約束(Unique constraints):Oracle9i允許對視圖的任意一欄定義唯一性約束。
主鍵(Primary key):我們可以直接給視圖定義主鍵約束。
外鍵(Foreign Key):只要視圖有依賴於其它基表的外鍵,那麼就會直接存在外鍵參考完整性。
正如你所知道的那樣,對視圖的參考完整約束進行管理會極大的影響到查詢的性能。

在Oracle9i中,我們能夠回避非約束視圖所帶來的問題。下面的例子對一個視圖創建了主鍵約束。

alter vIEw
widget_orders
add constraint
widget_orders_pk
primary key
(cust_name, order_date, product_name)
disable novalidate;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved