视图的使用

news2025/3/1 13:55:53

 为什么引入视图(Views)

如果您读过其他类似的书,可能会看到这些书在介绍视图时列举了许多引入视图的原因。其中认为最重要的原因是维护数据的独立性。那么什么是数据的独立性呢?

早期信息系统的设计与开发多采用模块驱动方式,即设计与开发者首先根据用户的需求建立功能模块(过程和函数),再由这些模块来决定数据结构和存储。以这种方法设计和开发的信息系统在绝大多数情况下是很难维护的。因为在当今这个经济快速发展的社会中,商业环境和市场在不断变化,用户的需求也在不断变化。当然带来的后果也就可想而知了,即相应的模块也要变,随之而来的是数据结构和数据存储都要变。这可以说是牵一发而动全身。在现代化的社会中,变化是不可避免的。也许当今世界上惟一不变的是"变"这个字。

面对变化是不可避免的这一事实时,设计与开发者如何才能设计和开发出相对稳定的信息系统呢?即信息系统的某一局部变化时,不需要修改相应的数据结构和数据存储。研究表明:虽然随着用户的需求的变化,模块的变化几乎是不可避免的,但是信息系统中的数据却几乎是不变的(数据的排列可能会变化)。这样的发现就导致了一种与模块驱动方式完全不同的信息系统设计与开发方法的诞生,这种信息系统设计与开发方法就叫做数据驱动法。

采用数据驱动方式来设计和开发信息系统时,设计和开发者在前期可以完全不考虑系统的硬件、软件(包括操作系统和数据库管理系统)和功能模块(因此也就不用考虑程序设计语言)。设计和开发者在前期要收集信息系统所需的全部数据、化分实体(表)以及定义表与表之间的关系。之后用规范化(Normalization)决定哪些列应该放在哪个表中,最后产生一个基本上只包括了三范式表的实体关系图。当然这是一个漫长和需要多次反复的过程。

许多行家认为一旦完成了这一步,信息系统的设计已完成了一半或以上。因为接下去的工作已经很轻松了,只要将这个图中的实体转换成关系数据库的表,将实体与实体之间的关系转换成关系数据库的约束即可。之后只要将数据装入相应的表中就可以利用SQL语句使用这一信息系统了,只是用户界面不太友好而已。

下面我们用图14.1,一个简化的信息系统设计来说明采用数据驱动方式来设计和开发信息系统给信息系统维护带来的好处。

 

假设在图14.1中的表包含了信息系统所需的全部数据,而且每一个表都是三范式。很显然某一模块所需的数据可能分别存在于多个表中(例如订单)。这时就可以为这一模块创建一个视图,开发人员只能看到和操作通过这一视图所看到的数据,虽然这些数据是来自不同的表,但对于开发人员来说这些数据就好像来自一个表一样。当模块的功能变化需要不同的数据时,需要改变的只是相应的视图而不需要改变真正的表。这样信息系统的维护就简单多了。

从前面的讨论可以看出使用视图有以下的好处:

■ 可以把复杂的SQL语句简单化。您可以看出例14-2中的SQL语句是很复杂的。

在该语句中包含了分组函数(Group Functions),还包含了GROUPBY子句和两个表的连接,并为查询中的每一列取了别名。但用户却可使用像例14-4那样最简单的查询语句从视图average中提取同样的信息。

可以限制数据库的访问。用户通过视图 average只能访问“部门”、“平均工资”、“平均佣金”和“员工数”这4列。

可以使数据独立于应用程序(数据独立性)。见14.1节的讨论。

可以使相同的数据以不同的形式出现在不同的视图中。例如您可以为每一个部门创建一个只包含该部门员工信息的视图,这样当用户使用视图来访问数据时就只能看到他/她所在部门员工的信息。

如何创建视图(Views)

实际上您已经在14.2中创建了一个视图,下面我们给出创建视图比较完整的格式。

CREATE【OR REPLACE】【FORCE|NOFORCE】VIEW 视图名

【(别名】,别名】…)】AS 子查询语句

【WITH CHECK OPTION 【CONSTRAINT约束名】】

[WITH READ ONLY]其中每个选项的含义如下:

OR REPLACE:如果所创建的视图已存在,Oracle系统会重建这个视图。在这里值得注意的一个问题是:可能系统中已有一个同名的视图而且它是一个有用的视图。此时您如果使用OR REPLACE来创建视图就会把系统中有用的视图覆盖掉。因此为了防止这种灾难的发生,您应该在创建视图之前使用SQL*PLUS的DESC 看看这个视图是否已存在。

FORCE:不管所引用的表是否存在,Oracle系统都会创建这个视图。

