需求:
正常工作流程:
申请人先进行申请,记录一些申请时的信息,再对申请记录进行审核,合格后允许租房,找到房源后进行登记,记录出租房屋的信息。
一些特殊情况说明:
1、一次申请允许租多套房屋,即一条申请记录会对应0-N条出租房屋记录;
2、申请记录审核通过前,申请记录可能会发生变更;
3、在允许租房并记录出租房屋信息后,申请信息的变更可能会导致出租房屋信息的变更,申请信息没有变更时出租房屋信息也可能会发生变更。
4、要保留变更记录针对这种情况,我的思路是:
因为大多数业务都是针对当前记录进行操作,所以我建了4张表:
申请表:记录当前申请记录;
申请变更表:在每次变更时将原始记录写进来,再更新原始记录;
租房表:记录当前租房记录;
租房变更表:在每次变更时将原始记录写进来,再更新原始记录;后来发现了一个问题,在申请信息或租房信息发生过几次变更后,只能将申请表与租房表中的记录对应上,也就是只能关联当前记录,两张变更表中的记录无法相互对应。
针对这种情况,想到的解决方法是在变更任何一个表时都将另一个表进行复制,以得到变更信息时的其它相关信息。
可是又有了新的问题,就是会出现大量的数据冗余,比如:变更申请信息导致了房屋信息的变更,但实际操作中会在变更完申请信息时复制房屋信息,再变更房屋信息时复制申请信息,至此才达到目的,而前面那条变更申请信息时复制房屋信息的记录是没有用的。这是现在遇到的问题,还在想其它思路,请各位高人针对这个需求设计一下数据库表,程序实现思路。
谢谢!!!

解决方案 »

  1.   

    怎么可能对应不上啊,这明显是你思路的问题。申请表和申请变更表都共同的字段用户ID,租房表和租房变更表都有共同的字段,房屋ID,你的申请再怎么变,这个用户的ID不会变,房子再怎么变更信息也不会变更他的ID,有这两个在,你怎么会关联不上。而实际上在这4个表中都应该有用户ID和房屋ID这两个字段。通过用户查询时可以查询到该用户所有租放信息以及他变更的信息,如果没有房屋ID你如果知道他租的是哪套房子,而在查询租房信息时也一样要显示该房子曾经租给哪个用户,目前是否有人租。这些都是必要的你该都考虑进去,之所以你说改几次后就关联不上了,那就说明你对表结构需要的东西没有考虑全。再好好看看吧。
      

  2.   

    To:freedom2001(天翔)
    给你举个例子:一个人的申请变更过3次,房屋信息变更过2次,我现在想知道第2次申请变更时对应的房屋信息,应该怎么查?
      

  3.   

    我的想法:
    申请到确认当成一个transaction,拥有相同的ID,申请变更之间用version和status区分。
      

  4.   

    我的想法:
    申请到确认当成一个transaction,拥有相同的ID,申请变更之间用version和status区分。
      

  5.   

    To:trueyellow() 
    能说得清楚一些么?俺没太看明白,呵呵……
      

  6.   

    第一次申请入申请表:
    TrsID     version     status
    100       1           updating申请变更入申请表:
    TrsID     version     status
    100       2           updating以后每次变更version +1审核通过,同时入申请表和租房表
    TrsID     version     status
    100       last+1      done这样通过两个表的TrsID就可以关联出该房子的申请变化情况。简单地说,一个表记录历史过程,一个表记录结果,很常见的数据库设计思路。1.还需要一个住房表来存储房子信息,主要是查看是否可用。在退租或着到期时更新,做为是否可以申请的依据。
    2.加上时间字段后,查询租房表的最后记录得到其TrsID,再查申请表,可以得到最后一次出租的情况
    3.先查一个时间段的所有TrsID,再查申请表,可以得到该时间段的全部申请情况。
    4.建议表按时间分区。