¿Cuál es la mejor manera de administrar ubicaciones en una base de datos?

La entrada manual es difícil porque generalmente requiere una verificación en algún punto del software. Si 5 personas deletrean “Reykjavík” (Islandia) 5 formas diferentes (ya sea debido a un acento de Unicode o faltas de ortografía), puede insertar esto en la base de datos 5 veces diferentes … pero cuando se trata de eso, solo hay una correcta ortografía para el nombre.

Desde la perspectiva de la base de datos:
Para solucionar esto, puede tener una tabla gigante de ubicaciones, es decir, nombres de ciudades, en donde una entrada manual se compara con una fila en una tabla previamente rellenada; o, puede confiar en el usuario, insertar una nueva fila (si no se encuentra) y tratarla más tarde. Los sitios como Linked y Facebook tienen un conjunto “limitado” (todavía enorme) de ubicaciones, y cualquier entrada realmente “manual” de ubicación tendría que ser verificada por un empleado real o mediante métodos programáticos.

Si estuviera diseñando esta función, definitivamente tomaría el enfoque número 1. Le permite refactorizar y “limpiar” su base de datos, independientemente del método elegido. También permite la escalabilidad, en el sentido de que puede agregar continuamente más columnas para cada fila a medida que avanza su aplicación. En última instancia, le permite terminar con una buena fuente de ubicaciones con una fuente extensible de atributos de datos.

Definitivamente incluiría latitud y longitud si está rellenando previamente una tabla. Si estás haciendo una entrada manual … bueno, hay algunos enfoques. Una básica es que necesitará una tabla de “ciudad no verificada”, y después de cierta validación, puede mover esa ubicación ingresada manualmente a la tabla de “ciudad” verificada, donde luego puede completar los atributos de datos correctos de la ciudad verificada.

Desde una perspectiva de la interfaz de usuario:
Dependiendo del alcance de mercado de su aplicación, elegiría ciertas ciudades clave, rellenaría previamente una tabla, permitiría a un usuario seleccionar su país, y luego, en función de este país, les proporcionará una lista de ciudades relevantes.

Por ejemplo: Vivo en … Italia.
Bien, dado que vivo en Italia, puedo seleccionar entre:
Milán, Florencia, Siena, Roma, Venecia, Sorrento, etc.

Esta es una buena cantidad de trabajo, pero, de nuevo, el problema que presenta requiere un esfuerzo considerable para hacerlo bien.

Las ubicaciones siempre son un poco complicadas, por lo que, como mínimo, intente dejar una arquitectura que le permita cierta flexibilidad en el futuro (es decir, parece que la solución número 1).

Espero que esto ayude.

Me gustaría ir con su primer enfoque. En cuanto a la segunda parte de tu pregunta. No sé sobre Facebook, pero LinkedIn mantiene un conjunto limitado de ubicaciones y no permite ninguna entrada manual. Si su ciudad no está disponible, debe elegir un país como ubicación. Todos los países están listados.

Si también necesita largos plazos para estas ciudades, hay muchos DBs descargables, así como servicios web de ubicación que pueden proporcionar esta información. Aquí hay una discusión que enumera algunos de ellos:
¿Existe una lista completa de valores de latitud y longitud para ciudades de todo el mundo?

El primer enfoque es mucho mejor que el segundo. Solo tiene una lista de algunas ubicaciones, si la ubicación del candidato no aparece en la lista, él / ella tendrá que escribirla manualmente o usted puede elegir cualquier otra ubicación como su ciudad actual, puede ser cualquier ciudad en la que se encuentre o nombre del país como ya se sugirió.

Cuando hablamos de los datos de otra organización, como sé, su base de datos es geográfica, gráfica y espacial.