自动标准化为1NF(删除重复列)

时间:2012-10-28 06:19:45

标签: sql database ms-access normalization etl

我有一个看起来像这样的表:

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

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

具体来说,在这个例子中,我会告诉工具我想将数据重新排列成表PersonsProjectsAssigned(将Persons链接到{多对多关系中的{1}}和Projects(在多对多关系中将WorkedWithPersons相关联)。我想要的工具就是按照这些说明移动数据。

我真的不在乎这个工具是某个DBMS的一部分,还是只使用纯文本(CSV)文件 - 而不涉及任何特定的数据库。我在MS Access 2010中尝试过Table Analyzer,但除非我遗漏了某些内容,否则它无法解决此特定任务。 (尽管在简单的情况下它完美无缺。)​​

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

1 个答案:

答案 0 :(得分:2)

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

对于您的目的而言可能有点过分了,使用ETL软件的学习曲线可能比编写一些VBA和一些查询以帮助将数据从一种形式传输到另一种形式更多,但如果这是你的东西经常做,它可能仍然值得。

在你的情况下,我很可能只是创建目标表并对输入表进行多次传递以一次提取数据,填写PersonsProjects表格来自原始列的不同数据,然后在单独的表中重新创建关系。

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