【问题标题】:How to store user profile edits that must be approved before going live?如何存储必须在上线前批准的用户配置文件编辑?
【发布时间】:2009-09-16 13:54:11
【问题描述】:

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

感谢您的意见。

【问题讨论】:

    标签: sql mysql data-modeling


    【解决方案1】:

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

    【讨论】:

    • 我总是使用这种方法而不是 xml 序列化。它要简单得多,因此也更容易处理。
    • 旧线程,但我想我会用我最终使用的解决方案来更新它,就是这个。用户无需对多个更改进行排队,而是对其个人资料进行更改,然后将其放入此单独的编辑表中,然后每次对编辑表单的后续访问都会加载尚未批准的先前编辑(如果有的话),或者来自主表的配置文件.每个后续编辑都会替换之前的编辑,因为我不需要将它们排队。
    【解决方案2】:

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

     WHERE status = 'published'
    

    这适用于简单的网站。

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

        • 这可能是我正在寻找的答案。我不热衷于用额外的表或任何带有重复字段的单个表来混乱数据库,但可能是主表中的一个“编辑”字段,我可以在其中序列化从用户保存的数组(你为什么建议使用 XML?)形式(消毒后)。这样,如果记录具有填充的“编辑”字段,我也可以通知管理员待处理的更改。
        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

          与第一个格式相同的第二个表不容易让多个更改排队。

          我建议设计一个特定的结构来将每个变更请求记录为一个变更请求。更改对象、更改内容、更改对象、提出请求的人员、何时等字段。

          然后有代码在验证时应用更改。

          这也可以作为一个易于跟踪的审计线索。

          我不会在同一张表中进行更改,它将实现紧密地绑定在一起,使以后的维护变得头疼。独立性降低了所有事物的耦合程度,以便在未来获得更大的灵活性。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-12-23
            • 2012-04-14
            • 2014-04-29
            • 2014-01-26
            相关资源
            最近更新 更多