【机房重构】SQL之视图

最近在重构机房收费系统,越往后就会越感觉到这里更多的是对之前学过知识(数据库,设计模式)的一种应用和回顾。比如在登录功能中用到了抽象加反射,在学生下机中,我们可以用触发器来同时更新两个表。这里就先说一下视图的使用,关于视图的有点和作用百度上有很多答案,在此不再赘述。

视图定义:

自己理解:在涉及到多张表的操作的时候就可使用视图。这样可以避免与数据库直接联系。并且当你更新数据库数据时,就会自动更新视图中的数据,方便以后查询。

百度百科:计算机数据库中的视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。

视图建立:

   这里我们通过在SQL Sever中使用企业管理器和T-Sql语句来创建。

 第一种:1.打开SQL Sever就会有如下的界面:

                          

 
       
2.右击【视图】,选择【新建视图】,就会如下图所示:

       3.在这里选择你要用到的多个表,最少是两张表。选择后【添加】,就会有如下所示:

勾选你要用到的字段,保存之后,视图就创建成功了。

注:这里的主外键设置应该注意。没有主外键在查询数据时,会出现查询结果卡号和学号不对应的情况。

                         

 第二种:通过编写语句来创建视图

<span style="font-family:SimSun;font-size:18px;">CREATE VIEW [dbo].[V_StudentInfo]
AS
SELECT     dbo.T_CardInfo.CardNo, dbo.T_CardInfo.Cash, dbo.T_StudentInfo.StudentNo, dbo.T_StudentInfo.StudentName, dbo.T_StudentInfo.CLassNO, dbo.T_StudentInfo.Grade,
                      dbo.T_StudentInfo.Department, dbo.T_StudentInfo.Sex, dbo.T_StudentInfo.CardNo AS Expr1
FROM         dbo.T_CardInfo INNER JOIN
                      dbo.T_StudentInfo ON dbo.T_CardInfo.CardNo = dbo.T_StudentInfo.CardNo</span>

视图应用:

(学生上机中查询学生信息(T_StudentInfo表)和余额(T_CardInfo表))为例

    首先来看看学生上机的流程:当输入卡号之后,首先要查询是否存在此卡。之后若存在,就要显示学生信息余额。这样就涉及到了两张表的查询操作。

不用视图的情况:在写查询的时候,我们要写查询学生信息的方法和查询卡余额的方法。

使用视图的情况:将两张表变成视图存在,就只需要写一个查询方法就可将所需要的信息全部查询出来。

使用视图的实例展示:

<span style="font-size:18px;"> 'D层
    ''' <summary>
    ''' 学生上机
    ''' </summary>
    ''' <param name="cardno">按卡号查找</param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function QueryCardNoDAL(ByVal cardno As Entity.V_StudentEntity) As List(Of Entity.V_StudentEntity) Implements IDAL.ILine.QueryCardNoDAL
        Dim helper As New SqlHelper
        Dim enLine As New Entity.V_StudentEntity
        Dim dt As DataTable

        Dim sql As String = "select * from<strong> V_StudentInfo </strong>where [email protected]"
        Dim params As SqlParameter() = {New SqlParameter("@CardNo", cardno)}

        dt = helper.querydata(sql, CommandType.Text, params)

        Dim mylist As List(Of Entity.V_StudentEntity)
        mylist = Entity.EntityHelper.convertToList(Of Entity.V_StudentEntity)(dt)

        Return mylist
    End Function</span>

记得在学习数据库阶段,米老师找了几个人开会说说目前的学习。那会还和老师说,看完视频对于视图、触发器、存储过程就好像只是有了一个名词概念。具体干嘛用就不了解。 现在在用过这些之后,就会发现,只要做了,其实都不难。

【机房重构】SQL之视图,布布扣,bubuko.com

时间: 2024-12-15 14:26:21

【机房重构】SQL之视图的相关文章

机房重构——视图

视图.存储过程.触发器等等早就听说过,却没有真正接触过,一直处在一个以后再说的状态中,逃是逃不掉了. 机房重构,重构出了什么?留着这个疑问.重构完以后再做总结. 视图:在SQL中,外模式一级数据结构的基本单位是视图,就是从若干个基本表和(或)其他视图构造出来的表.其实就是一张虚表. 注意:在使用视图的时候,应当提前设置好关联表的主外键. 在机房收费系统里功能之一,学生查看余额时,用到了两张表的内容,Card表里的状态和余额,其他信息都来自学生表. 视图的创建和删除: 方法一:使用SQL语句创建视

【机房重构】SQl之存储过程

