系统中字典表该怎么用

        假设某天某公司做了一个拥有很多子系统的项目,其中有一些公共的字典表可能被多个子系统用到。例如一个产品类型表tb_product,基本的字段有 fid(ID),fname (名称),fprice (价格)。

        在A子系统中需要一个标识来控制信息是否展示,所以负责这个子系统的A程序员就修改了表,添加了个字段IsShow。某天B子系统也需要一个标识来实现它的控制,所以负责的B程序员也添加了个字段IsFlag 。。。。 这个故事就这样发展下去了。

        在某年某月某天,某个重要的子系统X突然异常了。debug的结果是X系统中需要从字典表tb_product中查找所有的记录,负责的X程序员写了select * from tb_procut 这样的语句,而就在刚才Y程序员给tb_product中添加了个isFlagY标识。

        在某某年某某月某某天,Z程序员负责Z子系统在编码过程中不小心写了个delete语句,删掉了一条数据,于是A、B、C、C、E......一直到Y 子系统全崩溃,老板大发雷霆要炒了Z。

        以上问题在现实中很常见,很多WEB程序员在做系统设计和编码的时候并没有考虑到这个问题。最常见的就是做个XXX管理系统,上面给了几张基础数据表,匆匆地看几眼就开始写Bean画页面了,写到一半发现少个控制字段,就直接修改表结构,没有问下能否修改,修改了会不会有问题。更甚的是有时候别人已经提醒过,还是为了图方便,求速度置之不理。

        好的解决方法就是建立好字典表,如果有其他子系统需要使用,则在相应的子系统建立一份copy。子系统可以在这个copy的基础上添加自己需要的字段。即使字典表被破坏也不会立即影响到各个子系统的运行。

        原始表和copy表之间可以通过“触发器”、“定时拉取”的方式进行同步。触发器可以实时同步,并且在触发规则里定义更新的条件,例如我要删除字典表内的数据,如果子某个系统定义这条数据不可删除就可在触发器的代码规则里体现出来。

定时拉取的方式更适合于大数据量批量更新,规则更宽松,延时更长。

相关推荐