将数据从电子表格迁移到 RDBMS 的策略是什么?

2024-05-16

这与我的另一个问题相关何时从电子表格迁移到 RDBMS https://stackoverflow.com/questions/2395607/when-to-switch-from-spreadsheet-to-rdbms

决定从 Excel 书籍转向 RDBMS 后,我建议这样做。

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

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

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

你会采取什么策略?


这个问题有两个方面。

数据迁移

您的第一步将是“定义 RDBMS 模式”,但是您打算走多远?众所周知,电子表格未标准化,因此存在大量重复。您在另一个问题中说“数据结构松散,没有明确的约束”。如果你想转型that进入一个严格定义的模式(至少 3NF),那么你将不得不做一些清理。 SQL 是数据操作的最佳工具。

我建议您构建两个暂存表,每个工作表一个。尽可能宽松地定义列(基本上是大字符串),以便轻松加载电子表格的数据。将数据加载到临时表后,您可以运行查询来评估数据质量:

  • 有多少重复的主键?
  • 有多少种不同的数据格式?
  • 查找代码是什么?
  • 第二个工作表中的所有行是否在第一个工作表中都有父记录?
  • 代码格式、数据类型等的一致性如何?
  • 等等。

这些调查将为您编写 SQL 奠定良好的基础,您可以使用 SQL 来填充实际的架构。

或者,数据可能非常令人绝望,以至于您决定只使用这两个表。我认为这是一个不太可能的结果(大多数应用程序都有一些底层结构,我们只需要深入挖掘即可)。

数据加载

最好的办法是将电子表格导出为 CSV 格式。 Excel 有一个向导可以执行此操作。使用它(而不是做Save As...)。如果电子表格包含任何自由文本,您很可能会得到包含逗号的句子,因此请确保选择一个真正安全的分隔符,例如^^~

大多数 RDBMS 工具都具有从 CSV 文件导入数据的功能。 Postgresql 和 Mysql 是非政府组织的明显选择(我认为成本是一个考虑因素),但 SQL Server 和 Oracle 都有免费(如果受到限制)的 Express 版本。 SQL Server 显然与 Excel 的集成最好。 Oracle 有一个称为外部表的绝妙功能,它允许我们定义一个将数据保存在 CSV 文件中的表,从而无需临时表。

