2010-02-26 7 views
0

Je reçois des fichiers de données d'une source sur laquelle je n'ai aucun contrôle (le gouvernement) et dans les enregistrements ils ont un champ Nom de société que j'ai réellement besoin d'associer à enregistrements d'entreprise dans ma base de données. Je crains que certains des noms varient selon des différences mineures telles que 'Company X, Inc.' vs 'Compagnie X Inc'. Donc, mon idée initiale serait de créer un champ de clé de classement basé sur le nom ToLower() et d'appliquer une regex pour supprimer tout l'espace blanc et les caractères spéciaux.Sql Server quoi faire pour faire une clé de classement à partir d'une valeur de chaîne

Y a-t-il une meilleure méthodologie à appliquer à cela?

Répondre

1

cela peut fonctionner, mais il peut y avoir des fausses correspondances, sans aucun moyen de les empêcher, car vous n'avez qu'une solution d'algorithme. Votre meilleur pari est de créer une table d'alias. Incluez toutes les variantes trouvées pour chaque nom d'entreprise et un FK dans l'ID de l'entreprise réelle. Inclure une ligne pour le nom réel aussi bien.

AliasID CompanyID CompanyAlias 
------- --------- ------------ 
1  1   Company X, Inc <<--actual real company name 
2  1   Company X Inc 
3  1   Company X 

Si une correspondance exacte nom ne se trouve pas dans ce tableau lorsque l'importation de données, vous pouvez utiliser votre algorithme proposé ou d'une autre, ou utiliser une entrée humaine, etc pour trouver une correspondance ou générer une nouvelle société. À ce stade, insérez dans la table d'alias. Si vous trouvez que votre correspondance est incorrecte pour une raison quelconque, vous pouvez modifier la table d'alias pour effectuer le mappage approprié. Si vous n'utilisez qu'un algorithme, vous devrez inclure des exceptions et votre algorithme deviendra grand et lent. Avec cette table et un bon index, trouver vos correspondances devrait être rapide.

+0

J'ai combiné votre suggestion avec mon idée originale mais au lieu d'utiliser AliasID comme une séquence pour qu'elle soit une colonne varbinary qui a la valeur 'HashBytes ('md5', Trim & Lower (CompanyName))' et quand je présélectionne des données déterminez facilement si une valeur ne figure pas dans la table et ajoutez l'enregistrement d'alias. –

Questions connexes