Sql server 从非规范化表到规范化表的数据迁移

Sql server 从非规范化表到规范化表的数据迁移,sql-server,migration,normalization,Sql Server,Migration,Normalization,我有一个非标准化的表格,显示了详细的汽车品牌、车型和子车型的汽车销售情况。因为它不是标准化的,它没有引用汽车品牌、模型和子模型的ID,而是具有真实的值。这些值是由员工在将要迁移的旧应用程序中手动输入的,因此可能存在许多问题,如拼写错误、类似的单词、空格、破折号等 我创建了一个规范化表,需要将现有数据从非规范化表迁移到新的规范化表。我需要找到每个值对应的ID(汽车品牌、型号和子型号的ID)。但是,这并不容易,因为例如,奥迪(汽车制造)A4(汽车模型)1.8T(子模型)可以写成奥迪A4 1.8Tur

我有一个非标准化的表格,显示了详细的汽车品牌、车型和子车型的汽车销售情况。因为它不是标准化的,它没有引用汽车品牌、模型和子模型的ID,而是具有真实的值。这些值是由员工在将要迁移的旧应用程序中手动输入的,因此可能存在许多问题,如拼写错误、类似的单词、空格、破折号等

我创建了一个规范化表,需要将现有数据从非规范化表迁移到新的规范化表。我需要找到每个值对应的ID(汽车品牌、型号和子型号的ID)。但是,这并不容易,因为例如,奥迪(汽车制造)A4(汽车模型)1.8T(子模型)可以写成奥迪A4 1.8Turbo或奥迪A4 1.8Turbo喷射或奥迪A4 1.8 TFI等。因此,同一实体有许多不同的文本值。 考虑到上面给出的上下文,我认为获取ID的最佳选择是为每个实体提供一个别名表。例如,CarSubModelAlias。这些表将指定映射到同一实体的所有不同值。 不幸的是,我有3500多个子模型,很难填充这些表


有什么建议吗?

Jayvee是正确的,最好的方法是开发SSIS包。使用精确匹配和模糊匹配组件将源数据与目标数据匹配。这样,您也可以规范化数据。

在这种情况下,它始终是数据清理的一个元素。SSIS可能是一个很好的选择,通过首先提取所有完美匹配,然后通过模糊查找传递剩余行以找到最佳匹配,从而连续减少问题。感谢您如此快速的回答。我不确定SSIS在这种情况下是否可以工作,因为引用名称可能与文本值完全不同。例如:参考值:1.8T文本值:1.8 Turbo Injection FI我正在分析Levenshtein算法以比较字符串(.NET算法实现:)。我正在考虑一个小型控制台应用程序,它获取文本值的前N个字符(N是参考值的长度),并使用此算法比较它们。你觉得怎么样?我检查了Levenshtein算法,但在某些情况下效果不太好。它混淆了1.8和1.8T,因为根据这个算法,距离只有1,1.8T和1.8T的距离是2。我想我将创建一个Windows应用程序,显示按距离排序的所有映射选项,以便用户可以选择最佳选项(手动交互)。默认情况下,将选择距离最小的一个。我不确定您是否已解决此问题,但使用SSIS中的脚本组件,您还可以编写自己的规则来匹配两个关键字,如“1.8T”和“1.8T”。为此,我们可以开发一个DLL,并在SSIS脚本组件中添加对该DLL的引用,然后我们可以将最终结果分为好匹配和坏匹配。我开发了一个小工具来管理数据映射,因为有些情况无法匹配,需要人工干预。我的工具会自动匹配有85%或更高几率相同的情况,并在值较低的情况下建议适当的匹配。此外,它还显示了所有可能的匹配值,因此如果您不喜欢该工具选择的值,您可以确定正确的值。