NOFORCE:只有当所引用的表都存在时,Oracle系统才会创建这个视图(这是■

ORACL系统的默认方式)。视图名:所要创建的视图的名字。

别名:为视图所产生的列定义的列名(别名的个数一定要与视图所产生的列数相等)。

■子查询语句:一个完整的查询语句(您也可以在该语句定义别名)。

WITH CHECK OPTION:所插入或修改的数据行必须满足视图所定义的约束条件。

约束名:WITH CHECK OPTION 中的约束名。

WITHREADONLY:保证在该视图上不能进行任何DML操作。

需要注意的是:在子查询语句中不能包含ORDER BY子句。这可能是因为视图给出的数据并不是最终的结果。如果您想让您的查询结果按某一种有序的方式显示,您可以在查询视图时加入ORDER BY子句。

SQL> CREATE OR REPLACE VIEW acct

2.("名字","工资","职位","雇用日期")

3 AS

4 SELECT ename,sal,job,hiredate

5 FROM emp

6 WHERE deptno = 10;

如何修改视图(Views)

例14-8

SQL> CREATE OR REPLACE VIEW acct

2 ("名字","工资","职位","雇用日期","部门","地点")

3 AS

4 SELECT ename,sal,job,hiredate,dname,loc

5 FROM emp, dept

6 WHERE emp.deptno = dept.deptno

7 AND emp.deptno = 10;

Oracle系统如何管理视图(Views)

当您使用CREATEVIEW语句成功地创建了视图后,这个视图就被存在了Oracle数据字典中。那么一个用户怎样才能知道他/她的账号下有多少个视图,以及这些视图的定义呢?您可以通过查询数据字典user_views来得到这方面的信息(例14-11)。

例14-11

SQL> SELECT view_name,text_length,text

2 FROM user_views;

Oracle系统的执行步骤如下:

(1)从数据字典中取出视图的定义,即查询语句。(2)检查该视图所引用的表的权限。(3)执行视图所定义的查询语句。

从以上Oracle系统的执行步骤可以看出,在使用视图访问数据库时,至少要两次访问硬盘(第一次访问数据字典,第二次访问表中的数据)。因此虽然使用视图给我们带来了诸多的方便,但是它却可能带来一些效率方面的问题。因为磁盘的I/O操作对系统效率的冲击是非常大的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/412442.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NumPy 秘籍中文第二版:七、性能分析和调试

原文:NumPy Cookbook - Second Edition 协议:CC BY-NC-SA 4.0 译者:飞龙 在本章中,我们将介绍以下秘籍: 使用timeit进行性能分析使用 IPython 进行分析安装line_profiler使用line_profiler分析代码具有cProfile扩展名…

【分布式事务AT模式 本地部署Seata服务】分布式事务框架Seata详细讲解

前言 这篇文章我会从0到1详细搭建分布式事务框架seata的使用,那么我们首先要先了解一下什么是分布式事务? 本篇文章是本地启动seata服务并且注册到nacos中,在SpringCloud中整合seata框架请转移下方连接 点我跳转SpringCloud整合seata教程&…

【网络原理】TCP/IP协议(续)

目录 🔥网络层重点协议(IP 协议) 一、地址管理 1.如何解决上述地址不够用问题? 2.NAT 机制 2.1 NAPT 2.2 在 NAT 背景下如何通信? 3.IPv6 4.IP地址 4.1 ABCDE类 4.2 子网掩码 4.3 特殊的 IP 地址 二、路由…

传统汽车保险丝盒与智能保险丝盒Efuse的应用

一、传统汽车保险丝盒 1、概述 电气盒是用于提供车辆电源分配和回路保护的电气枢纽。电气盒能简化线束的安装和整车的装配过程,改善系统的整体质量水平,降低成本和减少散乱。 一般传统电气盒分为PFB(预保险丝盒),UE…

公网使用SSH远程登录macOS服务器【内网穿透】

文章目录前言1. macOS打开远程登录2. 局域网内测试ssh远程3. 公网ssh远程连接macOS3.1 macOS安装配置cpolar3.2 获取ssh隧道公网地址3.3 测试公网ssh远程连接macOS4. 配置公网固定TCP地址4.1 保留一个固定TCP端口地址4.2 配置固定TCP端口地址5. 使用固定TCP端口地址ssh远程前言…

Nacos共享配置

本文介绍一下Nacos作为配置中心时,如何读取共享配置 我的环境 Windows10JDK8SpringCloud:Finchley.RELEASESpringBoot:2.0.4.RELEASEspring-cloud-alibaba-dependencies:0.2.2.RELEASENacos-server:1.0.1 本文的项目…

去互联网大厂卷还是去上升期创业型公司offer二选一?你怎么抉择?

