2

我试图弄清楚我应该如何保存用户对其个人资料所做的编辑,这种编辑在得到管理员批准之前不会上线或影响现有的实时数据。有第二个表格用于编辑配置文件,然后复制批准数据?将它们全部保存在一个表中并拥有所有可编辑字段的 _tmp 副本?对此有最佳做法吗?

谢谢你的想法。

4

6 回答 6

2

有一张单独的桌子对我来说听起来不错。这样您就可以只存储已更改的内容,而不是其他所有内容。

于 2009-09-09T21:48:43.200 回答
2

为简单起见,我经常使用数据库中的一些“状态”列来确定特定行是否可以公开查看。然后在您的 SQL 中添加

 WHERE status = 'published'

这适用于简单的网站。

对于更繁忙的站点,我怀疑没有 WHERE 子句会带来一些性能提升。在单独的表中进行挂起的编辑将是一个不错的选择,然后您 INSERT INTO ... SELECT FROM 将其移动到活动表中。

于 2009-09-09T21:52:26.630 回答
1

如果您有很多这样的案例(跨越许多不同的表),您可以有一个 TempObject 表,您可以在其中序列化对 XML 或其他状态的更改,直到它们被批准。

或者,如果它只是用户配置文件表,您可以在 UserID + Approved(boolean) 上有一个唯一键。当用户编辑他们的数据时,它会以 UserID 的形式进入表,Approved = false,然后要批准它,您只需删除已批准的数据并将未批准的数据更新为已批准(当然是在事务中)。

毕竟,您已经拥有保存所有数据的结构——为什么不重用它呢?

于 2009-09-09T21:50:50.733 回答
1

您可以在应用程序中构建一些工作流程。因此,您将拥有一个工作流表,其中定义了各种状态(例如,输入、建议、批准等)。

然后,您还可以有一个 PendingChanges 表来存储这些建议的更改。当提议的更改被批准后,您将更改合并到主用户配置文件更改中。

于 2009-09-09T21:45:53.030 回答
1

这似乎最简单:您可以在 USERS 表中添加一个 VERSION 和一个 STATUS 字段。然后,根据需要使用 STATUS 字段显示最高版本的行。显然,这也为您提供了记录的版本控制。

只要对 VERSION 和 STATUS 进行索引,它们就不会真正减慢任何显示操作。添加行会稍微慢一些,因为必须维护索引。

于 2009-09-16T05:54:11.213 回答
0

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.

于 2009-09-09T22:11:30.050 回答