另一件需要考虑的事情是 Google App Engine。它使用大表而不是 RDBMS,但这可能更适合松散结构的数据。我建议这样做是因为您提到 Google Docs 作为替代解决方案。 GAE 是一个有吸引力的选择,因为它是免费的(或多或少,如果使用量超过一些非常慷慨的阈值,他们就会开始收费),并且它将解决与其他非政府组织的应用程序共享问题。显然,您的组织可能对 Google 托管其数据有一些疑虑。这取决于他们所处的领域以及信息的敏感性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将数据从电子表格迁移到 RDBMS 的策略是什么? 的相关文章

  • 从 SQL 数据库获取日期时间

    我的数据库表中有一个 DateTime 记录 我编写一个查询从数据库中获取它 string command2 select Last Modified from Company Data where Company Name Descrip
  • Laravel Eloquent 预加载:加入同一个表两次

    我有一个users表和一个约会桌子 在约会表中 我有两个用户 ID customer id staff id 我想检索所有带有客户姓名和员工姓名的约会 users table id name appointments table id st
  • 重命名猫鼬中的字段[重复]

    这个问题在这里已经有答案了 我有两个 JSON 对象 每个对象都有一个名字字段 我想将名字重命名为名称 还想使用猫鼬将现有的名字值导入到名称 Schema const mongoose require mongoose const Sche
  • 如何使用 SharedPreferences 保存多个值?

    我正在开发一个字典应用程序 在我的应用程序中 我假设用户想要保存最喜欢的单词 我决定使用共享首选项保存这些值 我知道 SQLite 和文件更好 但我坚持使用 SharedPreferences 所以继续使用它 下面是我的代码 Overrid
  • 考虑到我的图像链接存储在MySQL数据库中,如何通过php显示存储在文件夹中的图像

    作为良好的做法 我只将图像链接存储在数据库中 问题是 我应该如何存储图像的链接 假设它在 c 上 c image jpg 我应该使用哪段 PHP 代码来显示该图像 我只显示路径 我该怎么做才能显示图像 我可以用这个吗 query SELEC
  • 使用包含 [模板]、[编码]、[所有者] 的批处理文件和 .sql 文件创建 Postgres 数据库

    我想使用批处理文件创建 Postgres 数据库 现在执行此操作的正常方法如下 C Program Files PostgreSQL 9 0 bin createdb exe U Myadmin MydatAbseName 上面的脚本使用默
  • BIT(1) 的存储大小是多少?

    我一直认为a的存储大小BIT 1 列为 1 位 But http dev mysql com doc refman 5 6 en storage requirements html http dev mysql com doc refman
  • 如何使 cx-oracle 将查询结果绑定到字典而不是元组?

    这是我的代码 我想找到一种方法将查询结果作为字典列表而不是元组列表返回 看起来 cx oracle 通过部分文档讨论 绑定 来支持这一点 虽然我不知道它是如何工作的 def connect dsn cx Oracle makedsn hos
  • 2 同一个表的同一列上的 PostgreSQL 索引 - 冗余吗?

    我有一个带有 2 个索引的 PostgreSQL 表 其中一项指数涵盖website id and tweet idcolumns 是唯一的 B 树索引 第二个索引仅涵盖website id列 并且是非唯一索引 如果第一个索引存在 第二个索
  • 动态连接字符串数据库C#

    我总是使用这行代码进行连接 string ConnectString datasource mysource username myusername password mypassword database mydatabasename 这
  • 在 Python 中打开 Alteryx .yxdb 文件?

    有没有办法将 yxdb Alteryx 数据库文件 导入到 Pandas Python 中 而不使用 Alteryx 作为中间人 简短的回答是否定的 目前还不行 更长的答案 yxdb 支持的原始 C 是可以在 github 上找到 http
  • 高负载应用程序的数据库可扩展性?

    我见过一些应用程序拥有集群 Web 服务器 例如 10 到 20 个服务器 以具有可扩展性 可以在其中分发 在网络服务器之间加载 但我总是看到所有网络服务器都使用单个数据库 现在考虑任何电子商务或铁路 Web 应用程序 其中有数百万用户在任
  • oracle嵌套表的最大行数是多少

    CREATE TYPE nums list AS TABLE OF NUMBER Oracle 嵌套表中最大可能的行数是多少 UPDATE CREATE TYPE nums list AS TABLE OF NUMBER CREATE OR
  • 猫鼬查找并删除

    我正在尝试删除满足查询的多个文档 但是 我需要这些文档的数据将它们存储在单独的集合中以实现撤消功能 我让它工作的唯一方法是使用多个查询 Data find query exec function err data Data remove q
  • 在 Codeigniter 中从其他数据库切换动态数据库

    mi 文件 config php 是 active group default active record TRUE db master 是唯一的数据库 db master hostname localhost db master user
  • JPA 乐观锁与同步 Java 方法

    使用 JPA 乐观锁定 我们可以通过 Version 字段控制数据库表是否已被另一个事务同时更新 从而允许在数据库中存储可靠的数据 如果一个Java应用程序只有一个CRUD服务负责数据库中的特定实体 我们也可以同步其方法并管理信息在数据库中
  • mysql 中 INSERT 语句的计算列

    假设我想要一个表来记录其他表中的日期和列数 或者任何类型的数学 字符串连接等 CREATE TABLE log id INTEGER NOT NULL AUTO INCREMENT date DATETIME NOT NULL count
  • 无法获取 ConfigBean 中实体的正确 ID - Java EE

    我正在构建一个药房管理应用程序 每个药房都需要一名管理员 约束是这样的 public class Pharmacy implements Serializable Id GeneratedValue strategy GenerationT
  • 如何将变量设置为触发器 MYSQL 内存储过程的结果?

    我这里有一个小问题 我正在为我的数据库工作创建一个触发器 但我不知道如何在触发器内使用存储过程 我想将过程的结果保存在变量中 然后使用稍后在 IF 比较器上变量 这是我的代码 DELIMITER CREATE TRIGGER insert
  • 调整 Oracle 数据库以加快启动速度(闪回)

    我正在使用 Oracle 数据库 11 2 我有一个场景 我发出FLASHBACK DATABASE经常 似乎有一个FLASHBACK DATABASECycle 会重新启动数据库实例 大约需要 1 分钟 我的设置花了 7 秒 数据库很小

随机推荐