这与我的其他问题when to move from a spreadsheet to RDBMS
相关联决定从excel书中转移到RDBMS,这是我打算做的。
现有数据在工作簿中的两张纸上松散结构。第一张包含主要记录。第二张表允许附加数据。
我的目标DBMS是mysql,但我愿意接受建议。
你会采取什么策略?
答案 0 :(得分:1)
显然,您需要创建目标数据库和必要的表结构。 我会跳过Web服务并编写一个groovy脚本来读取.xls(使用POI库),验证并将数据保存在数据库中。
在我看来,任何涉及的内容(Web服务,GUI ......)都是不合理的:这些类型的任务非常适合脚本,因为它们简洁且极其灵活,而性能,代码库可扩展性和这不是一个问题。一旦有了可行的方法,您就可以将脚本调整到任何未来的文档中,并在几分钟或几小时内遇到不同的数据异常。
这都是假设您的数据不完整,需要过滤和/或清理。
或者,如果数据和验证规则不是太复杂,使用Kettle之类的可视化数据传输工具可能会获得良好的结果:您只需将.xls定义为源,即数据库表作为表,如果需要,一些验证/过滤规则并触发加载过程。相当无痛。
答案 1 :(得分:1)
这个问题有两个方面。
数据迁移
您的第一步将是“定义RDBMS架构”,但您将在多大程度上使用它?电子表格是众所周知的非标准化,因此有很多重复。你在另一个问题中说“数据结构松散,没有明确的限制。”如果您想将 转换为严格定义的模式(至少3NF),那么您将不得不进行一些清理。 SQL是数据操作的最佳工具。
我建议您构建两个临时表,每个工作表一个。尽可能松散地定义列(基本上是大字符串),以便加载电子表格的数据。将数据加载到临时表后,您可以运行查询来评估数据质量:
这些调查将为您编写用于填充实际架构的SQL提供良好的基础。
或者可能是数据如此绝望,以至于你决定坚持使用这两个表。我认为这是不太可能的结果(大多数应用程序都有一些底层结构,我们只需深入挖掘)。
数据加载
最好的办法是将电子表格导出为CSV格式。 Excel有一个向导来执行此操作。使用它(而不是Save As...
)。如果电子表格中包含任何自由文本,则您将拥有包含逗号的句子,因此请确保选择一个非常安全的分隔符,例如^^~
大多数RDBMS工具都可以从CSV文件导入数据。 Postgresql和Mysql是非政府组织的明显选择(我认为成本是一个考虑因素),但SQL Server和Oracle都是免费的(如果受限制的)Express版本。 SQL Server显然与Excel具有最佳集成。 Oracle有一个称为外部表的漂亮功能,它允许我们定义一个表,其中数据保存在CSV文件中,无需登台表。
另一件需要考虑的事情是Google App Engine。这使用Big Table而不是RDBMS,但这可能更适合于松散结构化的数据。我建议这是因为您提到Google Docs作为替代解决方案。 GAE是一个有吸引力的选择,因为它是免费的(或多或少,如果使用超过一些非常慷慨的门槛,他们开始收费),它将解决与其他非政府组织的应用程序共享问题。显然,您的组织可能对Google托管其数据有一些疑虑。这取决于他们在哪个领域运作,以及信息的敏感性。
答案 2 :(得分:1)
如果您想使用自己的工具,请查看SeekWell,该工具可让您从Google表格中写入数据库。定义架构后,将表格选择到工作表中,然后编辑或插入记录,并将其标记为适当的操作(例如,更新,插入等)。设置更新时间表,您就完成了。进一步了解here。免责声明-我是联合创始人。
希望有帮助!
答案 3 :(得分:0)
你可能做的工作超出了你的需要。 Excel电子表格可以保存为CVS或XML文件,许多RDBMS客户端支持将这些文件直接导入表格。
这可以允许您跳过编写Web服务包装和迁移脚本。在任何导入过程中,仍会正确执行您的数据库约束。但是,如果您的RDBMS数据模型或模式与Excel电子表格有很大不同,那么一些翻译当然必须通过脚本或XSLT进行。