我正在设计一个对审计有严格要求的新Java应用程序。简要介绍如下:
我有一个复杂的实体,有多个一对多的嵌套关系。如果任何字段更改,我需要将其视为对象的新版本,所有这些都需要进行审核。现在我有两个选择:
1。)不要做任何更新操作,只要在发生任何变化时插入新实体。这将要求我创建所有关系对象(即使它们没有被更改),因为我不想保留对任何先前版本对象的引用。我的数据表也成为我的审计表。
OR
2。)始终执行更新操作并将审核信息保存在单独的表中。这会在实施方面增加一些复杂性。
我想知道对于这两种方法中的任何一种方法是否存在良好与不良的做法。
谢谢, - CSN
答案 0 :(得分:1)
您应该选择的是“实时”数据和审核的插入/更新/读取模式。
这两种模式最常见的非常不同。
- 保持“现场”很大程度上取决于你的应用,但我可以想象你有重要的插入;重大更新;很多读。实时数据还需要事务性,并且需要保持一致性的表之间有很多关系。他们可能需要快速而复杂的搜索。许多列的索引
- 审计有很多插入;几乎没有更新;很少读。读取,搜索不需要复杂的搜索(例如,您只需要参考审核并按日期对它们进行排序)和许多列上的索引。
因此,随着负载和数据量的增加,您可能需要拆分数据并针对您的用例优化表。