上篇博客介绍了SQl视图的使用,这篇博客通过内容和实例应用来简单介绍一下存储过程. 在机房重构的过程中,犯了个大忌(数据库设计在重构过程被修改了),所以影响了一个功能的实现,就又重新敲了一下机房收费系统退卡功能.正如"塞翁失马,焉知非福",纯三层的代码实现变成了利用存储过程之后的完美实现.期间的磕磕绊绊都让我们对存储过程加深了理解. 存储过程: 定义: 当需要写多条SQl语句的时候,就可以使用存储过程,在数据库中建立存储过程.之后在VS中通过调用存储过程来使用. 百度百科:存储过程(S

机房重构(4)——触发器的使用

上篇文章<机房重构(3)--存储过程>介绍了存储过程的使用,接下来介绍一下触发器的使用.说到触发器,我们并不陌生,我们学习过程中涉及到很多相关的知识,但是欠缺的实践应用.通过这次机房收费,对触发器有了进一步的理解. 1.简介 触发器也是一种与表事件相关的特殊的存储过程.由事件来触发,当对一个表进行操作(insert,delete,update)时就会激活它执行.经常用于加强数据的完整性约束和业务规则等.它与存储过程的区别是触发器不能执行EXCUTE语句调用,而是在用户执行Transact_SQ

【机房重构】总结

机房收费个人版算是磕磕绊绊完毕了,这里话不多说,收获的东西,遇到的困难.仅仅有自己才干懂得.总结一下重构过程中的问题.不足及学到的东西. 一.验收问题 那天紧赶慢赶的完毕及功能实现,就想着急的找师父给看看.结果师父正好有事.就找人给自己点点看看有什么不足的地方.辛亏那是师父有事啊.出现的错误非常多都是由于自己考虑不全面,就是没有做好为人民服务. 这里基本的总结几点验收时师父的指点和自己发现的问题. 1.SQL注入的问题.能够去了解一下 2.datagridview中字段直接显示了数据库中的字段,

机房重构小结(三层)

用了两个月纯三层的<机房重构>算是完成了,期间SQL软件各种不配合导致的各种修复从而获得了一大把"美好"经验,最后在卸装几次后还是无可避免的重装了系统,这两个月中用在SQL上的时间一个星期有过之而无不及.回头看看GrindStone中单对机房重构的记录才50来个小时,瞬间有种被SQL伤到的感觉,别人都在做系统我在--被玩电脑.所以现在抱着一种壮士将死的大义凛然先让机房收费早点升天吧. 对于机房收费系统的重构,主要分四为个方面:业务逻辑.数据库.分层.控件. 业务逻辑 这里的

机房重构系统的分类

这段时间真的是一心扑上机房了,不断的克服一些对VB.NET语言的水土不服的感觉后,终于对个人版机房重构有了很直观的认识.这个系统跟我们上一次的机房功能一样,也是对自己学习情况的一个检查,经过对机房的望闻问切,我觉得这张图很符合我对机房的理解. 在机房重构中,重点还是在系统与数据库的交互过程,同时在这次的系统中,我们还要考虑系统开发的时候的编码规范化.正规化,把我们在C/S过程中学到的知识运用到机房重构中,这就是检验我们的学习成果. 总结下这段时间的收获:对机房重构的功能进行分类,便于理清整个系统

机房重构-完结篇

机房重构已经结束了,自从软考开始,光顾着准备软考和三级网络等级考试就没来得急总结.软考一开始,突然觉得时间好少,时间过得好快.这节奏,有点飕飕的. ---------------------技术总结: 熟悉了对Visual Studio这一开发环境的使用,深入了解了VB.net语言基础有了一定的认识并且学会使用.这一次使用三层架构,利用分分层的思想,深入理解了各层的职责.代码规范,这一次再敲代码的时候先学了一下代码规范,也把头文件注释设计好,让自己的代码漂亮一点. 最终的要思想还是面向对象,根据

机房重构 之 SqlHelper

机房收费开始一段时间了,刚开始也是敲了一段时间,发现D层访问数据库出现了大量的重复代码,每个D层类都要 单独访问数据库.发现问题,咱们就解决问题,查阅前人的博客,发现了一个SqlHelper类,运用一下,果然好用,省 去了大量时间去写重复的代码. 小面对SQL中的一些类方法进行简单的介绍. 1.SQLHelper.ExecuteNonQuery    作用:用于执行语句 2. SQLHelper.ExecuteScalar       作用:用于获取单字段值语句 3. SQLHelper.Exe

机房重构(3)——存储过程

在敲机房收费过程中我们都会遇到这样的问题:很多功能实现都需要涉及到多张表的操作,比如充值.退卡.结账等功能的实现.这就需要我们多次对数据库进行操作,不仅代码量大大增加,而且执行效率也会大打折扣.为了提高效率,于是,存储过程就华丽登场了. 1.简介 存储过程是一组为了完成特定功能的语句集,经过编译后存储在数据库中,用户通过制定存储过程的名称并给出参数来执行它.存储过程在运算时生成执行方式并存储在数据库当中,当其再次运行时速度比单个的SQL语句要快.    2.优缺点 1)优点 a.复用性强.存储过