数据库数据上传设计问题

时间:2008-12-11 18:17:12

标签: database shell

我在这里寻找一些设计帮助。

我正在为需要我存储数万名员工数据的客户工作。这些数据是通过Excel电子表格提供给我的,每个城市/国家都有一个办公室。

我有一个包含电子表格表和数据表的数据库。数据表有一个列spreadsheet_id,它将其链接回电子表格表,以便我知道每个数据行来自哪个电子表格。我还有一个简单的shell脚本,可以将数据上传到数据库。

到目前为止一切顺利。但是,原始电子表格中缺少一些数据,而不是仅仅提供缺少的数据,客户端正在给我一个原始电子表格的修改版本,并附加新的数据。我不能简单地覆盖原始数据,因为数据已经被使用,还有其他表链接到它。

问题是 - 我该如何处理?在我看来,我有以下选择:

  1. 上传整个修改后的电子表格,并将原始内容标记为“无效”。

    PROS:简单,直接,易于自动化。
    缺点:数据库中不必要地存储了大量冗余数据,特别是如果电子表格发生多次变化。

  2. 在电子表格上执行差异,只上传更改的行。

    PROS:减少数据加载到数据库中。
    缺点:它至少部分是手动的,因此容易出错。这也意味着数据库将不再讲述整个故事 - 例如如果以后某些数据遗失,我将无法通过查询数据库来权威地说我从未获得过数据。即使我不得不多次这样做,差异会继续有效吗?

  3. 编写一个流程,将每个电子表格行与数据库中的内容进行比较,插入已更改数据的行,并将原始数据行设置为非活动状态。 (我也必须跟踪原始数据,所以我不能覆盖它。)

    PROS:它是自动化的。
    缺点:编写和测试这样一个过程需要时间,而且我很难证明这样做的时间是合理的。

  4. 我希望能提出第四个更好的解决方案。关于那可能是什么的任何想法?

1 个答案:

答案 0 :(得分:1)

如果您无法100%确定您可以避免选项2中的人为错误,请不要这样做。

选项3:编写一个为您进行比较的VBA脚本应该不会太困难(或者非常耗时)。 VBA不是,但你可以让它运行一夜。不应该花费超过一两个小时的时间让它无误运行。

选项1:这将是我的首选方法:快速,简单,我现在无法想到任何可能出错的事情。 (好吧,您应该首先将原始标记为“非活动”,然后上传新数据集IMO)。特别是如果将来更频繁地发生这种情况,有一个稳定而快速的处理过程非常重要。

如果您真的担心所有非活动条目,您也可以在更新后删除它们(delete from spreadsheets where status='inactive'或某些)。但到目前为止,我在工作中看到的所有数据库都有很多这样的数据库。我不会太担心它。