如何组织数据
今天有点心血来潮,上午发了个帖子,觉得还没说够,就再啰嗦一次。开发企业管理方面的应用程序,首先要面对的就是如何组织数据的问题。当程序员接触企业数据时,用户提交的都是一些帐表,各种各样,五花八门,看得都头痛。其实,要分析企业管理数据,也是很简单,就二样东西:帐、表。帐表在形式上都一样,都是表格形式,但本质上有很大的不同。帐,基本上是序时的,即按时间顺序,记载企业经营活动的各种数据,记载的是一种“过程”,属于动态数据,而表是那些过程在某一个时点上的“结果”,属于静态数据。没有“过程”,就没有“结果”,有什么样的“过程”,就有什么样的“结果”。把握住这个原理,对于组织数据和开发程序来说,非常重要。
所有记载“过程”的,都必须要重点对待,必须保证“过程”记录是真实的、完整的。所有程序都要围绕“过程”展开,所有依靠“过程”数据能够得到的“表”,都没有必要物理存在,更不要存在于数据库中。企业管理工作中,因为数据量比较大,手工处理客观上需要分段作业,即把“过程”分成若干时间段,按月分段是最常见的。但对于计算机来说,这种分段作业就是画蛇添足,很多程序员迁就于这种“分段”作业模式,把一个程序弄得支离破碎,“按月”、“按季”、“按年”,不一而足。除了国家法规要求企业在经营管理中必须要按年“结帐”外,在程序中,都不应该有“月”、“季”的概念,而是用户可以选择一年中任意时间段进行“作业”。所有“月末”、“季末”报表以及计算机硬盘上物理存在的相应文件都不应该存在。这种手工思维在很多企业管理软件中都有,比如,一些软件的操作界面搞得跟手写模式一样,一个数字非要把各个字符放在规定的位置,一个字符位置错了,真个数字就变了,真的不知道这是什么思维,计算机是一个工具,效率是第一位的,仅仅为了所谓的“好看”,而损失了易用性,真的是无法理解。所以,开发企业管理方面的软件,必须要摈弃手工思维。说的有点远了,再回头说数据库的事儿,各种记载“过程”的文件要保证都是独立的,不和其他文件发生关系。这是因为,VFP数据库不能把库里全部文件封装在一个文件里,这种数据库在安全性方面就有一种致命的缺陷,所以,我在数据库里基本不用一对多等形式建立表与表之间的关系,宁愿编程费点劲,也要保证表的相对独立性,只要各个表是相对独立的,数据文件的恢复重建就变得容易,这也是没办法的办法。
由于记载“过程”的文件非常重要,在编程时就必须很小心,程序尽可能避免直接针对这类文件进行“编辑”。我的方法是,无论单机还是多用户,都用C/S模式,很多朋友会问,单机如何做到C/S模式,其实,我这里讲的C/S模式是一种思维,即把操作界面当作客户端,而真正要操作的表是服务器。数据维护界面所操作的是“视图”,或是表的副本,无论是单个记录还是多个记录,一律用视图更新的办法或用INSERT-SQL处理,禁止对于记载“过程”的记录进行删除和修改,这不仅仅是要保留操作痕迹,更重要的是,企业管理中这些“过程”数据往往都有“借贷平衡”的逻辑关系,修改或者删除一条记录,会造成帐目“不平”。
粗浅看法,可能很业余,不当之处,敬请各位狐友指正。