为代码减负之<三>视图(SQL)
在设计数据库时为了降低数据冗余。一般都会依照三范式去设计,但有时我们在查询时须要通过一字段获取跟这
个字段相关联的好几个字段。可是他们又分布在不同的表中,这时候假设依照正常途径走的话须要同一时候查询好几张
表,不仅操作麻烦还easy出错。当然我们有捷径。把想要查询的字段都整合到一张虚拟表中,这就是视图的应用。
简介
概念:视图是从若干基本表或其它视图构造出来的表,是一张虚拟的表。其内容由查询定义。
同真实的表一样。
视图包括一系列带有名称的列和行数据。
可是视图并不在数据库中以存储的数据值集形式存在。
行和列数据来自由定
义视图的查询所引用的表,而且在引用视图时动态生成。
视图的长处:
一,视图着重于特定数据。
视图能够让用户或者程序开发者仅仅看到他们所须要的数据,而不须要把表中的全部信息与字段暴露出来,这样增强了数据的安全性。
二。简化数据的操作,易维护。
我们能够将经经常使用到的多表联合查询出来的数据,或特定的结果集定义为视图,这样就起到了模块化数据的作用。
我们在使用这些数据时直接查询该视图就能够。而不用到处写长长的SQL语句,这样也起到易维护的作用。
三,视图能够限定查询数据。
比方:对于不同的用户,我们仅仅提供部分数据给他。这样,我们就能够在视图中限定结果集。然后返回该视图给他。这样。不管用户怎么对视图定义查询条件。他也不能查询出我们不想提供给他的数据。
小小试炼
在设计机房收费系统的数据库时为了降低数据冗余。把原先的学生表,分成了两个表即卡表和学生表。卡表仅仅存
放卡的信息,学生表仅仅存放学生的信息。这样是遵从了三范式的要求。可是在查询信息的时候却不能像原来那样
方便,须要同一时候查询这两个表。所以在此尝试了视图。
1. 新建视图
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDAyODg2OQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">
2. 选择涉及到的表或视图
3. 选择各个表中须要查询的字段
4. 命名保存
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDAyODg2OQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast">
5. 实际应用
和普通表一样进行查询就可以。"select * from StuCardView_info where
CID=@CID"
尽管视图能够给我们带来种种便利。但不意味着我们就能够滥用它。
由于视图事实上就是一段SQL语句。所以它的结果都是每次调用时动态生成的。假设不合理的定义视图,必定带来性能上的损耗。
以下是我们在创建视图应该要注意的几点:
1. 操作视图会比直接操作基础表要慢。所以我们尽量避免在大型表上创建视图。
2. 尽量不要创建嵌套视图,就是在视图中使用视图。这样在查询时。会多次反复訪问基础表,带来性能损耗。
3. 尽量在视图仅仅返回所需的信息,尽量不要在视图使用不须要訪问的表。
4. 在大型表或者复杂定义的视图,能够使用存储过程取代。
5. 频繁使用的视图,能够使用索引视图来取代。
对视图的理解还非常浅显。以上的实例也仅仅是视图的最基本应用。其他诸如索引视图、切割视图、汇总视图等还没
详细应用过。
对视图的更新操作也没尝试,须要做的还有非常多。
为代码减负之<三>视图(SQL)的更多相关文章
- 《asp.net mvc3 高级编程》第三章 视图
一.视图的作用 视图的职责是向用户提供界面.从ASP.NET MVC3开始,视图数据也可以通过ViewBag属性访问.例如:ViewBag.Message 就等于ViewData["Mess ...
- [Xcode 实际操作]三、视图控制器-(1)使用UIScrollView展示多个视图可控制器
目录:[Swift]Xcode实际操作 本文将演示使用滚动视图创建多个页面. [Create a new Xcode project]->[Single View App]->[Next] ...
- day 53-1 Django基础三之视图函数
Django基础三之视图函数 本节目录 一 Django的视图函数view 二 CBV和FBV 三 使用Mixin 四 给视图加装饰器 五 Request对象 六 Response对象 一 Dja ...
- day 67 Django基础三之视图函数
Django基础三之视图函数 本节目录 一 Django的视图函数view 二 CBV和FBV 三 使用Mixin 四 给视图加装饰器 五 Request对象 六 Response对象 一 Dja ...
- Laravel教程 三:视图变量传递和Blade
Laravel教程 三:视图变量传递和Blade 此文章为原创文章,未经同意,禁止转载. Blade 上一篇我们简单地说了Router,Views和Controllers的工作流程,这一次我就按照上一 ...
- 为代码减负之<一>触发器(SQL)
对触发器一词早有耳闻(最早是在耿大妈的数据库视频中),当初看完视频后,对理解不深刻的东西如:触发器,存储过程,事务,日志等等没有具体的去查阅,也没有具体的去尝试,应用.所以才导致了今天的博客(把曾经丢 ...
- ASP.NET MVC5 高级编程-学习日记-第三章 视图
开发人员之所以花费大量时间来重点设计控制器和模型对象,是因为在这些领域中,精心编写的整洁代码是开发一个可维护Web应用程序的基础. 3.1 视图的作用 视图的职责是向用户提供用户界面.当控制器针对被请 ...
- MySQL从删库到跑路_高级(三)——视图
作者:天山老妖S 链接:http://blog.51cto.com/9291927 一.视图简介 1.视图简介 视图是由SELECT查询语句所定义的一个虚拟表,是查看数据的一种非常有效的方式.视图包含 ...
- Mysql内置功能《三》视图
一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的 ...
随机推荐
- 虚基类——(1)定义人员类Person: 公有成员:姓名(Name); 保护成员:性别(Gender),年龄(Age); 构造函数和析构函数
题目描述: (1)定义人员类Person: 公有成员:姓名(Name): 保护成员:性别(Gender),年龄(Age): 构造函数和析构函数 (2) 从人员类Person派生学生记录类Student ...
- vue 子组件向父组件传值通信
父组件 子组件 子组件用this.$emit
- SqlServer数据库表导入SqlLite数据库表保持日期时间类型字段的格式
在写查询功能的过程中遇到一个这样的问题:按日期范围查询,sql语句是:where dt>=用户选择起始日期&&dt<=用户选择结束日期.数据库中的数据如图1,我选择的测试数 ...
- 匈牙利&&EK算法(写给自己看)
(写给自己看)匈牙利算法(最大匹配)和KM算法(最佳匹配) 匈牙利算法 思想 不断寻找增广路,每次寻得增广路,交换匹配边和非匹配边,则匹配点数+1 这里增广路含义:交错路,即从未匹配点出发经过未匹配边 ...
- mysql备份脚本二(带日志)
#!/bin/bashdb_PATH='/shareSAN/mysqldata/ocs/mysql_back_wjf' #备份文件保存的路径#db_DBNAME='sz_ocs' #备份的数据库名db ...
- Nginx负载均衡health_check分析
在Nginx负载均衡中,我们很难保证说每一台应用服务器都能一直正常的运行下去.但是我们可以通过设置Nginx来检测这些应用服务器,检测这些服务器当中不能访问的. Nginx的检测方式分为两种,一种是被 ...
- jQuery元素属性操作
在jQuery中,用attr()方法来获取或者设置元素属性,removeAttr()方法用来删除元素属性. attr() 实例: var $para=$('p');//获取<p>节点 va ...
- "SetDestination" can only be called on an active agent that has been placed on a NavMesh. 解决办法
1.设置了 navmesh之后 要bake 也就是烘焙之后 才有效果 2.在unity 中 window->navigation 4.基本上问题应该得以解决:
- sublime 自定义快捷生成代码块
菜单栏目选 Tools(工具) =>Developer(插件开发)=>New Snippet....(新建代码片段),如图: 接着会新开一个标签页,会附带一些内容:如图: 将“Hello, ...
- nyoj27-水池数目【DFS】
题目描述: 南阳理工学院校园里有一些小河和一些湖泊,现在,我们把它们通一看成水池,假设有一张我们学校的某处的地图,这个地图上仅标识了此处是否是水池,现在,你的任务来了,请用计算机算出该地图中共有几个水 ...