Нормализация имен людей в SQL 2008R2
У меня есть база данных с полем "полное имя", которое может содержать следующее содержимое:
SMITH, J SMITH, JOHN SMITH, JOHN M SMITH, JOHN MATHEW SMITH, JOHN MATHEW MAJ SMITH, J M MAJ SMITH,J SMITH,JOHN JOHN M SMITH JOHN MATHEW SMITH JOHN MATHEW SMITH MAJ SMITH J
В другой базе данных есть поле полного имени, которое будет содержать один из двух следующих форматов (но только один из них)
SMITH,JOHN SMITH,JOHN M SMITH,JOHN MATHEW
Мне удалось "нормализовать" различные форматы в первой базе данных так, чтобы по крайней мере каждая вещь выглядела так:
SMITH,J SMITH,JOHN SMITH,JOHN M SMITH,J M
и все во 2-й базе данных к этому (опять же, это будет одно или другое в зависимости от того, есть ли у человека отчество, указанное в этой таблице):
SMITH,JOHN M SMITH,JOHN
Когда я соединяю таблицы по полям полных имен, я получаю высокую степень совпадений, но в то же время есть умеренно значительное количество не совпадений (как вы можете догадаться).
Моя новая проблема заключается в следующем - как лучше всего попытаться автоматически определить, как массировать все (или как можно больше) имен в первой таблице до версии, используемой во 2-й таблице.
Как я понял, единственные имена, которые могут быть массированы, - это те, которые ближе всего к имени во 2-й таблице, но как бы я сделал это в SQL?
Это сопоставление было бы намного проще, если бы они (источник импортированных данных) включали доступное числовое поле personID (которое существует во 2-й таблице) в данные, но они этого не делают, и мы еще не выяснили, могут ли они это сделать. Если они смогут и сделают это, вся эта работа будет напрасной.
Это потребовало значительного количества SQL для нормализации имен, насколько я дошел до этого момента, что включало в себя многочисленные использования
REPLACE
, TRIM
, LEFT
, RIGHT
, и REVERSE
, с умеренным посыпанием CASE WHEN
для ровного счета.Что я уже пробовал:
Я еще ничего не пробовал, потому что даже не знаю, возможно ли сделать то, что мне нужно, потому что это больше похоже на проблему нечеткой логики, чем на что-либо другое. Мне претит сама мысль о том, чтобы строить догадки на основе какого-то произвольного набора правил, который может оказаться бесполезным при каждом новом импорте данных.
RedDk
Думая вне коробки, я бы предположил, что есть какая-то более серьезная причина для разработки метода ввода, который требует стадии проверки, такой как использование формы, в которой этот "пользователь" будет вынужден делать лучшие утверждения относительно того, какой может быть его личность.
Но поскольку "шкатулка" - это вещь, используйте самый логичный метод и забудьте о размытости, о которой Вы упомянули.
#realJSOP
На стороне ввода данных на самом деле есть выпадающий список, из которого они могут выбрать имя, но у них также есть возможность жирно перебирать его, что, по-видимому, является наиболее предпочтительным вариантом. Этот аспект стороны ввода данных "не изменится" в соответствии с людьми, которые разработали приложение.
Я в аду...