我正在试图弄清楚我应该如何保存用户对其个人资料的修改方式,这种方式不会生效或影响现有的实时数据,直到管理员批准为止。为编辑的配置文件创建第二个表,然后在批准时复制数据?将它们全部保存在一个表中,并拥有可编辑的所有字段的_tmp副本?这是最好的做法吗?
感谢您的想法。
答案 0 :(得分:2)
有一个单独的表对我来说听起来不错。这样你只能存储改变的内容,而不是其他所有内容。
答案 1 :(得分:2)
为简单起见,我经常会在数据库中使用某些“status”列来确定特定行是否可公开查看。在SQL中,然后添加
WHERE status = 'published'
适用于简单网站。
对于更繁忙的网站,我怀疑没有WHERE子句可以获得一些性能提升。在单独的表中进行挂起编辑将是一个不错的选择,然后您插入INTO ... SELECT FROM将其移动到实时表。
答案 2 :(得分:1)
您可以在应用程序中构建一些工作流程。因此,为此,您将拥有一个工作流表,该表将定义各种状态(例如输入,提议,批准等)。
然后您还可以使用PendingChanges表来存储这些建议的更改。当建议的更改得到批准后,您将更改合并到主用户配置文件更改中。
答案 3 :(得分:1)
如果您有许多这样的情况(跨许多不同的表),您可以拥有一个TempObject表,您可以将更改序列化为XML或其他状态,直到它们被批准为止。
或者如果它只是用户配置文件表,则可以在UserID + Approved(布尔值)上使用唯一键。当用户编辑他们的数据时,它会以UserID,Approved = false进入表格,然后批准它,您只需删除已批准的数据并将未批准的数据更新为已批准(当然在事务中)。
毕竟,你已经拥有了保存所有数据的结构 - 为什么不重用它?
答案 4 :(得分:1)
这似乎最简单:您可以在USERS表中添加VERSION和STATUS字段。然后,根据需要使用STATUS字段显示最高的VERSIONed行。显然,这也为您提供了记录的版本控制。
只要对VERSION和STATUS编制索引,它们就不会真正减慢任何显示操作。添加行的速度会慢得多,因为索引必须保持不变。
答案 5 :(得分:0)
与第一个格式相同的第二个表格不容易让多个更改排队。
我建议设计一个特定的结构来记录每个变更请求作为变更请求。关于改变谁,改变什么,做什么,提出要求的人,等等的领域
然后使用代码在验证时进行更改。
这也可以作为一种易于跟踪的审计跟踪。
我不会在同一个表中进行更改,它会严格地将实现绑定在一起,并使以后的维护变得令人头疼。独立性降低了一切事物的紧密耦合程度,以便将来获得更大的灵活性。