我使用codeignter和mysql db为组织创建了一个会计Web应用程序,我刚刚将它提交给他们,他们喜欢这项工作,但他们问我们如何将他们的旧手册数据转移到新的手册数据,以便他们的成员能够看到他们的帐户余额和贡献历史。
这对我来说是一个主要问题,因为我的大多数表都使用“参照完整性”来确保数据同步,并且不支持其手工记帐的样式。
我知道很多人都遇到过这样的情况,我很想知道收集用户历史的最佳方式,我也知道这可能会被标记为不是一个真正的问题,但我真的需要问问有经验的人。
我很感激所有答案。谢谢(并且也投票)..
答案 0 :(得分:2)
无论情况如何,数据转换都非常具有挑战性,而且几乎总是很耗时。根据所讨论数据的一致性,如果您使用PHP创建转换程序,则可能会有大约80%的数据传输过来。转换代码本身可能比它的价值更耗时。如果您正在谈论成千上万的记录及其他记录,那么使转换程序工作可能是一个好主意。任何可能暗示存在银弹的人当然都不正确。
以下是一些建议的步骤:
(可选)将Excel电子表格导出到Access。 Access可以帮助您标准化数据,并提供适当的工具来帮助您找到以某种方式失败的记录。如果需要,您还可以在Access中创建过滤器。如果您熟悉Access,则执行此步骤的好处是您已经开始将转换过程转换为数据库。事实上,如果你愿意,你也可以import your MySQL database information into Access。这样做的好处非常明显:您可以创建一个查询并将两个单独的表合并在一起以形成一个表,这可以为您节省大量代码。
将您的Access表/查询导出为CSV文件(注意,如果您发现它有点过分,或者如果您没有Access,则可以跳过第1步,只需保存您的.xls或.xlsx文件键入.csv。这可能需要更多的PHP转换代码,但这可能是一个偏好的问题。有些人更喜欢尽可能避免使用Access,如果你通常不使用它你会浪费时间去学习它,只是为了节省一点时间。)
利用PHP的内置str_getcsv功能。这会将CSV文件转换为PHP数组。
创建自动程序以解析每条记录。根据列及其要求,您可以接受或拒绝记录。然后,您可以将数据(例如在this SO answer中完成)导出回CSV。您可以保存两个不同的CSV文件,一个包含已接受的记录,另一个包含已拒绝的记录。
对于从电子表格转移时几乎不可避免的拒绝记录,您需要采取一系列措施。对于您的客户来说,最简单的方法可能是给他们一个程序来手动将记录导入到数据库中,如果您已经为他们提供了这样做的接口,或者 - 可能更简单但需要更多来回 - 来更新Excel中的记录符合新系统。
修改强> 基于你的问题下的线程,它更清楚地说明了你想要做什么(即,每个交易的父母是一个可接受的贷款),你应该能够设计一个父领域,即使它不完整,通过基于帐户为每组交易创建父记录。您可以通过Access,PHP或更可能的组合来实现此目的。
<强>结论强> 长话短说,数据转换需要时间。如果您将时间放在前面,从长远来看,维护标准化的信息系列会容易得多。如果你发现一开始就花费的时间较少,那么从长远来看,这将意味着你需要额外的工作才能使这个“简单”的修复工作随着时间的推移而发挥作用。
同样,您越接近遗留数据以符合您的新数据,您的客户就越容易执行查询等。这可能意味着您或您的某些人需要手动输入客户,最好充分告知客户每种方法的利弊,让他们决定。我的建议总是将额外的工作放在前端,因为它总是比在长期内处理快速修复更便宜,但鉴于现实世界的限制,这并不总是实用的。