我有一个看起来像这样的表:
Person Project1 Project2 Project3 WorkedWith1 WorkedWith2 WorkedWith3
John A B Null Ann Mary Null
Ann A B C Jeff Null Null
....
我正在寻找一种工具,可以帮助我将其转换为1NF,而无需编写任何代码。
具体来说,在这个例子中,我会告诉工具我想将数据重新排列成表Persons
,Projects
,Assigned
(将Persons
链接到{多对多关系中的{1}}和Projects
(在多对多关系中将WorkedWith
与Persons
相关联)。我想要的工具就是按照这些说明移动数据。
我真的不在乎这个工具是某个DBMS的一部分,还是只使用纯文本(CSV)文件 - 而不涉及任何特定的数据库。我在MS Access 2010中尝试过Table Analyzer,但除非我遗漏了某些内容,否则它无法解决此特定任务。 (尽管在简单的情况下它完美无缺。)
注意:我熟悉规范化;我不想学习任何东西 - 只是想节省时间。我也理解为什么不存在用于数据库规范化的通用工具。我希望我的案例如此简单和普遍,以至于可能有一个工具可以处理它。我也不介意学习一种相对复杂的工具。
答案 0 :(得分:2)
我相信你想要的是ETL软件 据我所知,您需要预先创建目标表,但ETL可以将数据从一个数据库(或文件)拆分,重新组合并加载到另一个数据库(或文件)。
对于您的目的而言可能有点过分了,使用ETL软件的学习曲线可能比编写一些VBA和一些查询以帮助将数据从一种形式传输到另一种形式更多,但如果这是你的东西经常做,它可能仍然值得。
在你的情况下,我很可能只是创建目标表并对输入表进行多次传递以一次提取数据,填写Persons
和Projects
表格来自原始列的不同数据,然后在单独的表中重新创建关系。
在VBA中进行此类工作时,我发现Dictionary对于跟踪关系非常宝贵。