我们目前正在用 Java 开发基于用户的 Web 应用程序。
用户可以拥有许多属性,例如名字、姓氏、地区(例如亚洲、欧洲、美国、英国)、国家、部门、分支、产品等。
该用户具有上述所有字段的正常 CRUD 屏幕。
用户的添加/编辑屏幕还将有一个称为生效日期的日期字段。此添加/编辑用户与常规 CRUD 中的普通添加/编辑不同的方式是,对用户所做的更新将在生效日期之前反映。
假设今天是 4 月 6 日,我添加了一个新用户,区域为亚洲,生效日期为 4 月 10 日。现在我去更改同一个用户并将他的区域从亚洲更改为美国,但生效日期为 5 月 15 日。
因此,直到 5 月 15 日,系统应仅将他的地区显示为亚洲,并且在 5 月 15 日,他的地区应自动更改为美国。
您可以将其视为 4 月在亚洲工作的用户,但从 5 月 15 日起,他将搬到美国工作,即地区从亚洲更改为美国,5 月 15 日生效。所以在 5 月 15 日之前,他应该只在亚洲显示为用户。
所以我不能把他的区域从亚洲更新到我们数据库中作为一个简单的更新操作。
这也适用于许多其他领域,如部门、分支和产品。
我不能为同一个用户拥有多条记录。
编辑1:
我们还应该能够看到用户历史记录或未来的更新。
就像 4 月 6 日一样,我应该看到用户区域将从 5 月 15 日开始更改,他的部门将从 5 月 10 日开始从 A 更改为 B。
我也应该能够删除更新,说我稍后才知道,从亚洲到美国的拟议转移用户可能不会在 15 日生效,所以我应该能够删除该更新。
编辑2:-
鉴于上述情况,我如何在我的原始用户表和用户更改日志表中进行更改?
假设系统中有一个亚洲地区的用户,该用户将在接下来的几周内从亚洲更改为我们。用户将对用户有相同的更新。他将地区从亚洲更改为用户,并选择生效日期作为未来日期。
现在我如何检查区域是否从亚洲更改为我们(可以有像区域这样的名称 mre 字段)。我应该在代码级别执行此操作,还是可以使用触发器等在数据库级别执行此操作?
请帮助我为此设计系统和数据库。