在Oracle9i中定義視圖約束

來源:互聯網
上載者:User

在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;



相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。