7

Actualmente tengo 3 tablas que almacenan información sobre las principales ciudades del mundo, cada región/estado que corresponde a esos países y cada ciudad que se encuentra en esos estados/regiones.Pregunta de normalización sobre dirección, ciudad, datos del país

City, States and Countries

Ahora tienen unos 6 otras tablas en mi base de datos, por ejemplo, las tablas de Usuarios u Organizaciones que necesitan exactamente las mismas 5 columnas: dirección, suburbio, ciudad, estado/región, país. Entonces me preguntaba si era una 'buena' práctica de normalización tal vez usar una tabla de 'Ubicación' que almacene esas 5 piezas de información, luego la tabla de Usuarios u Organizaciones tendría un location_id al que hacer referencia de nuevo.

Cities, States and Countries with Location table

buena idea o mala idea? También estoy considerando usar una tabla de "Contactos" en el mismo principio que contendría home_phone, business_phone, mobile_phone, email_address en lugar de tener esas mismas 5 columnas en cada una de las 6 tablas.

Cualquier consejo apreciado. ¡Muchas gracias!

Respuesta

8

Es un conjunto innecesario de relaciones: en su lugar, puede obtener las regiones/países de la ciudad.

Tenga en cuenta que tengo regiones y países al revés en la imagen siguiente, ¡pero ilustra lo que quiero decir!

enter image description here

Naturalmente, sería útil para definir una vista que combina ciudades, países y regiones para escribir realmente sus consultas con. También creo que la normalización a este nivel es una muy buena idea en la práctica. Cuando agregue un nuevo campo a la tabla de ubicaciones, se alegrará de haberlo dividido ;-)

+0

Mi única preocupación hacerlo de esta manera es que el usuario no puede simplemente seleccionar un país y/o región/estado. Algunas "ciudades" <40,000 personas no están en mi base de datos, ya que hay más de 10,000 en todo el mundo y se ralentizarán mucho cuando se hagan consultas. Además, el usuario u organización podría estar en una ciudad, no en una ciudad. Entonces, si no pueden encontrar su ciudad en la lista desplegable, tampoco podrán seleccionar un país o región, ya que no se correlacionará con la tabla de ubicaciones. – zuallauz

+1

Cómo funciona mi aplicación web actualmente es que un usuario selecciona un país en el menú desplegable, usa AJAX para mostrar otro menú desplegable con todas las regiones/estados de ese país, luego ese menú desplegable utiliza AJAX nuevamente para permitirle al usuario elegir las ciudades que están en esa región/estado. Lo que trato de hacer es conseguir que estas organizaciones puedan buscarse por país, estado/región o ciudad, de modo que cuando un usuario acceda al sitio, pueda encontrar estas organizaciones en el área que desea. Si no pueden encontrar la organización en esa ciudad, entonces deben poder buscar por región y encontrarla, incluso si se trata de una ciudad pequeña. – zuallauz

1

Creo que ya se está excediendo. Regiones, ciudades y países como tablas separadas es excelente, ya que tiene la capacidad de administrar fácilmente las entradas sin crear inconsistencias en los datos. Pero el almacenamiento de datos de direcciones para cada usuario/organización en una tabla separada (ubicaciones) es innecesario. Agregue esos campos a las tablas de usuario/organización.

EDIT: RB se ilustra con más detalle :)

+0

Mi problema con poner todos los datos de dirección, suburbio, ciudad, región, país en cada tabla termina pareciendo una telaraña sucia: [como tal] (http://i.imgur.com/tfkbi.png). El problema con el método de RB lo abordaba en su publicación. – zuallauz

Cuestiones relacionadas