SQL练习之不破坏应用程序现有查询的修改模式
当我还是一个菜鸟的时候,当然现在也是,当我的软件需求发生变化时,并且数据库设计同样要求发生变化,我通常会放弃原有的代码(或者对原有的代码进行大改),先在我知道了两个不破坏应用程序现有查询的修改模式,下面就来一个个介绍!
假设你的公司有一张记录在数据库中的设备登记表:
资产标识 描述 收到日期
50430 桌面PC 2016-5-6
50431 19寸监视器 2016-5-7
现在公司再融资之后,进行了扩张,在另一个地方又建立了新的办公室,这个时候如果简单的复制并修改原先的应用和数据库,并且在两个位置独立运行的实例是一种诱人的做法(说简单点就是再建一个用于维护新办公室信息的页面),然后这种做法虽然快速地解决了当前的问题,但是从长远的角度看会引起跟多的问题,这样我们有两个应用程序需要维护(并且这两个应用程序在功能上基本接近),所以这种方法不具有伸缩性,并且随着办公室的增加会使问题变得更加糟糕!
下面是分析列子所需的sql文件:
- CREATE TABLE Equipment(
- AssetTag varchar(30) not null,
- Description varchar(255) null,
- RequiredDate datetime null
- )
- INSERT INTO Equipment VALUES('','桌面PC',GETDATE())
- INSERT INTO Equipment VALUES('','19寸监视器',GETDATE())
代码如下:
- SELECT *
- FROM Equipment
aaarticlea/png;base64,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" alt="" />
1、通过修改表的方式完成不破坏应用程序现有查询的修改模式 代码如下:
- ALTER TABLE Equipment ADD Office varchar(30) null
- UPDATE Equipment
- SET Office='Headquarter'
- SELECT *
- FROM Equipment
aaarticlea/png;base64,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" alt="" />
这个时候,在表中添加一个新列Office,并且将现在设备表中的每一行数据都被赋值给了现在的办公室。
但是这一点都不符合大多数的实际情况,大所属情况可能是,我们将老办公室的一部分设备(用不到了的)搬到新办公室,然后老办公室被提升为总部(负责管理),这个时候只能手动去修改哪些已经被转移的设备到新的办公室!
现在我们可以插入新办公室的数据行了。然而这个时候问题又来了,原先依赖与这个表的所有查询都需要被重新检查。没有指定列的INSERT操作都会执行失败。因此,如果原来的INSERT语句为:
- INSERT INTO Equipment VALUES('','19寸监视器',GETDATE())
DBMS会报错:列名或所提供值的数目与表定义不匹配。
但是,如果语句是:
- INSERT INTO Equipment(AssetTag,Description,RequiredDate) VALUES('','桌面PC',GETDATE())
那么这句INSERT将会执行成功,NULL值将会被输入Office列。
可以看到,即使表以及被修改,还能是原先的查询正常的工作,但是他们会返回来自两个办公数的数据,即使我们只希望返回一个办公室的数据!
2、第二种模式通过代替表的视图来完成不破坏应用程序现有查询的修改模式
另一种方式是把现有的设备数据复制到新设计的设备表中,然后将新表中的每一行数据都归为老办公室的,如果设备有移动,那就做相应数据的更改,代码如下:
- CREATE TABLE EquipmentMultiSite(
- AssetTag varchar(30) not null,
- Description varchar(255) null,
- RequiredDate datetime null,
- Office varchar(30) null
- )
- INSERT
- INTO EquipmentMultiSite
- SELECT Equipment.*,'Headquarter'
- FROM Equipment
- SELECT *
- FROM EquipmentMultiSite
aaarticlea/png;base64,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" alt="" />
这里如果如果设备有移动,那就做相应数据的更改!修改之后的数据就是老办公室的设备数据!
现在就可以删除Equipment表,并用一个同名的Equipment视图来替换!
- DROP TABLE Equipment
- go
- CREATE VIEW Equipment AS
- SELECT AssetTag,Description,RequiredDate
- FROM EquipmentMultiSite
- WHERE Office='Headquarter'
- go
这个时候,你会发现应用程序现有的查询,依然能够正常的工作,原先的办公室使用Equipment,不在乎他使用的是表还是视图,老办公室的经理现在应该能够继续利用该数据库的应用程序,但是他仅能操作(增删查该)老办公室的有关的设备。
但是对于新办公室的经理,你还需要做一些工作,你要确保Equipment关联每一个用户,这样的话,你就能为每一个用户以硬编码的方式指定正确的办公室!
SQL练习之不破坏应用程序现有查询的修改模式的更多相关文章
- SQL Server2005中使用XML-数据类型、查询与修改
SQL 2005引进了XML数据类型,可以直接将XML当作字符串直接存入该列. 这样可以不需要对它进行XML解析. USE AdventureWorks -- 创建一个送货排程表 CREATE TAB ...
- [强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)
原文:[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!) [强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天 ...
- SQL点滴15—在SQL Server 2008中调用C#程序
原文:SQL点滴15-在SQL Server 2008中调用C#程序 T-SQL的在执行普通的查询的时候是很高效的,但是在执行循环,判断这样的语句的时候效率就不那么的高了.这时可以借助CLR了,我们可 ...
- 什么是Pro*C/C++,嵌入式SQL,第一个pro*c程序,pro*c++,Makefile,Proc增删改查
1 什么是Pro*C/C++ 1.通过在过程编程语言C/C++中嵌入SQL语句而开发出的应用程序 2.什么是嵌入式SQL 1.在通用编程语言中使用的SQL称为嵌入式SQL 2.在SQL标准中定义 ...
- SQL使用数据库引擎存储过程,系统视图查询,DBA,BI开发人员必备基础知识
在开发过程中会遇到需要弄清楚这个数据库什么时候建的,这个数据库中有多少表,这个存储过程长的什么样子等等信息,今天把自己工作过程中经常用到的一些数据库引擎存储过程,系统视图等等总结一下以备不时之用.下面 ...
- 警惕 MySql 更新 sql 的 WHERE 从句中的 IN() 子查询时出现的性能陷阱
警惕 MySql 更新 sql 的 WHERE 从句中的 IN() 子查询时出现的性能陷阱 以下文章来源:https://blog.csdn.net/defonds/article/details/4 ...
- sql处理百万级以上的数据提高查询速度的方法
原文:http://blog.csdn.net/zhengyiluan/article/details/51671599 处理百万级以上的数据提高查询速度的方法: 1.应尽量避免在 where 子句中 ...
- 《转》sql处理百万级以上的数据提高查询速度的方法
处理百万级以上的数据提高查询速度的方法: 1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考 ...
- [SQL] SQL 基础知识梳理(五) - 复杂查询
SQL 基础知识梳理(五) - 复杂查询 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5939796.html 序 这是<SQL 基础知识梳理( ...
随机推荐
- 新浪IP归属地API
之前用过腾讯的AIP,但是官方暂停这个服务了,新浪的API时间很久了,稳定性也很好,但愿能一劳永逸. ''' '''
- mysql 插入前 锁表问题
$dbh = DBI->connect("dbi:mysql:database=$db_name;host=$ip;port=3306",$user,$passwd,{ Ra ...
- C++多字节字符转换为宽字符的两种方法
目前知道有两种方式:可以提供宽字符与ANSI字符之间的转换, 第一种由COM库提供的函数 char* _com_util::ConvertBSTRToString(BSTR ); BSTR _com ...
- Codeforces 734F Anton and School(位运算)
[题目链接] http://codeforces.com/problemset/problem/734/F [题目大意] 给出数列b和数列c,求数列a,如果不存在则输出-1 [题解] 我们发现: bi ...
- javascript数组去重算法-----3
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【转】C#自定义控件:WinForm将其它应用程序窗体嵌入自己内部
PS:文末的附件已更新,这次我放到博客园里面了,不会弹出广告,放心下载,O(∩_∩)O谢谢! 这是最近在做的一个项目中提到的需求,把一个现有的窗体应用程序界面嵌入到自己开发的窗体中来,看起来就像自己开 ...
- 树形dp-hdu-4714-Tree2cycle
题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=4714 题目意思: 给一棵树,去掉一条边和增加一条边的花费都为1,求最小的花费,使该树变成一个环. 解 ...
- RemoveAll 要重写equals方法
public class User { private String name; private int age; //setter and getter public String getName( ...
- Linux程序设计 读笔1
第一章 入门 Linux应用程表现为两种特殊类型文件:可执行文件 + 脚本文件 /bin 二进制文件目录,存放启动系统时用到的标准程序 /usr/bin 用户二进制文件目录,存放用户使用的标准程序 / ...
- (转)IE劫持原理 BHO
为什么“浏览器劫持”能够如此猖狂呢?放眼众多论坛的求助贴,我们不时可以看到诸如“我的IE被主页被改了,我用杀毒工具扫了一遍都没发现病毒,我把主页改回自己的地址,可是一重启它又回来了!”.“我的系统一开 ...