技术不行但人小帅 2024-07-14 21:45 采纳率: 59.2%
浏览 10

vue记账功能请问该怎么设计

请问 有一个记账的业务请问该怎么设计比较合理?

这个记账业务的内容是 如果用户记账选择某个账户 去扣款, 那么对应的账户也会扣款,
那么现在有个问题, 如果用户选择把这个扣款的账户给删除了

那么基于记账的功能, 那么之前的该账户的记账记录 需要给保留下来,

但是这个时候 如果用户找到这条记账记录 去修改里面的内容, 扣款的账户已经被删除了,因为操作的是两张表,对应的账户被删除了, 在操作记账记录 会被transaction回滚操作。 可是这个时候如果用户需要修改已经被删除的账户,即改成另外的账户 ,但由于之前的账户丢失了系统找不到,会被回滚, 所以这个时候改成另外的账户也不成功, 那么这个时候怎么设计这个方案比较好呢?

方案一, 用户删除的时候,对该账户实现软删除, 即加一个字段让他隐藏起来, 那么用户再去操作这个账户的记录的时候是允许操作的,但是这样有可能会造成很多垃圾账号数据,
方案二, 当用户删除这个账户的时候,对应的记账记录全部删除,那么彻底杜绝了上述问题,但是这肯定是不合理的。

或者还有什么更好的方案吗

  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-07-14 21:45
    关注

    引自免费微信小程序:皆我百晓生

    在设计记账功能时,确实需要考虑到用户删除账户后的数据一致性和操作逻辑问题。结合你的描述和需求,可以考虑以下方案:

    1. 软删除结合版本控制

    方案描述

    • 当用户删除账户时,不真正从数据库中删除账户信息,而是添加一个“删除标记”字段,如将字段设置为 is_deleted 并记录删除时间。
    • 保留账户的完整历史记录,但隐藏账户的实际操作界面,仅保留查看历史账单的功能。
    • 对于记账记录,可以引入版本控制机制。每当记账记录发生更改时,保存一个版本。这样即使原账户被标记为删除,也能通过版本追溯查找到相关记录。
    • 当用户需要修改记账记录时,可以查询到相应版本的记录进行操作,而不直接操作已被“软删除”的账户。

    2. 账户历史表

    方案描述

    • 当用户删除账户时,不真正删除账户信息,而是将账户信息移至一个单独的“账户历史表”中。
    • 在主账户表中更新一个指向历史表中对应记录的指针,并标记该账户为“已迁移”。
    • 对于记账记录,除了关联主账户表外,还可以关联账户历史表。这样即使主账户被标记为已迁移,也能通过历史表找到相关的记账记录。
    • 当用户需要修改记账记录中的账户信息时,可以在主账户表中选择一个现有账户或者在历史表中选择一个已迁移的账户作为新的扣款账户。

    3. 事件驱动架构

    方案描述

    • 采用事件驱动的设计模式,每当发生账务操作(如记账、删除账户等)时,都生成一个事件并记录。
    • 即使账户被删除,相关的事件记录仍然保留在事件表中。
    • 通过事件追溯和关联查询,可以查询到任何时间点的账务操作记录,包括已删除账户的扣款记录。
    • 当用户需要修改记账记录时,可以通过查询相关事件找到原始操作并进行修改。

    优点与缺点分析:

    • 软删除结合版本控制:优点是可以保留历史数据,方便追溯;缺点是可能会积累大量不再使用的数据,需要定期清理。
    • 账户历史表:优点是结构清晰,可以区分正在使用的账户和已迁移的账户;缺点是需要维护两个表的关系,增加了复杂性。
    • 事件驱动架构:优点是可以完整记录所有操作历史,方便审计和追溯;缺点是对系统的架构要求较高,需要额外的事件处理和存储机制。

    你可以根据系统的实际需求、数据量和操作频率等因素来选择最合适的方案。在设计时还需要考虑到数据的安全性、一致性和用户体验等因素。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 7月14日

悬赏问题

  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Linux权限管理相关操作(求解答)
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表
  • ¥15 DbVisualizer Pro 12.0.7 sql commander光标错位 显示位置与实际不符
  • ¥15 android 打包报错
  • ¥15 关于stm32的问题