上升期的创业型公司 vs 大厂 如何抉择? 最近总有一些粉丝特别“凡尔赛”的发几个 offer 问我选择哪个?其中比较典型的一个问题就是: “一个是处于上升期的创业型公司 ,一个行业大厂,薪资待遇差不多,到底该…

elastissearch——排序结果处理

排序 elasticsearch支持对搜索结果排序,默认是根据相关度算分(_score)来排序。可以排序字段类型有:keyword类型、数值类型、地理坐标类型、日期类型等。 GET /hotel/_search { "query": { "match_all"…

DC插装式流量阀压力阀

Cartridge Valves 电磁阀 止回阀 运动控制阀 流量控制阀 溢流阀 压力控制阀 顺序阀 梭阀 方向阀 配件 Zero Profile Valves 止回阀 运动控制阀 流量控制阀 溢流阀 梭阀 In-Line Valves 止回阀和梭阀 方向阀 配件 微型系列 AB20S APIDC-30S C10B C10S C10S…

opengl 坐标系

概述 为了将坐标从一个坐标系统转换成另一个坐标,我们需要经历几个变换(1:模型 2:观察 3:投影)我们的顶点坐标起始于局部坐标,然后变成世界坐标,观察坐标,剪裁坐标 最后以…

BUUCTF-MD5强弱比较-MD5()的万能密码-tornado框架注入-中文电码

第六周 第三次 目录 学习到的知识 1.MD5强弱比较可以都可以使用数组绕过 2.基于MD5()的万能密码 ffifdyop WEB [BJDCTF2020]Easy MD5 ​编辑[护网杯 2018]easy_tornado Crypto 信息化时代的步伐 凯撒?替换?呵呵! Misc 神秘龙卷风 学习到的…

c/c++:数据类型,常量变量,标识符,有符号整型,无符号unsigned,字符类型,字符串类型,实数类型,浮点型,科学计数法

c/c:数据类型,常量变量,标识符,有符号整型,无符号unsigned,字符类型,字符串类型,实数类型,浮点型,科学计数法 2022找工作是学历、能力和运气的超强结合体&am…

C++ Primer 第7章 类 - 上(零基础学习C++,精简学习笔记)

🤖 作者简介:努力的clz ,一个努力编程的菜鸟 🐣🐤🐥 👀 文章专栏:C Primer 学习笔记 📔专栏简介: 本专栏是博主学习 C Primer 的学习笔记,因为…

【NX2023/1847】UG软件安装详细指南教程

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录安装包一、安装包内容检查二、安装步骤1.安装JAVA_WIN64.exe2.运行Launch.exe3.安装许可3.直接重启电脑(小白直接重启稳妥)4.重启后继续运行L…

网络威胁情报项目:为什么仍然很疯狂

大约五年前,向首席信息安全官( CISO)询问他们的网络威胁情报 (CTI) 计划时,得到了两种截然不同的回答。 资源丰富的大型企业正在投资他们的威胁情报计划,目的是为了战术、运营和战略目的更好地实施它。 规模较小、资…

Day942.独立编译调试 -系统重构实战

独立编译调试 Hi,我是阿昌,今天学习记录的是关于独立编译调试的内容。 当组件做 独立的版本演进时,如果开发在本地每次修改代码时,都需要进行集成打包验证,反而会影响日常的开发效率。所以如果能够让组件独立进行编译…

Object方法

私人博客 许小墨のBlog —— 菜鸡博客直通车 系列文章完整版,配图更多,CSDN博文图片需要手动上传,因此文章配图较少,看不懂的可以去菜鸡博客参考一下配图! 系列文章目录 前端系列文章——传送门 JavaScript系列文章—…

Node.js -- 模块化

1.模块化的基本概念 模块化是指解决一个复杂问题时,自顶向下逐层吧系统划分成若干模块的过程。对于整个系统来说,模块是可组合,分解和更换的单元。 将代码进行模块化拆分的好处: 提高代码的复用性提高代码的可维护性可以实现按…

元宇宙:新的数字模式——元宇宙会场

一、引言 元宇宙是一个充满无限可能的虚拟空间,人们可以在其中创建和参与各种虚拟场景和体验。元宇宙技术的兴起,为传统的会场提供了一个新的方向。元宇宙会场将线下会场的物理空间转化为虚拟空间,通过数字技术和互联网实现了人们在虚拟环境…

我的第一台电脑的故事

第一台电脑啊,多么遥远的故事了,又似乎就在眼前。今天重回往事,就简单记录一下吧。 🌱缘起 那是初一,至今已13年,遂觉遥远,而又是立志我学习的起点,至今还在校园,又觉就…