【问题标题】:Handling missing data处理缺失数据
【发布时间】:2010-10-13 05:26:33
【问题描述】:

假设我有一个简单的帮助台应用程序,它记录用户的呼叫。

我通常会在与呼叫相关的表中包含此类字段,例如CallID、Description、CustomerID 等。

我还会有一个客户表,包括客户 ID、用户名、密码、全名等。

现在,当从客户表中删除用户时,调用表和用户表之间的内部联接以找出历史上哪个用户记录了呼叫将不会产生任何结果。

人们通常如何处理这个问题?

  • 拥有单独的客户和用户帐户表
  • 只需禁用帐户,数据仍然可用
  • 在电话表中将客户姓名记录为单独的字段。

或任何其他方法/建议?

【问题讨论】:

    标签: database-design


    【解决方案1】:

    正如其他答案所指出的,常见的解决方案是使用标志将客户记录标记为“已删除”、“已过期”或类似。

    请注意,由于隐私原因/隐私法,您可能需要实际删除个人信息(姓名、地址等)。然后,您需要将记录中的某些字段留空,用占位符值替换它们。

    另一种方法是彻底删除客户记录,并为已删除的客户创建一个“虚拟”客户记录。然后,您可以将所有客户的相关记录重新分配给虚拟对象。这当然会丢失信息,但这是必须删除所有个人信息的唯一方法 - 如果您保留客户记录,您可以查看哪些相关数据属于哪个(已删除)客户,有时可能足以猜测被删除客户的身份。

    您需要根据要求和法规做出决定。

    【讨论】:

      【解决方案2】:

      删除记录很少是个好主意。通常你会想要包含一个 isActive 标志、明确的有效日期或类似的东西。

      【讨论】:

        【解决方案3】:

        我建议使用以下工具之一“软删除”用户记录: http://www.ruby-toolbox.com/categories/activerecord_soft_delete.html

        或者只是想出您自己的解决方案,通过“禁用”帐户或其他方式提供相同的功能。

        【讨论】:

          【解决方案4】:

          假设您已正确规范化数据,您不应该删除客户记录,因为您将有 1 个客户进行多次调用,调用 fk 引用了客户 pk,这就是数据完整性的全部意义所在。我认为客户的有效日期是不删除呼叫的唯一方法。非规范化数据绝对不是要走的路。

          【讨论】:

            猜你喜欢
            • 2023-02-08
            • 2017-02-10
            • 1970-01-01
            • 1970-01-01
            • 2017-07-07
            • 2015-12-10
            • 1970-01-01
            • 2014-04-27
            • 2016-11-04
            相关资源
            最近更新 更多