不知道是不是自己幸运还是不幸,工作就一年的时间,我却接触了两次程序改版,而且是之间将其他语言写的程序改成php的。我其实觉得这是幸运。第一个是.net写的一个导医系统,使用的access数据库,第二个是.net写的一个内容管理系统,使用的sqlsever数据库。都要改为php+mysql的。从这两次经验中,我的确是学到了不少东西。并且也千万不要以为是多么复杂的事情,虽然是有点复杂。

既然是程序改版,当然就要涉及到原来数据的转移,虽然时下有不少所谓的数据转移工具,但是我们学习程序的人也知道,不同的数据库结构设置等等肯定有差别,而且还有令很多人头疼的编码问题,对于编码问题,我也是有一些研究的,过几天会写一个有关程序编码的问题的总结。今天我主要是说说我们怎么来做不同数据库之间的数据转移。授人以鱼不如授人以渔。相信对要做类似功能(比如数据处理、往期数据分析、数据转移等)的程序员有一定的帮助。

首先的前提是,不要奢望有最便捷成型的现成程序或软件来帮你,最好就是通过自己熟悉的语言,自己动手写程序来转移。

程序数据转移以我的方式来分的话可以分为两大类,当然可以更加细分。第一类是:由其他程序转移到自己专业的开源程序;第二类是由其他程序转移到自己专业的自己开发或自己团队开发的私有程序。不要小看,这有很大的不同。如果是转移到开源程序,虽然人家是开源的,但是不见得我们就完全熟悉人家的每个功能与设计吧,尤其是数据库字段的设计。那么我们在数据转移前就要仔细分析其数据库、表设计,而如果是自己的程序,就相对从容了许多。而来源数据因为是自己不熟悉,甚至是根本不知道的程序写的,那更要分析了,这就不用说了。

那么首先就先说说分析数据,

1是分析旧版程序,程序都是相通的,有的时候我们转移数据并一定是说有数据,可能有的你只要转移文章表,转移较之采集(虽然也可以用采集实现)的好处就是可以保证数据的高度一致,就是id这个字段也一样,因为文章很多都是用id组合的文件名、路径,这样我们就可以通过配合栏目目录保证文章的路径不变。如果是内容管理系统类的旧程序,最好也是往自己熟悉的开源程序上转,以为这些开源程序历经时间的考验真的是相当的完善,至少要比你自己考虑的要全面很多,比如织梦、帝国这样的开源程序,其巧妙的模型设计几乎可以让我们实现任何功能。而一些系统类、功能类的程序,可能用一些这样的内容管理开源程序就不合适了,最好就是自己开发了。而分析旧版程序也没有必要让你直接学会另一门语言,我们只需要通过后台、数据库、前端,来弄清楚数据的结构,展示、分类、等等。比如文章类的,我们要找清楚对应的分类,对应的表在哪里,是单独的表还是所有分类都是用的一个表(这个很重要),就足够了,因为内容类的,我们几乎就是需要其文章内容;而系统类的,就比较麻烦一点,人家可能要求尽可能保证原来所有的数据,那我们在没有旧版程序开发说明书的情况下就要自己摸索了,最好能自己装个测试版,一个功能一个功能的来分析,今天操作,记录数据库数据变化,结合其字段注释,自己的尝试经验等来分析各个字段的意义。弄清楚了这个就好办了,一个系统真正复杂的表其实也没几个,先从简单的入手,因为表直接可能是有联系的,你简单的不明白是不可能弄懂其在别的表作为外键时的意义的。并且最好是有测试人员或辅助人员,因为自己很容易就弄乱。

2是分析新版系统,新版系统针对的是我们使用的开源系统,,最重要的一点就是要添加测试数据测试,因为一般情况下我们都知道数据库设计的时候都是有一些默认或初始值的,在我们搞不清楚字段初始值是怎样的情况下,可以在开源程序中加一个默认数据,根据这条数据,来判断默认值,这样在转移的时候一定注意给这些需要加初始值的字段添加正确的初始值(虽然数据设计中可能有的会自动加初始值,但是在一些特殊情况下回不起作用,所以要注意)。

分析数据是一个比较繁琐的事情,但是,我们在分析数据的时候其实可以和转移程序开发同时进行,这个转移程序是数据转移的重点,只是单纯的分析,永远也搞不清楚,有的时候做事情要先着手去做,做的过程中就会有了思路。下面就说说如何做转移程序。

我是学php的,当然做的这两个项目都是改成php程序,但是无论什么程序,基本都会有操作不同数据库的接口,类库或者扩展等等,php就有很多,几乎可以操作所有类型的数据库,不过,其操作不同数据库的能力是不同的,比如,php对mysql的操作几乎是最方便的,而对sqlsever和access的操作就弱了一些,虽然有一些类库,但是有的时候因为版本的不同而无法使用,所以我们要尽量的从底层代码来写转移程序,有的时候,我们也可以通过一些中间手段,就比如字符编码一样,所有编码都可以和utf-8进行转换,我要在另外两者间转换,可以通过utf-8作为中间人。数据转移也是一样,有的时候我们通过自己的程序很难操作人家的数据库,但是他可以转换为一个你可以操作的数据库也可以。以mysql来说,mysql可以存储为sql文件,或者是任何的文件,只需要在里面存储sql语句,用程序读取执行就可以。其他程序也是一样,我们就通过读取出原始数据,用php或你的专业语言,进行sql重组。然后执行插入,而中间要注意的就是一些编码、特殊字符、已经一些字段类型!尽量的让自己写的转移程序体验好一些、也就是智能一些,有比较好的扩张性,可以节省大量代码!其实就是提取封装一下!

任何程序的操作,其实都是对数据的操作!

程序本天成,妙手偶得之!我们只是代码的搬运工!

转载请注明:http://www.521php.com/archives/1021/

发表评论

昵称:

网址:

eg.博客主题调用的是Gravatar头像,你可以通过邮箱注册获得头像.
/ 快捷键:Ctrl+Enter