4

这与我的另一个问题有关何时从电子表格移动到 RDBMS

决定从一本 excel 书转向 RDBMS,这就是我建议做的事情。

现有数据在工作簿中的两个工作表中结构松散。第一张表包含主要记录。第二张表允许附加数据。

我的目标 DBMS 是 mysql,但我愿意接受建议。

  1. 定义 RDBMS 模式
  2. 例如,定义与数据库交互的 Web 服务,以便 UI 和迁移都可以使用相同的服务。
  3. 定义迁移脚本以
    • 从电子表格中读取每组关联行
    • 应用验证/约束
    • 使用 Web 服务写入 RDBMS
  4. 在电子表格中定义宏/函数/模块以在可能的情况下强制验证。这将允许在新系统出现时使用现有系统。同时,(我希望)它会在最终进行迁移时减少迁移失败。

你会遵循什么策略?

4

4 回答 4

2

这个问题有两个方面。

数据迁移

您的第一步将是“定义 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 托管他们的数据有些疑虑。这取决于他们在哪个领域开展业务,以及信息的敏感性。

于 2010-03-07T11:25:34.063 回答
1

显然,您需要创建一个目标数据库和必要的表结构。我会跳过 Web 服务并编写一个 groovy 脚本来读取 .xls(使用 POI 库)、验证数据并将其保存在数据库中。

在我看来,任何涉及更多的事情(Web 服务、GUI ......)都是不合理的:这些类型的任务非常适合脚本,因为它们简洁且非常灵活,而性能、代码库可扩展性等方面则较少这里的一个问题。一旦你有了一些可行的东西,你就可以在几分钟或几个小时内使脚本适应任何未来具有不同数据异常的文档。

这一切都假设您的数据不是完美的,需要过滤和/或清理。

或者,如果数据和验证规则不太复杂,您可以使用像Kettle这样的可视化数据传输工具获得良好的结果:您只需将 .xls 定义为源,将数据库表定义为表,进行一些验证/如果需要过滤规则并触发加载过程。相当无痛。

于 2010-03-07T10:39:22.403 回答
1

如果您更愿意使用自己推出的工具,请查看SeekWell,它可以让您从 Google 表格写入您的数据库。定义架构后,将表选择到工作表中,然后编辑或插入记录并标记它们以进行适当的操作(例如,更新、插入等)。设置更新时间表,您就完成了。在此处阅读更多相关信息。免责声明——我是联合创始人。

希望有帮助!

于 2019-05-24T18:57:57.800 回答
0

可能做的工作比你需要的多。Excel 电子表格可以保存为 CVS 或 XML 文件,许多 RDBMS 客户端支持将这些文件直接导入表中。

这可以让您跳过编写 Web 服务包装器和迁移脚本。在任何导入过程中,您的数据库约束仍将正确执行。但是,如果您的 RDBMS 数据模型或模式与 Excel 电子表格有很大不同,那么当然必须通过脚本或 XSLT 进行一些转换。

于 2010-03-07T10:35:01.277 回答