2009-02-05 74 views
5

Soy nuevo en SQL y bases de datos relacionales y tengo lo que me imagino que es un problema común.Código postal a Ciudad/Estado y viceversa en una base de datos?

Estoy creando un sitio web y cuando cada usuario envía una publicación, debe proporcionar una ubicación en un código postal o una ciudad/estado.

¿Cuál es la mejor práctica para manejar esto? ¿Simplemente creo un código postal y una tabla de ciudad y estado y consulto contra ellos o hay soluciones listas para manejar esto?

Estoy usando SQL Server 2005 si hace la diferencia.

Necesito poder recuperar un código postal dado una ciudad/estado o necesito poder escupir el estado de la ciudad dado un código postal.

Respuesta

9

Tienes un par de opciones. Puede comprar un bulk zip-code library de alguien que enumerará códigos postales, ciudades, condados, etc. por estado, o puede pagarle a alguien al access a web service que realizará la misma función en un nivel más granular.

Su mejor opción sería ir con la opción de biblioteca de código postal, ya que le costará menos que el servicio web y proporcionará un mejor rendimiento. La forma de consultar o preprocesar esta biblioteca depende de usted. Menciona SQL Server, por lo que probablemente desee tablas de Estado, Código postal y Ciudad, e incluya las relaciones relevantes entre ellos. También necesitará tener disposiciones para las ciudades que abarcan múltiples códigos postales, o para los códigos postales que tienen varias ciudades, pero ninguno de estos problemas es insuperable.

En cuanto a tratar con las variaciones de la entrada del usuario, puede considerar solicitar la ayuda de un address validation web service, aunque la mayoría de ellos requieren una dirección de envío completa para validar.

Editar: parece que hay un SourceForge project offering free zip-code data, incluidos los datos lat/lon, etc. No estoy seguro de qué tan correcto o actual es.

Editar 2: Después de un vistazo superficial en el sitio del proyecto de SourceForge parece que este es un proyecto muerto. Si usa esta información, deberá proporcionar alguna asignación para códigos postales/ciudades que no existen en su base de datos. Las bibliotecas a granel compradas generalmente vienen con algún tipo de garantía de actualizaciones, o un plan de precios para actualizaciones, etc., y son probablemente más confiables.

+0

No va a trabajar de esta manera, por desgracia. – alphadogg

+0

¿Elaboración de la mente? –

+0

No voté a favor, pero veo mi propia respuesta a esta pregunta. A menos que el PO involucre al usuario, puede haber problemas para calcular la ciudad desde el código postal o viceversa. De lo contrario, básicamente dijiste lo que dije ... – alphadogg

0

Según entiendo, el USPS web API es de uso gratuito, pero requiere un permiso que depende de una serie de factores, incluida la naturaleza del programa que lo utilizará y la razón por la que necesita los datos.

Si calificas para usarlo, esta sería supuestamente la fuente más precisa para la información que necesitas.

+0

Al registrarse con la API de USPS, asegúrese de considerar cuidadosamente cómo responde las preguntas de la aplicación. Hacen preguntas principales que, si se responden incorrectamente, serán denegadas. También tuvieron serios problemas de tiempo de inactividad durante las vacaciones del año pasado. – DavGarcia

3

Tiene una tabla ZipCode que está relacionada con una tabla CityState. Algunos códigos postales tienen varias ciudades asociadas a ellos, por lo que es posible que necesite que la interfaz permita al usuario seleccionar de la ciudad que desea o dejar que anule el valor predeterminado.

Utilizo el servicio de pago desde ZipInfo.com ya que necesitaba información adicional, como latitud/longitud, tipo de zip y condado. Los códigos postales también cambian varias veces al año a medida que se agregan o se fusionan códigos postales nuevos, por lo que deberá actualizar sus datos varias veces al año para mantenerse constante.

1

Dependiendo de los detalles de lo que está construyendo, Yelp tiene un neighborhoods API gratuito que puede ofrecerle lo que necesita. Asegúrese de consultar sus Condiciones de uso y demás para asegurarse de que se mantenga en conformidad.

Sé que esto no es una respuesta centrada en bases de datos, pero lo que está haciendo puede que no se maneje mejor en la base de datos.

0

No estoy seguro de que entiendo la pregunta. ¿Necesita permitir cualquiera y, más tarde, devolver ambos?

Tendrás que tener cuidado, incluso con una base de datos zip/city que se puede comprar, ya que algunas ciudades abarcan varias cremalleras, por lo que no siempre se puede "calcular" en esa dirección. Problema similar en la dirección opuesta.

+0

Un usuario puede proporcionar cualquiera, y necesito ambos. – mmcdole

+0

Bueno, entonces, en muchos casos, no podrá calcular la información que falta, a menos que involucre la calle. – alphadogg

+0

