首页 > 代码库 > 为代码减负之<三>视图(SQL)
为代码减负之<三>视图(SQL)
在设计数据库时为了减少数据冗余,一般都会按照三范式去设计,但有时我们在查询时需要通过一字段获取跟这
个字段相关联的好几个字段,但是他们又分布在不同的表中,这时候如果按照正常途径走的话需要同时查询好几张
表,不仅操作麻烦还容易出错。当然我们有捷径,把想要查询的字段都整合到一张虚拟表中,这就是视图的应用。
简单介绍
概念:视图是从若干基本表或其他视图构造出来的表,是一张虚拟的表,其内容由查询定义。同真实的表一样,
视图包含一系列带有名称的列和行数据。但是视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定
义视图的查询所引用的表,并且在引用视图时动态生成。
视图的优点:
一,视图着重于特定数据。
视图可以让用户或者程序开发人员只看到他们所需要的数据,而不需要把表中的所有信息与字段暴露出来,这样增强了数据的安全性。
二,简化数据的操作,易维护。
我们可以将经常用到的多表联合查询出来的数据,或特定的结果集定义为视图,这样就起到了模块化数据的作用。我们在使用这些数据时直接查询该视图就可以,而不用到处写长长的SQL语句,这样也起到易维护的作用。
三,视图可以限定查询数据。
比如:对于不同的用户,我们只提供部分数据给他。这样,我们就可以在视图中限定结果集,然后返回该视图给他。这样,无论用户怎么对视图定义查询条件,他也不能查询出我们不想提供给他的数据。
小小试炼
在设计机房收费系统的数据库时为了减少数据冗余,把原先的学生表,分成了两个表即卡表和学生表。卡表只存
放卡的信息,学生表只存放学生的信息。这样是遵从了三范式的要求,但是在查询信息的时候却不能像原来那样
方便,需要同时查询这两个表。所以在此尝试了视图。
1. 新建视图
2. 选择涉及到的表或视图
3. 选择各个表中需要查询的字段
4. 命名保存
5. 实际应用
和普通表一样进行查询即可。"select * from StuCardView_info whereCID=@CID"
虽然视图可以给我们带来种种便利,但不意味着我们就可以滥用它。因为视图其实就是一段SQL语句,所以它的结果都是每次调用时动态生成的。如果不合理的定义视图,必然带来性能上的损耗。
下面是我们在创建视图应该要注意的几点:
1. 操作视图会比直接操作基础表要慢,所以我们尽量避免在大型表上创建视图。
2. 尽量不要创建嵌套视图,就是在视图中使用视图。这样在查询时,会多次重复访问基础表,带来性能损耗。
3. 尽量在视图只返回所需的信息,尽量不要在视图使用不需要访问的表。
4. 在大型表或者复杂定义的视图,可以使用存储过程代替。
5. 频繁使用的视图,可以使用索引视图来代替。
对视图的理解还很浅显,以上的实例也只是视图的最基本应用。其它诸如索引视图、分割视图、汇总视图等还没
具体应用过。对视图的更新操作也没尝试,需要做的还有很多。