【问题标题】:Automated normalization to 1NF (removal of duplicate columns)自动标准化为 1NF(删除重复列)
【发布时间】:2023-04-11 06:34:01
【问题描述】:

我有一张如下所示的表格:

Person  Project1 Project2 Project3 WorkedWith1  WorkedWith2  WorkedWith3
John    A        B        Null     Ann          Mary         Null
Ann     A        B        C        Jeff         Null         Null
....

我正在寻找一种工具,可以帮助我将其转换为 1NF,而无需我编写任何代码。

具体来说,在这个例子中,我会告诉工具我想将数据重新排列到表PersonsProjectsAssigned(它将Persons 链接到Projects 在多对-多关系)和WorkedWith(以多对多关系将Persons链接到Persons)。我想要该工具做的就是根据这些说明移动数据。

我真的不在乎这个工具是否是某些 DBMS 的一部分,或者仅适用于纯文本 (CSV) 文件——而不涉及任何特定的数据库。我在 MS Access 2010 中尝试过表分析器,但除非我错过了什么,否则它无法解决这个特定任务。 (不过,它在更简单的情况下也能完美运行。)

注意:我熟悉规范化;我不想学习任何东西——只是想节省自己的时间。我也理解为什么不存在用于数据库规范化的通用工具。我希望我的案例如此简单和普遍,以至于可能有一个工具可以处理它。我也不介意学习一个相对复杂的工具。

【问题讨论】:

  • 最好的工具是自己分析和编码。这样,您将学会在不依赖工具的情况下自学数据库规范化。干杯:D
  • @JohnWoo:我在数据库规范化方面有相当的经验。我不想在这里自学任何东西。我正在寻找一种工具来节省自己的时间。
  • @anonymous downvoter:感谢您提供反馈,即使它是负面的。我可以请您澄清为什么我的问题“不清楚或没有用”(我相信这就是投票的含义)?

标签: sql database ms-access normalization etl


【解决方案1】:

我相信您想要的是ETL 软件。
据我所知,您需要预先创建目标表,但 ETL 可以将数据从一个数据库(或文件)拆分、重组和加载到另一个。

不过,对于您的目的来说,这可能有点过头了,使用 ETL 软件的学习曲线可能比编写一些 VBA 和一些查询来帮助将数据从一种形式传输到另一种形式要多得多,但如果这是您所拥有的经常做,可能还是值得的。

但在您的情况下,我很可能只是创建目标表并在输入表上进行多次传递以一次提取数据,用来自原始列,然后在单独的表中重新创建关系。

在 VBA 中进行此类工作时,我发现 Dictionary 对于跟踪关系非常宝贵。

【讨论】:

  • 谢谢,这很有帮助。我不知道 ETL 软件是什么。我现在在问题中添加了 ETL 标签。显然,如果没有具有轻松学习曲线的工具,我可能确实只是编写自己的查询 - 但知道选项是什么仍然很好。
猜你喜欢
  • 1970-01-01
  • 2015-12-06
  • 2017-08-29
  • 1970-01-01
  • 2015-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-16
相关资源
最近更新 更多