视图的分类

本文介绍了iOS应用中各种视图的分类及作用,包括容器视图、控件、显示视图、文本和web视图等,并简述了视图控制器的作用。

这个视图层次可以分为如下几个大类:
  • 容器 容器视图用于增强其它视图的功能,或者为视图内容提供额外的视觉分隔。比如,UIScrollView类可以用于显示因内容太大而无法显示在一个屏幕上的视图。UITableView类是UIScrollView类的子类,用于管理数据列表。表格的行可以支持选择,所以通常也用于层次数据的导航—比如用于挖掘一组有层次结构的对象。UIToolbar对象则是一个特殊类型的容器,用于为一或多个类似于按键的项提供视觉分组。工具条通常出现在屏幕的底部。Safari、Mail、和Photos程序都使用工具条来显示一些按键,这些按键代表经常使用的命令。工具条可以一直显示,也可以根据应用程序的需要进行显示。

  • 控件 控件用于创建大多数应用程序的用户界面。控件是一种特殊类型的视图,继承自UIControl超类,通常用于显示一个具体的值,并处理修改这个值所需要的所有用户交互。控件通常使用标准的系统范式(比如目标-动作模式和委托模式)来通知应用程序发生了用户交互。控件包括按键、文本框、滑块、和切换开关。

  • 显示视图 控件和很多其它类型的视图都提供了交互行为,而另外一些视图则只是用于简单地显示信息。具有这种行为的UIKit类包括UIImageViewUILabelUIProgressViewUIActivityIndicatorView。

  • 文本和web视图 文本和web视图为应用程序提供更为高级的显示多行文本的方法。UITextView类支持在滚动区域内显示和编辑多行文本;而UIWebView类则提供了显示HTML内容的方法,通过这个类,您可以将图形和高级的文本格式选项集成到应用程序中,并以定制的方式对内容进行布局。

  • 警告视图和动作表单 警告视图和动作表单用于即刻取得用户的注意。它们向用户显示一条消息,同时还有一或多个可选的按键,用户通过这些按键来响应消息。警告视图和动作表单的功能类似,但是外观和行为不同。举例来说,UIAlertView类在屏幕上弹出一个蓝色的警告框,而UIActionSheet类则从屏幕的底部滑出动作框。

  • 导航视图 页签条和导航条和视图控制器结合使用,为用户提供从一个屏幕到另一个屏幕的导航工具。在使用时,您通常不必直接创建UITabBar和UINavigationBar的项,而是通过恰当的控制器接口或Interface Builder来对其进行配置。

  • 窗口 窗口提供一个描画内容的表面,是所有其它视图的根容器。每个应用程序通常都只有一个窗口。更多信息请参见“UIWindow的作用”部分。

    除了视图之外,UIKit还提供了视图控制器,用于管理这些对象。更多信息请参见“视图控制器的作用”部分。



