我在这里寻找一些设计帮助。
我正在为需要我存储数万名员工数据的客户工作。这些数据是通过Excel电子表格提供给我的,每个城市/国家都有一个办公室。
我有一个包含电子表格表和数据表的数据库。数据表有一个列spreadsheet_id,它将其链接回电子表格表,以便我知道每个数据行来自哪个电子表格。我还有一个简单的shell脚本,可以将数据上传到数据库。
到目前为止一切顺利。但是,原始电子表格中缺少一些数据,而不是仅仅提供缺少的数据,客户端正在给我一个原始电子表格的修改版本,并附加新的数据。我不能简单地覆盖原始数据,因为数据已经被使用,还有其他表链接到它。
问题是 - 我该如何处理?在我看来,我有以下选择:
上传整个修改后的电子表格,并将原始内容标记为“无效”。
PROS:简单,直接,易于自动化。
缺点:数据库中不必要地存储了大量冗余数据,特别是如果电子表格发生多次变化。
在电子表格上执行差异,只上传更改的行。
PROS:减少数据加载到数据库中。
缺点:它至少部分是手动的,因此容易出错。这也意味着数据库将不再讲述整个故事 - 例如如果以后某些数据遗失,我将无法通过查询数据库来权威地说我从未获得过数据。即使我不得不多次这样做,差异会继续有效吗?
编写一个流程,将每个电子表格行与数据库中的内容进行比较,插入已更改数据的行,并将原始数据行设置为非活动状态。 (我也必须跟踪原始数据,所以我不能覆盖它。)
PROS:它是自动化的。
缺点:编写和测试这样一个过程需要时间,而且我很难证明这样做的时间是合理的。
我希望能提出第四个更好的解决方案。关于那可能是什么的任何想法?
答案 0 :(得分:1)
如果您无法100%确定您可以避免选项2中的人为错误,请不要这样做。
选项3:编写一个为您进行比较的VBA脚本应该不会太困难(或者非常耗时)。 VBA不是快,但你可以让它运行一夜。不应该花费超过一两个小时的时间让它无误运行。
选项1:这将是我的首选方法:快速,简单,我现在无法想到任何可能出错的事情。 (好吧,您应该首先将原始标记为“非活动”,然后上传新数据集IMO)。特别是如果将来更频繁地发生这种情况,有一个稳定而快速的处理过程非常重要。
如果您真的担心所有非活动条目,您也可以在更新后删除它们(delete from spreadsheets where status='inactive'
或某些)。但到目前为止,我在工作中看到的所有数据库都有很多这样的数据库。我不会太担心它。