我目前正在使用SQL Server和Entity Framework。我们有一个大型数据库,其中包含许多通过关系链接的附加表。至少有15个表与主表“Users”有关系。
例如。 用户
现在,如果用户想要从系统中删除,由于税收原因和许多其他内部原因,我们仍需要保留交易数据等。如果用户删除了他们的帐户,则所有其他表数据会级联并丢失。因此,我们需要删除用户信息,但将其存储在另一组表中。
我们考虑创建一个起始表名为“已删除”的重复表。例如DeletedUsers - > DeletedUserAddress等..
但是通过id,新建一个模型,将其发送到已删除的表,拉下一个表数据,新建一个模型,将其存储到已删除的表等等,这似乎很奇怪。然后在最后删除主用户表记录,并将所有记录级联并从数据库中删除。
任何人都可以提出更有效的存储历史数据的方法。
我可以看到,如果我试过
//GET THE USER
UsersTableModel user = await db.Users.SingleOrDefault(x => x.id == 1234);
//AIM TO STORE
db.DeletedUsers.Add(user);
不起作用,我需要完全新建一个DeletedUsers模型并添加。
有更简单的方法吗?
由于
答案 0 :(得分:2)
您可以使用软删除选项,您可以在表格中添加另一列“isDeleted”=“0”或“1”,您可以根据isDeleted选项对其进行过滤...这样您就可以保存你的记录
答案 1 :(得分:2)
希望它可以帮到你!
有15个表与User表有关系。因此,如果从User表中删除用户,则还将删除15个表中的相关数据(级联)。因此,对15个表数据进行历史记录很困难/ NoLogic。
解决方案:不要在用户表格中删除用户,只需在“用户”表格中按住一列,例如 IsDeleted 。将一个新列添加到名为 IsDeleted 的用户表中,并使用0(活动),1(已删除)进行更新。
然后在获取用户记录,交易详细信息时,您应该根据需要添加过滤器(where子句)。喜欢以下,
db.Users.Where(x=>x.IsDeleted==0) // to fetch users and details except deleted users
db.Users.Where(x=>x.IsDeleted==1) // to fetch deleted users and details