为代码减负之<三>视图(SQL)

在设计数据库时为了减少数据冗余,一般都会按照三范式去设计,但有时我们在查询时需要通过一字段获取跟这

个字段相关联的好几个字段,但是他们又分布在不同的表中,这时候如果按照正常途径走的话需要同时查询好几张

表,不仅操作麻烦还容易出错。当然我们有捷径,把想要查询的字段都整合到一张虚拟表中,这就是视图的应用。

简单介绍

    概念:视图是从若干基本表或其他视图构造出来的表,是一张虚拟的表,其内容由查询定义。同真实的表一样,

视图包含一系列带有名称的列和行数据。但是视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定

义视图的查询所引用的表,并且在引用视图时动态生成。

视图的优点:

一,视图着重于特定数据。

视图可以让用户或者程序开发人员只看到他们所需要的数据,而不需要把表中的所有信息与字段暴露出来,这样增强了数据的安全性。

二,简化数据的操作,易维护。

我们可以将经常用到的多表联合查询出来的数据,或特定的结果集定义为视图,这样就起到了模块化数据的作用。我们在使用这些数据时直接查询该视图就可以,而不用到处写长长的SQL语句,这样也起到易维护的作用。

三,视图可以限定查询数据。

比如:对于不同的用户,我们只提供部分数据给他。这样,我们就可以在视图中限定结果集,然后返回该视图给他。这样,无论用户怎么对视图定义查询条件,他也不能查询出我们不想提供给他的数据。

小小试炼

在设计机房收费系统的数据库时为了减少数据冗余,把原先的学生表,分成了两个表即卡表和学生表。卡表只存

放卡的信息,学生表只存放学生的信息。这样是遵从了三范式的要求,但是在查询信息的时候却不能像原来那样

方便,需要同时查询这两个表。所以在此尝试了视图。

1. 新建视图

2. 选择涉及到的表或视图

3. 选择各个表中需要查询的字段

4. 命名保存

5. 实际应用

和普通表一样进行查询即可。"select * from StuCardView_info where
[email protected]"

虽然视图可以给我们带来种种便利,但不意味着我们就可以滥用它。因为视图其实就是一段SQL语句,所以它的结果都是每次调用时动态生成的。如果不合理的定义视图,必然带来性能上的损耗。

下面是我们在创建视图应该要注意的几点:

1. 操作视图会比直接操作基础表要慢,所以我们尽量避免在大型表上创建视图。

2. 尽量不要创建嵌套视图,就是在视图中使用视图。这样在查询时,会多次重复访问基础表,带来性能损耗。

3. 尽量在视图只返回所需的信息,尽量不要在视图使用不需要访问的表。

4. 在大型表或者复杂定义的视图,可以使用存储过程代替。

5. 频繁使用的视图,可以使用索引视图来代替。

对视图的理解还很浅显,以上的实例也只是视图的最基本应用。其它诸如索引视图、分割视图、汇总视图等还没

具体应用过。对视图的更新操作也没尝试,需要做的还有很多。

为代码减负之<三>视图(SQL)

时间: 2024-11-05 18:54:05

为代码减负之<三>视图(SQL)的相关文章

SQL Server -为代码减负之触发器

触发器是一张表的增删改操作,引起或触发对另一张表的增删改操作,所以触发器便有3种类型,分别是deleted触发器,Update触发器,insert触发器 触发器又根据替换原来的增删改操作,还是在原来的增删改完成之后进行增删改操作,分为Instead of触发器和For或者After触发器(for和after属于一种触发器) 触发器的使用涉及到两张非常重要的表用来保存已经改变或者已经在第一章被操作的表上不存在的记录,分别是虚拟表Inserted和虚拟表Deleted 虚拟表Inserted 虚拟表

为代码减负之&lt;二&gt;存储过程(SQL)

在上篇博客中介绍到了触发器的使用,并且其中也提到了触发器是个特殊的存储过程,那么什么是存储过程呢?他们 两个又到底有什么区别呢? 其实最主要的区别就是,触发器是当满足条件时系统自动执行的,而存储过程是手动调用的. 简单介绍 什么是存储过程? 定义:将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来,用户通过指定存储过程的名字 并给出参数(如果该存储过程带有参数)来调用它. 讲到这里,可能有人要问:这么说存储过程不就是一堆SQL语句而已吗?那么存储过程与一般的SQL语句有什么区

