1

我正在帮助一个非营利组织将他们现有的数据组织到一个数据库中。数据包括大约 200 条记录。他们一直在使用一个简单的word文档。我正在开始构建原始数据的工作,以便可以将其输入数据库。我将数据复制到 Textpad 中,效果很好。也就是说,数据是结构化的,但不是完美匹配。例如,一些组织有一个网站,一些没有等。以下是一些指示剩余数据的信息示例:

我创建了一个 ERD,它经过了多次修改,并得到了我的导师的批准。此时我处于 ETL(Extract, transform, load) 过程

  1. 清理剩余的部分结构化但混乱的数据。
  2. 放入Excel可读的doc类型,并排列到适用的表格中
  3. 创建数据输入 SQL 脚本。
  4. 运行脚本。

我已经用其他一些数据做到了这一点,而且效果很好。

清理并将其放入 Excel(CSV 或制表符分隔)是我需要指导的地方。还是将其转换为 XML 更好?如果我手动浏览文本文件以确保所有标题(因为缺少更好的词)匹配如下:

有没有办法转移呢?

我对此进行了研究,我很惊讶我找不到任何好的信息。[更新]我刚刚找到了实际的术语,ETL Process。如果我必须开始重新输入和/或剪切和粘贴,请告诉我。

4

1 回答 1

1

这两个“记录”明显不同。例如,一些联系人有多个电话号码,而其他联系人只有一个。此外,联系人的数量可能会有所不同。它似乎适用于具有多个表的关系数据库模式。但是,您将很难根据数据布局自动化填充多个关系表的过程。你要处理多少数据?如果它不是一个巨大的数量,你可能会更好地做这种半手动,将你的 Textpad 文档的部分重新格式化为 INSERT 语句(使用大量的正则表达式搜索和替换),并花一些时间运行查询。

如果数据量确实很大,那么您可能需要用您选择的语言编写一个小程序来解析文件并创建一个包含适当插入语句的输出文件以填充所有数据表。

对于一个健壮的关系数据库,您需要一个至少包含以下表格的数据库模式:

Categories (map category names to IDs)
Types (map Group Types to IDs)
Organizations (including category and group type ID, name, addr, objs, activities, meetings, website, email, and an organization ID)
Contacts (one to many referencing org ID, including contact name and a contact ID)
Phone (one to many referencing contact ID, including phone type and phone number)

如果没有 Types 和 Categories 表,您可能会侥幸逃脱,但根据数据量以及他们将来计划如何查询数据(例如,如果在某个时候他们希望找到特定类别中的所有组织),它们可能会很有用特定组类型,并且至少有数千个组织,那么额外的表格将证明是值得的)。

由于联系人/电话信息似乎非常灵活,因此最好将其放入单独的表中 - 否则您必须在主组织表中包含 contactN/phoneN/phoneTypeN 的列,以获得最大可能的联系人数/phones,这也会限制可以建立多少联系人/电话关联。

您还最好确保没有任何记录需要任何其他字段(会议、电子邮件、...)的多个条目。如果这是可能的,那么您再次需要选择是添加额外的关系表,还是添加多个字段以获得最大可能到组织表。

于 2012-06-07T20:11:44.567 回答