<think>我们参考用户提供的引用材料,特别是引用[2]中关于视图分类的内容,结合Oracle官方文档知识,对视图分类进行系统介绍。 根据引用[2]: - 视图可分为简单视图和复杂视图,它们的区别如下: 1. 简单视图只从单表里获取数据,复杂视图从多表; 2. 简单视图不包含函数和数据组,复杂视图包含; 3. 简单视图可以实现DML操作,复杂视图不可以。 此外,在Oracle中,视图还有其他分类方式,比如根据是否物化(即是否存储实际数据)分为普通视图和物化视图(materialized view),但用户问题没有涉及物化视图,我们主要讨论逻辑视图。 因此,我们将视图分类如下: 1. **按数据来源(基表数量)分类**: - 单表视图(简单视图) - 多表视图(复杂视图的一种) 2. **按是否包含函数或分组**: - 无函数/分组的视图(简单视图) - 包含函数/分组的视图(复杂视图) 3. **按是否可更新分类**: - 可更新视图(通常对应简单视图) - 只读视图(复杂视图通常不可更新,但也可以显式声明为只读) 4. **按视图定义中是否包含子查询等复杂结构**: - 简单视图(包含简单查询) - 复杂视图(包含连接、分组、集合操作等) 另外,引用[2]中提到了创建视图时可以使用`WITH READ ONLY`选项来创建只读视图。 此外,我们还可以根据视图的层级关系分为: - 普通视图(直接基于表) - 基于视图视图视图的定义中引用了其他视图) 下面我们详细展开: ### Oracle数据库视图分类介绍 #### 1. **简单视图 (Simple Views)** - **定义**:简单视图基于单个基表(或视图),且不包含聚合函数、GROUP BY子句、DISTINCT关键字、连接操作等复杂元素。 - **特点**: - 通常支持DML操作(INSERT/UPDATE/DELETE),对视图的修改可以直接映射到基表。 - 创建语法简单,常用于简化查询或提供安全访问控制。 - **示例**: ```sql -- 创建简单视图,仅显示员工表的部分列 CREATE OR REPLACE VIEW emp_simple_view AS SELECT employee_id, first_name, last_name FROM employees WHERE department_id = 10; ``` 该视图基于单表`employees`,无聚合函数,因此可更新。 #### 2. **复杂视图 (Complex Views)** - **定义**:复杂视图通常涉及多个基表(使用JOIN操作)、聚合函数(如SUM, COUNT)、GROUP BY子句、DISTINCT、集合操作(UNION)或子查询等。 - **特点**: - 通常不可直接更新(DML操作受限),因为修改操作可能无法明确映射到基表。 - 用于实现复杂查询逻辑的封装,提供数据汇总或跨表关联数据。 - 创建时可使用`WITH READ ONLY`选项显式禁止DML操作。 - **示例**: ```sql -- 创建复杂视图:按部门统计员工数量和平均工资 CREATE OR REPLACE VIEW dept_summary_view AS SELECT d.department_name, COUNT(e.employee_id) AS emp_count, AVG(e.salary) AS avg_salary FROM departments d LEFT JOIN employees e ON d.department_id = e.department_id GROUP BY d.department_name; ``` 此视图包含多表连接和聚合函数,因此不可更新。 #### 3. **只读视图 (Read-Only Views)** - **定义**:无论视图是简单还是复杂,都可以通过`WITH READ ONLY`选项显式声明为只读视图,禁止用户执行DML操作。 - **特点**: - 提供更高的数据安全性,防止意外修改。 - 适用于报表视图或安全敏感场景。 - **示例**: ```sql -- 创建只读视图(即使它是简单视图) CREATE OR REPLACE VIEW emp_readonly_view AS SELECT employee_id, first_name, last_name FROM employees WITH READ ONLY; -- 显式声明只读 ``` 即使该视图基于单表且无聚合函数,也不能通过视图进行更新。 #### 4. **内联视图 (Inline Views)** - **定义**:内联视图是嵌入在SQL语句中的子查询,它充当临时视图,仅在该SQL语句执行期间存在。 - **特点**: - 不存储在数据库中,用于简化复杂查询的分步处理。 - 常用于FROM子句中,作为临时结果集参与主查询。 - **示例**: ```sql -- 使用内联视图查询部门平均工资高于公司平均工资的部门 SELECT department_id, avg_salary FROM ( SELECT department_id, AVG(salary) AS avg_salary FROM employees GROUP BY department_id ) dept_avg WHERE avg_salary > (SELECT AVG(salary) FROM employees); ``` 其中,子查询`dept_avg`就是一个内联视图。 #### 5. **对象视图 (Object Views)** - **定义**:对象视图是Oracle面向对象特性的扩展,允许将关系型表映射为虚拟对象类型实例。 - **特点**: - 用于在关系数据上实现面向对象编程模型。 - 支持对象类型、方法等高级特性,适用于特定设计场景。 - **示例**:略(相对少见,用户未提及,简要带过)。 #### 6. **物化视图 (Materialized Views)** - **注意**:虽然用户问题未明确提及,但作为Oracle重要视图类型,需简要对比说明。 - **定义**:物化视图是存储实际数据的物理表,定期刷新以保持与基表同步。 - **特点**: - 占用存储空间,但可显著提升复杂查询性能。 - 支持多种刷新机制(COMPLETE, FAST, ON COMMIT等)。 - 与逻辑视图(上述分类)本质不同,它存储数据快照。 #### 总结 Oracle视图主要分为简单视图和复杂视图两大类,核心区别在于: - **简单视图**:单表、无聚合/分组、可更新。 - **复杂视图**:多表/聚合/分组、通常不可更新。 此外,还有只读视图(显式声明)、内联视图(临时子查询)、对象视图(面向对象)和物化视图(物理存储)。理解这些分类有助于合理设计数据库访问层,平衡灵活性与性能[^2]。 </think> ### Oracle数据库视图分类介绍 Oracle数据库视图根据结构、功能和可操作性可分为以下几类,核心区别在于**数据来源、复杂度和DML支持**。以下是详细分类及特点: --- #### 一、按数据来源与复杂度分类 1. **简单视图 (Simple View)** - **定义**:基于**单张基表**的查询,不包含聚合函数、分组或连接操作。 - **特点**: - 支持DML操作(INSERT/UPDATE/DELETE),修改会直接映射到基表[^2]。 - 常用于简化数据访问或隐藏敏感列。 - **示例**: ```sql CREATE VIEW emp_simple AS SELECT employee_id, name, department FROM employees WHERE status = 'active'; ``` 2. **复杂视图 (Complex View)** - **定义**:涉及**多表连接、聚合函数(如SUM/COUNT)、GROUP BY分组或DISTINCT去重**。 - **特点**: - **不可直接更新**(DML操作受限),因修改可能影响多表逻辑一致性。 - 用于数据汇总或跨表分析。 - **示例**: ```sql CREATE VIEW dept_summary AS SELECT d.department_name, COUNT(e.employee_id) AS emp_count FROM departments d JOIN employees e ON d.id = e.dept_id GROUP BY d.department_name; ``` --- #### 二、按可更新性分类 1. **可更新视图 (Updatable View)** - **条件**:满足简单视图规则(单表、无聚合/分组),且未显式声明只读。 - **示例**: ```sql UPDATE emp_simple SET department = 'HR' WHERE employee_id = 101; ``` 2. **只读视图 (Read-Only View)** - **定义**:通过`WITH READ ONLY`强制禁止DML操作,增强数据安全性。 - **适用场景**:报表视图或权限控制场景。 - **示例**: ```sql CREATE VIEW emp_readonly AS SELECT * FROM employees WITH READ ONLY; -- 显式声明只读 ``` --- #### 三、按实现方式分类 1. **内联视图 (Inline View)** - **定义**:在SQL语句中**临时定义**的子查询视图,不存储于数据库。 - **作用**:简化复杂查询的分步逻辑。 - **示例**: ```sql SELECT * FROM ( SELECT department, AVG(salary) AS avg_sal FROM employees GROUP BY department ) WHERE avg_sal > 5000; ``` 2. **对象视图 (Object View)** - **定义**:基于对象类型(Object Type)的视图,支持面向对象数据建模。 - **适用场景**:映射关系表到对象结构(如JSON/XML)。 --- #### 四、特殊用途视图 1. **物化视图 (Materialized View)** - **核心区别**:**物理存储数据**(普通视图是虚拟表),定期刷新以提升性能[^1]。 - **优势**:预计算复杂查询结果,减少实时计算开销。 - **示例**: ```sql CREATE MATERIALIZED VIEW sales_mv REFRESH FAST ON COMMIT AS SELECT product_id, SUM(quantity) FROM sales GROUP BY product_id; ``` 2. **动态性能视图 (Dynamic Performance Views)** - **作用**:以`V$`开头的系统视图(如`V$SQL`, `V$SESSION`),实时监控数据库性能[^3]。 - **示例**: ```sql SELECT sql_text, executions FROM v$sql WHERE cpu_time > 100000; -- 分析高负载SQL[^3] ``` --- ### 总结对比表 | **分类** | **数据来源** | **DML支持** | **典型应用场景** | |----------------|-------------------|------------|-------------------------| | **简单视图** | 单表 | ✅ 可更新 | 数据屏蔽、简化查询 | | **复杂视图** | 多表/聚合/分组 | ❌ 不可更新 | 跨表分析、数据汇总 | | **只读视图** | 任意 | ❌ 禁止更新 | 报表输出、权限控制 | | **物化视图** | 任意(物理存储) | 部分支持 | 高性能查询、数据仓库 | | **动态视图** | 系统内存 | ❌ 只读 | 性能监控与调优[^3] | > **关键注意事项**: > - 视图更新需满足基表约束(如主键完整性)。 > - 复杂视图可通过`INSTEAD OF`触发器间接实现更新。 > - 物化视图需权衡存储成本与刷新频率[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值