请问高手们,在设计数据库时,因业务的需要,我有一个账号表和一个订单表,但现在要删除账号表的一个账号,订单表里的不删除,在下一次添加账一个账号名时,要把原来删除的那个账号的订单还原成现在添加的帐号名。
方案:
1、在订单表里加账号名,在重新添加账号时,查询订单表是否有当前用户,如果有就将订单表里的ID更新为现在添加的账号ID。
2、加临时表,在删除账号后,将订单记录在临时表里,在下一次添加账号时,查询临时表是否有当前添加的账号,如果有就将临时表的记录插入到订单表,再将临时表的记录删除。
这两种方法不知道哪一种好,另外还有没有更好的办法?请各位高手指点。
方案:
1、在订单表里加账号名,在重新添加账号时,查询订单表是否有当前用户,如果有就将订单表里的ID更新为现在添加的账号ID。
2、加临时表,在删除账号后,将订单记录在临时表里,在下一次添加账号时,查询临时表是否有当前添加的账号,如果有就将临时表的记录插入到订单表,再将临时表的记录删除。
这两种方法不知道哪一种好,另外还有没有更好的办法?请各位高手指点。
1)方案1的思路比较容易理解,一看就懂,实现起来也容易,维护容易。方案2的看了2遍没搞明白,晕,删除新增操作太多...实现和维护就可想而知。
2)从性能上看,insert/delete比update更容易引起I/O操作,I/O多就意味着慢,磁盘碎片....还是方案1好。
3)方案2的实现有过有误的话,数据的恢复也比较麻烦
4)方案1里面可以很容易地实现追踪或类似审计的功能,看账单号和订单号的更改情况;方案2不易实现类似功能,或者说麻烦。
======
账号表
account_id account_name
3 'Simon' --如果删除该帐号
- -----
订单表
order_id account_id order_mount price
1101 3 100 155 --对应订单表记录不做删除你的要求 在下一次添加账一个账号名时,要把原来删除的那个账号的订单还原成现在添加的帐号名
---------
问题你怎么配对两表之间的关系呢?根据重复的accunt_id进行更新不复合输入逻辑 根据account_name添加 相同的名字是否是原来的用户?如果这个成立 你账号表对应记录都已经删除了还怎么根据输入来查找?给帐号表加deleted字段也不好
如何能保证添加的帐号信息是同一个人呢? 如果不能的话,那还原也就没有任何意义了啊。to:石林#黄果树
“如果这个成立 你账号表对应记录都已经删除了还怎么根据输入来查找?给帐号表加deleted字段也不好”
能讲讲为什么加deleted字段不好么?