请问高手们,在设计数据库时,因业务的需要,我有一个账号表和一个订单表,但现在要删除账号表的一个账号,订单表里的不删除,在下一次添加账一个账号名时,要把原来删除的那个账号的订单还原成现在添加的帐号名。
方案:
1、在订单表里加账号名,在重新添加账号时,查询订单表是否有当前用户,如果有就将订单表里的ID更新为现在添加的账号ID。
2、加临时表,在删除账号后,将订单记录在临时表里,在下一次添加账号时,查询临时表是否有当前添加的账号,如果有就将临时表的记录插入到订单表,再将临时表的记录删除。
这两种方法不知道哪一种好,另外还有没有更好的办法?请各位高手指点。

解决方案 »

  1.   

    明显是第一种方案好。理由:
    1)方案1的思路比较容易理解,一看就懂,实现起来也容易,维护容易。方案2的看了2遍没搞明白,晕,删除新增操作太多...实现和维护就可想而知。
    2)从性能上看,insert/delete比update更容易引起I/O操作,I/O多就意味着慢,磁盘碎片....还是方案1好。
    3)方案2的实现有过有误的话,数据的恢复也比较麻烦
    4)方案1里面可以很容易地实现追踪或类似审计的功能,看账单号和订单号的更改情况;方案2不易实现类似功能,或者说麻烦。
      

  2.   

    假设如下
    ======
    账号表
    account_id account_name
        3         'Simon'     --如果删除该帐号
        -          -----
    订单表
    order_id  account_id order_mount price
       1101       3          100      155   --对应订单表记录不做删除你的要求 在下一次添加账一个账号名时,要把原来删除的那个账号的订单还原成现在添加的帐号名
    ---------
    问题你怎么配对两表之间的关系呢?根据重复的accunt_id进行更新不复合输入逻辑 根据account_name添加 相同的名字是否是原来的用户?如果这个成立 你账号表对应记录都已经删除了还怎么根据输入来查找?给帐号表加deleted字段也不好
      

  3.   

    石林#黄果树  说的很对,
    如何能保证添加的帐号信息是同一个人呢? 如果不能的话,那还原也就没有任何意义了啊。to:石林#黄果树 
    “如果这个成立   你账号表对应记录都已经删除了还怎么根据输入来查找?给帐号表加deleted字段也不好”
    能讲讲为什么加deleted字段不好么?