sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo resolver el dilema de almacenar nombres humanos en MySQL y mantener tanto la discriminabilidad como la búsqueda de nombres similares?

Lo que es útil es si puede descomponer el nombre completo en componentes de "palabras de nombre" y almacenar una codificación fonética (metáfono o una de las muchas otras opciones) para cada uno de ellos. Sin embargo, solo necesita la noción de las palabras del nombre, sin categorizarlas específicamente como primero, medio o último, lo cual está bien porque esas categorías no funcionan bien en todas las culturas de todos modos). Pero puede usar la información de orden posicional más adelante en la clasificación si lo desea, de modo que la búsqueda de "Paul Carl" coincida con "Paul Karl" mejor que la búsqueda de "Carl Paul". Debe tener en cuenta la puntuación ambigua que puede requerir el almacenamiento de varias versiones de algunas palabras de nombre. Por ejemplo, Bre-Anna Heim se dividiría en las palabras de nombre "bre", "anna", "breanna" y "heim". A veces, el guión es irrelevante como Bre-Anna, pero a veces no como en Sally-June". Bre-Anna nunca usa solo Bre o Anna, pero Sally-June puede usar Sally o solo June a veces. Es difícil saber cuál, así que cubre ambas posibilidades.

Puede escribir su consulta contra esto descomponiendo y codificando fonéticamente de manera similar el nombre completo que está buscando. Su consulta puede devolver, por ejemplo, aquellos nombres completos que tienen dos o más coincidencias fonéticas de nombres de componentes (o una si solo hay un nombre en la búsqueda o en la fuente). Esto le da un subconjunto de nombres completos para considerar más a fondo. Podría crear una clasificación simple de ellos, o incluso hacer algo como un algoritmo de coincidencia de distancia en este subconjunto, lo que sería demasiado costoso computacionalmente para hacer contra el millón de nombres completos. Cuando digo coincidencia de distancia, me refiero a algoritmos en línea como la distancia de Levenshtein y similares.

(editar) El razonamiento para esto es manejar casos como el siguiente nombre:María de los Ángeles Gómez-Rodríguez. Una persona de entrada de datos puede simplemente ingresar a María Gómez. Otra podría entrar María Gómez Rodríguez. Otra más podría entrar María Ángeles Rodrigus.