我试图弄清楚我应该如何保存用户对其个人资料所做的编辑,这种编辑在得到管理员批准之前不会上线或影响现有的实时数据。有第二个表格用于编辑配置文件,然后复制批准数据?将它们全部保存在一个表中并拥有所有可编辑字段的 _tmp 副本?对此有最佳做法吗?
谢谢你的想法。
我试图弄清楚我应该如何保存用户对其个人资料所做的编辑,这种编辑在得到管理员批准之前不会上线或影响现有的实时数据。有第二个表格用于编辑配置文件,然后复制批准数据?将它们全部保存在一个表中并拥有所有可编辑字段的 _tmp 副本?对此有最佳做法吗?
谢谢你的想法。
有一张单独的桌子对我来说听起来不错。这样您就可以只存储已更改的内容,而不是其他所有内容。
为简单起见,我经常使用数据库中的一些“状态”列来确定特定行是否可以公开查看。然后在您的 SQL 中添加
WHERE status = 'published'
这适用于简单的网站。
对于更繁忙的站点,我怀疑没有 WHERE 子句会带来一些性能提升。在单独的表中进行挂起的编辑将是一个不错的选择,然后您 INSERT INTO ... SELECT FROM 将其移动到活动表中。
如果您有很多这样的案例(跨越许多不同的表),您可以有一个 TempObject 表,您可以在其中序列化对 XML 或其他状态的更改,直到它们被批准。
或者,如果它只是用户配置文件表,您可以在 UserID + Approved(boolean) 上有一个唯一键。当用户编辑他们的数据时,它会以 UserID 的形式进入表,Approved = false,然后要批准它,您只需删除已批准的数据并将未批准的数据更新为已批准(当然是在事务中)。
毕竟,您已经拥有保存所有数据的结构——为什么不重用它呢?
您可以在应用程序中构建一些工作流程。因此,您将拥有一个工作流表,其中定义了各种状态(例如,输入、建议、批准等)。
然后,您还可以有一个 PendingChanges 表来存储这些建议的更改。当提议的更改被批准后,您将更改合并到主用户配置文件更改中。
这似乎最简单:您可以在 USERS 表中添加一个 VERSION 和一个 STATUS 字段。然后,根据需要使用 STATUS 字段显示最高版本的行。显然,这也为您提供了记录的版本控制。
只要对 VERSION 和 STATUS 进行索引,它们就不会真正减慢任何显示操作。添加行会稍微慢一些,因为必须维护索引。
A second table in the same format as the first doesn't easily allow for multiple changes to be queued.
I would recommend designing a specific tructure to record each change request as a change request. Fields for who it's changing, what is changing, what to, who made the request, when, etc.
Then have code to apply the change if/when validated.
This can also then act as an easy to track audit trail.
I would not make the changes in the same table, it tighly binds the implementations together and makes later maintenance a headache. The independance reduces how closely coupled everything is, for more flexibility in the future.