机房收费系统--存储过程、视图

    上篇文章对《机房收费系统--数据库设计》对数据库设计中提到,要想自己的数据库既满足设计三范式,又能够满足需求,存储过程和视图是两个不错的选择。那什么是存储过程?什么是视图?两者又存在什么样的微妙关系?通过本次机房收费系统的操作,有了一个模糊性的认识。

【简介】

        存储过程是一组能够能完成特定功能的SQL语句集,只要一次编译便能够反复利用,说白了就是保存在SQL中的一个函数,通过传递参数来实现不同的功能,但它又不同于函数,在特定情况下不必有返回值。

        视图是SQL中动态生成的虚拟表,其内容由查询定义,常用于多个表中查询数据的重组,这样不但促使了复杂查询的简单化,而且提高了数据的安全性。在组件视图的过程中,程序提供给用户的数据可以根据权限来适当提取和隐藏。

【机房收费中的应用】

       上机与下机字段分别分配了两张表:

               上机(卡号,电脑编号,上机时间,上机日期,备注)

               下机(卡号,电脑编号,下机日期,下机时间,消费时间,消费金额,现有金额)

       当查询一个卡号的上下机记录时就要应用到两张表,建立两个查询过程难免有些繁琐,还要考虑在代码实现端将两个表的内容组合在一起,此时就应考虑用视图的方法进行查询。

       在SQL Sever的浏览器中选择创建的数据库--视图--右击新建视图,选择自己需要的表,通过主外键建立连接,选择字段,就生成了想要的视图:

                             机房收费系统--存储过程、视图_第1张图片

       组合查询基本逻辑相同,只是查询过程中使用的参数不同,因此考虑使用存储过程,只需要编译一次,重复利用,不仅减少了代码量,同时减轻了电脑运行负担。

      在数据库下的可编程性--存储过程--右键新建存储过程,编写代码:

USE [Charge]
GO
/****** Object:  StoredProcedure [dbo].[PROC_GroupQuiery]    Script Date: 2015/4/26 20:00:51 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		<王海鹏>
-- Create date: <2015/4/26 20:00:51>
-- Description:	<应用于组合查询>
-- =============================================
ALTER PROCEDURE [dbo].[PROC_GroupQuiery] 
	@field1 as char(30),   --查询条件参量
	@field2 as char(30),
	@field3 as char(30),
	@operate1 as char(30),  --条件参量:<、>、=
	@operate2 as char(30),
	@operate3 as char(30),
	@conent1 as char(30),   --参量字段
	@conent2 as char(30),
	@conent3 as char(30),
	@relate1 as char(30),    --组合参量:与、或
	@relate2 as char(30),
	@getTable as varchar(50)   --获得表名
AS
	declare @tempSQL varchar(500)  --接收select语句
BEGIN
    --char(32)为空格,char(39)为单引号
	SET @TempSql='SELECT * FROM '+@getTable +' WHERE ' +@field1 +@operate1+char(39) +@conent1 + char(39)  
	if @relate1 !=''   --第一个组合不为空
	begin   --条件嵌套
	  SET @TempSql=@TempSql+@relate1+CHAR(32)+@field2 +@operate2+CHAR(39)+@conent2+CHAR(39)    
        if @relate2!= ''    --第二个组合不为空
        BEGIN    
        SET @TempSql=@TempSql+@relate2+CHAR(32)+@Field3+@operate3+CHAR(39)+@conent3+CHAR(39)    
        END    
	end
	EXECUTE(@TempSql) 
END

【对比学习】

         1. 返回值不同:视图返回查询得到的虚拟表;存储过程返回一个数据集合;函数返回一个数值或者一张表。
         2. 目的不同:存储过程主要用于处理数据;视图主要负责呈现数据,维护数据安全性。
         3. 本质相同:都是一组SQL程序集合

【总结】

       数据库设计三范式的使用说到底是为了对数据集的解耦,减少数据重复,但另一方面又提出如何保证数据的联系的问题。视图和存储过程正是应这些问题而生。对这些技术的使用很少,还很肤浅,期待在以后的学习过程中不断学习不断利用。

你可能感兴趣的:(数据库,vs)