为代码减负之&lt;一&gt;触发器(SQL)

对触发器一词早有耳闻(最早是在耿大妈的数据库视频中),当初看完视频后,对理解不深刻的东西如:触发器,存储过程,事务,日志等等没有详细的去查阅,也没有具体的去尝试,应用.所以才导致了今天的博客(把以前丢下的补上).提到触发器一词,首先想到的是"触发器不能乱用","慎用触发器",不过我们可不能把这些提醒的话,当成了自己不去尝试的借口.学习要有无知者无畏的精神,管他呢,先试了再说. 简单介绍 概念:触发器是个特殊的存储过程(存储过程下篇博客中会讲到),它的执行不是由程序调

iOS:删除storyBoard,纯代码实现UITabBarController的视图切换功能

storyboard是一个很强大的编写代码的辅助工具,可以帮助布局多个视图之间的联系,既直观又能减少代码量:但是,作为一个程序员,在不使用storyboard的情况下,纯代码编写是必须的技能. 下面就用纯代码实现纯代码实现UITabBarController的视图切换功能,咱就实现三个视图之间的转换吧,代码不多,容易看的明白. 步骤: 1.删除storyboard故事板和UIViewController 2.创建三个控制器类,均继承自UIViewController,分别为FirstViewCo

在ubuntn下破解Navicat Premium,无限次使用,保留原有的视图sql文件

破解方案: 第一次执行start_navicat时,会在用户主文件夹下生成一个名为.navicat的隐藏文件夹,该文件夹下的Navicat/Mysql就是所有数据库的视图sql. 第一步:先备份.navicat目录 [html] view plaincopyprint? mv .navicat .navicat_bak mv .navicat .navicat_bak 第二步:运行navicat,会自动生成.navicat目录,这时已经再次试用30天了 [html] view plaincopy

.net之工作流工程展示及代码分享(三)数据存储引擎

数据存储引擎是本项目里比较有特色的模块. 第一,使用接口来对应不同的数据库.数据库可以是Oracle.Sqlserver.MogoDB.甚至是XML文件.采用接口进行对应: 1 public interface IWorkflowDB 2 { 3 List<Flow> GetFlows(); 4 bool SaveFlow(Flow flow); 5 bool DeleteFlow(Guid flowId); 6 7 FlowInstance GetFlowInstanceByInstance

MySQL数据库基础(三)——SQL语言

MySQL数据库基础(三)--SQL语言 一.SQL语言简介 1.SQL语言简介 SQL是结构化查询语言(Structured Query Language),是用于访问和处理数据库的标准的计算机语言.SQL语言的功能如下:A.SQL面向数据库执行查询B.SQL可从数据库取回数据C.SQL可在数据库中插入新的记录D.SQL可更新数据库中的数据E.SQL可从数据库删除记录F.SQL可创建新数据库G.SQL可在数据库中创建新表H.SQL可在数据库中创建存储过程I.SQL可在数据库中创建视图J.SQL

sql优化(oracle)- 第三部分 &#160;sql优化总结

第三部分  sql优化总结        1. 优化一般原则        2. 具体注意事项 1. SQL优化一般性原则 1)目标:减少服务器资源消耗(主要是磁盘IO) 2)设计: 1. 尽量依赖oracle优化器 2. 合适的索引(数据重复量大的列不要简历二叉树索引,可以使用位图索引: 对应数据操作频繁的表,索引需要定期重建,减少失效的索引和碎片) 3)编码: 1. 利用索引 2. 合理利用临时表 3. 避免写过于复杂的sql: 4. 尽量减小事务的粒度 2. 具体注意事项 1)查询时尽量使

新建一个索引能够同时提升三条SQL的查询性能

如题 CREATE TABLE `score` (   `id` int(11) NOT NULL,   `studentid` int(11) NOT NULL,   `subjectid` int(11) NOT NULL,   `score` int(11) NOT NULL,   PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- 新建一个索引能够同时提升三条SQL的查询性能 ALTER TABLE `score` AD