Por ejemplo, la ciudad de Nueva York tiene seis códigos postales. Si toma uno de ellos, digamos 10027, ese código postal se encuentra en dos ciudades: "Nueva York" y "Manhattan". Sin mencionar que su usuario podría suministrar "Nueva York" como "NYC", "NY City", "Nueva York", etc ... – alphadogg

0

Hay bibliotecas que puede comprar e importar que no son tan caras. Su problema con ellos será que tendrá un costo de mantenimiento continuo (no mucho). Los códigos postales cambian todo el tiempo, lo que significa que en 6 meses más o menos, sus datos estarán un poco desactualizados. Es posible que desee ver la interfaz con un servicio como google maps. Aquí usamos un enfoque híbrido. Gastamos la cantidad de dinero por las actualizaciones de los datos cada 6 meses, y si el código postal no está en la tabla lo verificamos contra los mapas de Google para asegurarnos de que la información ingresada todavía sea válida y simplemente no se haya ingresado. en nuestro sistema Si es válido, actualizamos el sistema; si no, le informamos al usuario que se cometió un error.

Otra opción sería hacer ping al sitio web de USPS. Creo que tienen una página de búsqueda de ciudad/estado por código postal.

-1

Tengo ese ritmo. Aquí está una libre (en zip, csv):

Hosted At maphacks.com

encabezados son postal, ciudad, estado, latitud, longitud, zona horaria, DST

Ahora, su pérdida potencial es que usted no está pagar por las actualizaciones (que pueden morderlo al final, pero intentan mantenerlo algo actualizado)

+0

Tenga cuidado. A veces, desaparecen. O bien, las actualizaciones no están limpias. Confié en una gratis una vez ... una vez. Si su base de datos es importante, no juegue con esa información. GIGO. – alphadogg

1

Hay muchos servicios web de codificación geográfica donde puede obtener un código postal de una ciudad-estado, y viceversa. Eche un vistazo al servicio web GeoNames. Podría hacer algo como verificar su base de datos, y luego, si lo que está buscando no está allí, tomarlo del servicio web y agregarlo.

1

Si el motivo de la búsqueda es la conveniencia del usuario, aquí es un enfoque alternativo que no requiere licencias de las bases de datos de terceros:

Sólo buscar la ciudad/estado de su tabla Nombre/dirección existente, siempre el código postal coincide. Si alguien ha realizado previamente una entrada para ese código postal, entonces encontrará la ciudad y el estado de esa entrada. SI no existe una entrada previa, entonces el peor de los casos tiene que ingresar en la ciudad y el estado.

Esta solución asume que su necesidad es para la conveniencia del usuario. Si está más preocupado por la validación exacta de la ciudad, el estado y los códigos postales, entonces es mejor licenciar una base de datos verificada.

+0

+1 ¡Pensamiento interesante! – Ramesh

-1

me gustaría añadir este sitio web.

http://www.unitedstateszipcodes.org/zip-code-database/

Puede descargar los datos de forma gratuita si se utiliza para el personal/Educacional (a partir del 20/03/2014).

+0

Si bien este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. –

+0

@SimonAdcock ¿Cómo desea incluir esa información? ;) – Christoph

+0

@Christoph Ha, buen comentario. Lamentablemente, mi comentario se agregó automáticamente cuando señalé esto como una respuesta de solo enlace. Como estoy seguro de que ya sabe, las respuestas de solo enlace se desalientan como si el enlace se rompe, la respuesta se vuelve inútil para los futuros visitantes. –

0

Para los cuadros de los Estados Unidos, puede utilizar siguiente consulta, suponiendo que tiene StateId y StateName en la tabla States y tiene StateId incremento automático.

Esta consulta tiene 50 estados de Estados ...

INSERT INTO States 
     (StateName) 
     VALUES 
('Alabama'), 
('Alaska'), 
('Arizona'), 
('Arkansas'), 
('California'), 
('Colorado'), 
('Connecticut'), 
('Delaware'), 
('District of Columbia'), 
('Florida'), 
('Georgia'), 
('Hawaii'), 
('Idaho'), 
('Illinois'), 
('Indiana'), 
('Iowa'), 
('Kansas'), 
('Kentucky'), 
('Louisiana'), 
('Maine'), 
('Maryland'), 
('Massachusetts'), 
('Michigan'), 
('Minnesota'), 
('Mississippi'), 
('Missouri'), 
('Montana'), 
('Nebraska'), 
('Nevada'), 
('New Hampshire'), 
('New Jersey'), 
('New Mexico'), 
('New York'), 
('North Carolina'), 
('North Dakota'), 
('Ohio'), 
('Oklahoma'), 
('Oregon'), 
('Pennsylvania'), 
('Puerto Rico'), 
('Rhode Island'), 
('South Carolina'), 
('South Dakota'), 
('Tennessee'), 
('Texas'), 
('Utah'), 
('Vermont'), 
('Virginia'), 
('Washington'), 
('West Virginia'), 
('Wisconsin'), 
('Wyoming'); 
Cuestiones relacionadas