我现在有这么一种需要:
(1)有业务A,业务B,业务C,等等。
(2)每种业务的数据都要求送审,审核通过了后才成为正式数据。
(3)在审核过程中的数据保存在临时表tmp中,审核通过后将相应的业务A的业务数据存放到对应的数据表A,业务B的数据存放到数据表B,业务C的数据存放到数据表C,其他依次类推。我现在有种想法,用一个临时表tmp来保存所有的业务送审数据,但是如果实际的业务数据表结构都不相同。也就是说tmp表
要能够容纳所有的业务数据。审核的时候查看各种业务数据及送审数据之间的关系,全部来自tmp。审核同意后就将tmp中的数据存放到相应的正式业务数据表中。苦于不知道怎么设计这个tmp表,请高手指点!!或者有更好实现的模式也请推荐,谢谢!!!

解决方案 »

  1.   

    create table tmp(
       btype varchar2(1) not null, /* 业务类型 */
       insert_sql varchar2(2048) not null, /* 插入对应业务表的SQL指令 */
       insert_data varchar2(2048) not null, /* 带分割字符保存插入行的数据,可选 */
       state  varchar2(1) not null  /*状态,审核是否通过 */
    );这样可否?
      

  2.   

    这里补充下,是用java来存取数据。这样好像不行吧,我的业务表字段内容很多的,多的可以达到80个字段,而且有的字段就是varchar2(3000)这种。有个想法,将非blob的字段,全部用varchar来保存,并且将按照varchar字段长度分几个等级。
    一次送审数据,这样存取,
    a,一行数据记录列名,
    b,一行记录列名与在tmp中存放的那个列(因为按照varchar
    长度分等级存放),
    c,其他的则是实际送审数据
    d,用一个id标示那些数据是这一次送审数据,也就是说将一次送审的所有数据都分配一个id标示号,类似于序列号。
    create tabel t_audit_data(
    c_id bigint(20) NOT NULL AUTO_INCREMENT,/*主键*/ 
    c_table_name varchar(100) not null,/*表名*/
    c_data_type  varchar(10)  not null comment '0,列名;1,列类型;2,数据行',
    c_col_1 varchar(500),
    c_col_2 varchar(500),
    c_col_3 varchar(500),
    c_col_4 varchar(500),
    c_col_5 varchar(500),
    c_col_6 varchar(500),
    c_col_7 varchar(500),
    c_col_8 varchar(500),
    c_col_9 varchar(500),
    c_col_10 varchar(500),
    c_col_11 varchar(500),
    c_col_12 varchar(500),
    c_col_13 varchar(500),
    c_col_14 varchar(500),
    c_col_15 varchar(500),
    c_col_16 varchar(500),
    c_col_17 varchar(500),
    c_col_18 varchar(500),
    c_col_19 varchar(500),
    c_col_20 varchar(500),
    .
    .
    .
    c_col_129 varchar(5000),
    c_col_130 varchar(5000)
    )不知这样可行不,大家不妨多指点一下
      

  3.   

    晕啊,这么多列,那就不如直接用clob列来保存sql指令了。
      

  4.   

    支持4楼  做个分区表  加个审核字段简单的0/1开关 搞定要不你就得每个业务表建立个temp表
    感觉你说的temp不能真的是temporary 表
    其实也是个实体表  只是用来存放未审核的数据的 
      难道我录了后就马上的审核啊  不然放temp表里还能下次登录来审核???
      

  5.   

    我觉得得看楼主的业务量大小了各表的rows。审核通过率也有关系
    如果不创建 中间表 (我觉得还是称为中间表比较合适)
    如果业务表数据量比较大的话, 审核通过率又比较低,在一个表中用status(通过,未通过) 来标识的话,在对业务表做一些报表数据分析时候,尤其是一些全表扫描话,势必会影响性能。如果定期删除 未通过业务,也会对段存储,高水位下空块较多,重新插入入数据时可能产生的行迁移 有影响。以及索引的维护上造成很大的影响。创建中间表的话。确实如6楼所说,有许多优点。 如果你的审核率很高,业务条目又很多,那你从中间表到业务表,清理中间表 系统开销就要考虑入内。不如直接写业务表 增加状态字段。