浅析数据完整性问题

时间:2007-10-07 12:44:00 

  在开发C/S结构的大型数据库应用软件时,一般情况下,软件开发人员和数据库设计人员并不是同一个人,这就需要协商好一些即可由程序设计人员解决又可由数据库设计人员来解决的问题,保证数据完整性就是一个这样的问题。  笔者举一个最简单的例子:货物出库、退货的例子
  
   这里有库存表(kcb)、出库单表(ckb) 和退货单表(thb)
  
   库存表包含如下列:WPBH,KCSL〔物品编号,库存数量〕
  
   出库单表含如下列:WPBH,CKSL〔物品编号,出库数量〕
  
   退货单表含如下列:WPBH,THSL〔物品编号,退货数量〕
  
   假如我们进行了如下交易:
  
   1.物品A有十件出库
  
   2.物品A有五件退货(可再出库)
  
   我们都知道,这两笔交易都需要修改库存表,但修改库存表的工作由谁来做。可以肯定的说,程序设计人员和数据库设计人员都可以完成。
  
   首先我们举例由程序设计人员如何完成:
  
   1.出库时,产生新出库记录插入到出库单表中,同时将库存表中的KCSL用KCSL减掉出库数量的值取代。
  
   2.退货时,产生新退货记录插入到退货表中,同时将库存表中的KCSL用KCSL加上退货数量的值取代。
  
   由于不同的开发平台,完成这项工作的代码不尽相同,故不写出具体代码。
  
   接下来看看由数据库设计人员是如何完成这项工作:
  
   数据库设计人员完成这项工作靠的是触发器。
  
   数据库设计人员建立如下SQL语句为出库单表(ckb)建立插入触发器 

 CREATE TRIGGER FORINSERT 
  ON ckb 
  FOR INSERT 
  AS 
  UPDATE kcb 
  SET kcb.kcsl=kcb.kcsl - inserted.cksl 
  FROM inserted 
  WHERE kcb.wpbh=inserted.wpbh 


  同样,也要为退货单表建立类似的SQL语句 

CREATE TRIGGER FORINSERT 
  ON thb 
  FOR INSERT 
  AS 
  UPDATE kcb 
  SET kcb.kcsl=kcb.kcsl + inserted.thsl 
  FROM inserted 
  WHERE kcb.wpbh=inserted.wpbh 


   可以很明显地看出,如果两个人都做了工作,程序在运行过程中一定会出错。
  
   但这项工作具体应该由谁来完成?我私下认为,应该由数据库设计人员来完成,原因如下:
  
   1、一个可移植性好的软件应该与数据的结构无关;
  
   2、程序的研制和调试更加简单,再拿上例来说,程序设计人员只需完成往出库单表和退货单表中插入相应的记录工作即可,具体修改工作由触发器来完成。
  
   3、触发器的运行是在服务器端,减轻了客户端的开销。
  
   4、触发器不管你在什么时候进行操作,它都会启动,保证数据不会出错。
  
   其实,上文所写的触发器只是一个最简单的例子,在实际工作中要远远比这复杂得多,设计一个好的数据库会花费数据库设计人员很大的心血,如果只是建立了表格,工作还没有完成一半呢,下一多半工作就是将你的数据完整性问题解决掉。
  
   成功地设计一个数据库能起到事半功倍的效果。数据的完整性已经解决了,程序设计起来还有什么问题呢?
  
   说来容易,做到却很难,比者在实际工作中也经常遇到很多问题,希望能和众多的同行共同进步,把你的经验和好的方法告诉大家。

标签:数据,数据库
0
投稿

猜你喜欢

  • AJAX实现延时顺序请求多个URL

    2007-12-06 18:32:00
  • 动态产生XML文档的几种方式

    2007-10-15 18:30:00
  • Iinternet Explorer浏览器简介(IE)

    2009-02-05 20:59:00
  • Oracle字符集修改查看方法

    2009-11-05 21:45:00
  • 前端也应关注安全

    2009-03-16 17:02:00
  • 基于Oracle的高性能动态SQL程序开发

    2010-07-20 13:01:00
  • css元素层叠级别及z-index剖析

    2008-08-29 12:41:00
  • ASP和Javascript中取整函数的应用

    2009-06-07 18:38:00
  • 四大因素扼杀了中国人的创造力

    2008-09-11 18:05:00
  • 女装类视觉设计分享

    2009-10-30 18:36:00
  • Linux环境MySQL服务器级优化讲解

    2008-12-04 17:21:00
  • JS复制特定内容到粘贴板

    2011-04-02 11:09:00
  • Javascript程序优化

    2008-06-02 13:12:00
  • SQL Server数据库于应用程序的关系

    2010-07-26 14:21:00
  • SQL Server数据库连接中常见的错误分析

    2009-01-15 12:51:00
  • W3C优质网页小贴士(二)

    2008-04-07 12:14:00
  • 对设计文档的一点小看法

    2010-03-15 12:30:00
  • JavaScript判断各种浏览器类型及版本

    2008-09-29 15:17:00
  • 主页移动背景代码

    2009-11-16 17:54:00
  • asp下用OracleInProcServer完成对Oracle的连接和操作

    2008-04-13 07:10:00
  • asp之家 网络编程 m.aspxhome.com