我正在开发的一个系统有许多屏幕,用户可以在这些屏幕上保存在系统中移动的数据。
当他们保存数据时,数据被保存到stagingtable。当他们到达用户旅程的终点并提交他们填写的应用程序时,数据将被复制到表的实时版本中。活动表和临时表也有相应的审核表
CAR的暂存表示例如下:

CarId
Manufacturer
Model
Colour
UserId
DateModified
DateCreated

相应的car活动表是:
CarId
Manufacturer
Model
Colour
UserId
DateModified
DateCreated
StagingCarId

在我看来,这似乎是一个糟糕的设计,因为数据库中几乎所有的数据都是重复的。我对架构师的建议是将提交的bool添加到表中,然后在提交时将其设置为true。
用户可以多次提交应用程序,而架构师指出,如果用户提交了数据,该怎么办——在我的例子中,这将检查提交的问题是否为真。如果他们返回到应用程序中并进行了删除和保存—这将从表中删除行—但是如果他们没有提交(一个有效的场景)—这将意味着实际提交的数据将是错误的—这将比他们实际提交的数据少一行
只是想知道有没有比使用staging和live表更好的方法来处理这个场景,它们在很大程度上是彼此的镜像

最佳答案

如前所述,你的问题的答案是否定的。你不能合理地反对这一点,因为这本身就是一种反模式。
这是一个不能作为“最佳实践”来回答的建模问题。例如,“loan application”与“loan”有很大不同,应该放在单独的表中。这取决于您在建模什么,以及您的开发人员和用户如何看待域。

07-28 13:55