为代码减负之<三>视图(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语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的 ...
随机推荐
- js设计模式-命令模式
命令模式是一种组织型模式,主要用在把调用对象(用户界面.API和代理等)与实现操作的对象隔离开.也就是说 ,凡是两个对象间的互动方式需要更高的模块化程度时都可以用到这种模式. 命令模式的好处:1.提高 ...
- AJAX复习笔记
AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术.通过在后台与服务器进行少量数据交换,AJAX 可况下更新以使网页实现异步更新. 工作原理: AJAX是基于现有的Internet ...
- LeetCode.2-两个数字相加(Add Two Numbers)
这是悦乐书的第340次更新,第364篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Medium级别的第1题(顺位题号是2).给定两个非空链表,表示两个非负整数. 数字以相反的顺序存储, ...
- c# winform 获取listview 选中行某列的值
给listview填充数据: for (int i = 0; i < 5; i++) { ListViewItem lvitem = new ListViewItem(); lvitem.Sub ...
- MVC学习日记(三)EntityFramework
其实学会了第一篇的创建和第二篇的使用以后,基本的mvc操作足够了,至于验证神马的,还不如用Jquery.h5的好看适用,所以接下来, 后续上会讲一些比较实用的. 在之前的文章说到了基础的使用, 那么, ...
- Docker 配置与实践清单
https://mp.weixin.qq.com/s/yeEkF5DKa9IjmIvuzOTT3g
- Unity3d Vector3
using UnityEngine; using System.Collections; public class test : MonoBehaviour { void Start () { Vec ...
- Cupid's Arrow[HDU1756]
Cupid's Arrow Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- 洛谷P1208 [USACO1.3]混合牛奶 Mixing Milk(贪心)
题目描述 由于乳制品产业利润很低,所以降低原材料(牛奶)价格就变得十分重要.帮助Marry乳业找到最优的牛奶采购方案. Marry乳业从一些奶农手中采购牛奶,并且每一位奶农为乳制品加工企业提供的价格是 ...
- Paint、Canvas.2
1:使用Cavans画个简单图形 2:过程 2.1:绘制最外部的圆 /*** 初始化 paint */ Paint paint; paint = new Paint(); paint.setColor ...