在Oracle9i中定义视图约束

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

时间: 2024-11-03 16:53:10

在Oracle9i中定义视图约束的相关文章

xml-通过定义一个子类在XML类中自定义视图

问题描述 通过定义一个子类在XML类中自定义视图 以下是我自定义的类 <view class=""com.productions.sample.TextCustom""// more.../> 子类 public class TextCustom extends TextView { // Stuff. } 我想实现的是 public final class Custom { public class TextCustom extends TextVie

SQL Server定义视图查询语句中不能使用的关键字

(1) 不能够带有Into关键字 我们都知道,视图其实就是一组查询语句组成.或者说,视图是封装查询语句的一个工具.在查询语句中,我们可以通过一些关键字来格式化显示的结果.如我们在平时工作中,经常会需要把某张表中的数据跟另外一张表进行合并.此时,数据库管理员就可以利用Select Into语句来完成.先把数据从某个表中查询出来,然后再添加到某个表中.当经常需要类似的操作时,我们是否可以把它制作成一张视图.每次有需要的时候,只需要运行这个视图即可,而不用每次都进行重新书写SQL代码.不过可惜的是,结

SQL Server数据库的存储过程中定义的临时表,真的有必要显式删除(drop table #tableName)吗?

原文:SQL Server数据库的存储过程中定义的临时表,真的有必要显式删除(drop table #tableName)吗?   本文出处:http://www.cnblogs.com/wy123/p/6704619.html      问题背景 在写SQL Server存储过程中,如果存储过程中定义了临时表,有些人习惯在存储过程结束的时候一个一个显式地删除过程中定义的临时表(drop table #tName),有些人又没有这个习惯,对于不明真相的群众或者喜欢思考的人会问,存储过程中定义的临

细说SQL Server中的视图_自学过程

1,什么是视图? 2,为什么要用视图: 3,视图中的ORDER BY; 4,刷新视图: 5,更新视图: 6,视图选项: 7,索引视图: 1.什么是视图 视图是由一个查询所定义的虚拟表,它与物理表不同的是,视图中的数据没有物理表现形式,除非你为其创建一个索引:如果查询一个没有索引的视图,Sql Server实际访问的是基础表. 如果你要创建一个视图,为其指定一个名称和查询即可.Sql Server只保存视图的元数据,用户描述这个对象,以及它所包含的列,安全,依赖等.当你查询视图时,无论是获取数据还

ORACLE9I中外部表的使用

oracle ORACLE9I中外部表的使用 说明: 这个帖子讲述Oracle9I外部表(External Table)的初级使用. 什么是外部表? External table和正规的表很相似,具体的定义可以参见<Oracle概念手册>,以下的几点需要注意:    >创建的语法类似于: "CREATE TABLE ... ORGANIZATION EXTERNAL"    >数据在数据库的外部组织,是操作系统文件.    >操作系统文件在数据库中的标志是

学习入门:在MySQL中定义外键

和所有开源项目的参考文档一样,MySQL文档中的SQL语法说明让我等初学者看起来头大.这不,今天我花了大半天的工夫,才把在MySQL中设置外键的语法弄明白,所以赶紧写下来,一来加深一下印象,二来万一过两天忘了,自己也好回来查一下. 定义数据表 假如某个电脑生产商,它的数据库中保存着整机和配件的产品信息.用来保存整机产品信息的表叫做 pc:用来保存配件供货信息的表叫做 parts. 在 pc 表中有一个字段,用来描述这款电脑所使用的CPU型号: 在 parts 表中相应有一个字段,描述的正是CPU

更新MFC中的视图,跟踪.NET Framework中的事件

本文配套源码 如何更新MFC中的视图? 如何跟踪.NET Framework 中的事件? 我在 MDI 程序中打算通过 CMainFrame 中的定时器事件来更新所有的子窗口. 视图用于显示许多图表.用如下的代码只能更新当前活动窗口: GetActiveWindow()->GetActiveView()->GetDocument() 是否有其它的方法从 CMDIFrame 类中获得所有的子窗口或者所有的文档? Makarand 你的情况并不罕见.许多采集实时数据的程序需要定时更新屏幕.即使你的

ASP.NET MVC中的视图生成简介

在 ASP.NET MVC 中,我们将前端的呈现划分为三个独立的部分来实现,Controller 用来控制用户的操作,View 用来控制呈现的内容,Model 用来表示处理的数据. 从控制器到视图 通常,在 Controller 中,我们定义多个 Action ,每个 Action 的返回类型一般是 ActionResult,在 Action 处理的最后,我们返回对于视图的调用. public ActionResult Index() {    return this.View(); } 默认情

NHibernate之旅(14):探索NHibernate中使用视图

本节内容 引入 1.持久化类 2.映射文件 3.测试 结语 引入 在数据库操作中,我们除了对表操作,还有视图.存储过程等操作,这一篇和下篇来学习这些内容.这篇我们来学习如何在NHibernate中使用视图.首先,我们在数据库中建立一个名为viewCustomer视图,选中CustomerId.Firstname.Lastname.OrderId.OrderDate项. 下面我们依次为这个视图编写持久化类和映射吧. 1.持久化类 同持久化数据库中的表类似,我们需要对视图持久化,定义视图中的每个属性