2009-02-05 6 views
5

Je suis nouveau dans les bases de données SQL et relationnelles et j'ai ce que j'imagine être un problème commun.Code postal à Ville/État et vice-versa dans une base de données?

Je crée un site Web et lorsque chaque utilisateur soumet un message, il doit fournir un emplacement dans un code postal ou une ville/un état.

Quelle est la meilleure pratique pour gérer cela? Est-ce que je crée simplement une table de code postal et de ville et d'état et interroge contre eux ou y a-t-il des solutions faites prêtes pour manipuler ceci? J'utilise SQL Server 2005 si cela fait une différence.

Je dois être en mesure de récupérer un code postal donné une ville/état ou je dois être en mesure de cracher l'état de la ville donné un code postal.

Répondre

9

Vous avez deux options. Vous pouvez acheter un bulk zip-code library de quelqu'un qui va lister les codes postaux, les villes, les comtés, etc. par état, ou vous pouvez payer quelqu'un à access a web service qui effectuera la même fonction sur un niveau plus granulaire. Le mieux serait de choisir l'option de bibliothèque de codes postaux, car elle vous coûtera moins cher que le service Web et offrira de meilleures performances. Comment vous interroger ou pré-traiter cette bibliothèque est à vous. Vous mentionnez SQL Server, donc vous voudrez probablement des tables State, Zipcode et City, et incluez les relations pertinentes entre elles. Vous aurez également besoin d'avoir des dispositions pour les villes qui couvrent plusieurs codes postaux, ou pour les codes postaux qui ont plusieurs villes - mais aucun de ces problèmes sont insurmontables.

En ce qui concerne les vagarités de l'entrée de l'utilisateur, vous pouvez demander l'aide d'un address validation web service, bien que la plupart d'entre eux exigent une adresse de livraison complète afin de valider. Editer: ressemble à un SourceForge project offering free zip-code data, y compris les données lat/lon, etc. Vous ne savez pas à quel point il est correct ou actuel.

Édition 2: Après quelques recherches superficielles sur le site du projet SourceForge, il semble que ce soit un projet mort. Si vous utilisez ces données, vous devrez fournir une certaine tolérance pour les codes postaux/villes qui n'existent pas dans votre base de données. Les bibliothèques en vrac achetées ont généralement une sorte de garantie de mises à jour, ou un plan de tarification pour les mises à jour, etc., et sont probablement plus fiables.

+0

Il ne fonctionne pas de cette façon, malheureusement. – alphadogg

+0

Esprit élaborant? –

+0

Je n'ai pas voté contre, mais vois ma propre réponse à cette question. À moins que le PO implique l'utilisateur, il peut y avoir des problèmes de localisation de la ville de zip ou vice versa. Sinon, vous avez essentiellement dit ce que j'ai dit ... – alphadogg

0

Je crois savoir que le USPS web API est libre d'utilisation, mais nécessite une autorisation qui dépend d'un certain nombre de facteurs, notamment la nature du programme qui l'utilisera et la raison pour laquelle vous avez besoin des données.

Si vous êtes qualifié pour l'utiliser, ce serait sans doute la source la plus précise pour les informations dont vous avez besoin.

+0

Lorsque vous vous inscrivez à l'API USPS, assurez-vous de bien réfléchir à la façon dont vous répondez aux questions de l'application. Ils posent des questions suggestives qui, en cas de réponse incorrecte, verront votre demande d'utilisation refusée. En outre, ils ont eu de graves problèmes de temps d'arrêt pendant les vacances cette année. – DavGarcia

3

Avoir une table ZipCode associée à une table CityState. Certains codes postaux étant associés à plusieurs villes, vous devrez peut-être faire en sorte que l'interface sélectionne l'utilisateur dans la ville de votre choix ou les laisser remplacer la valeur par défaut.

J'utilise le service payant de ZipInfo.com car j'avais besoin d'informations supplémentaires telles que lat/long, type zip et comté. Les codes postaux changent également plusieurs fois au cours de l'année, lorsque de nouveaux codes postaux sont ajoutés ou fusionnés avec d'autres, vous devrez donc mettre à jour vos données plusieurs fois par an pour rester cohérent.

1

En fonction des détails de ce que vous construisez, Yelp a un neighborhoods API gratuit qui pourrait être en mesure de vous fournir ce dont vous avez besoin. Assurez-vous de vérifier leurs conditions d'utilisation et d'autres choses pour vous assurer de rester en conformité.

Je sais que ce n'est pas une réponse db centrique, mais ce que vous faites n'est peut-être pas mieux géré dans la base de données elle-même.

0

Je ne suis pas certain de comprendre la question. Avez-vous besoin d'autoriser l'un ou l'autre et, plus tard, de renvoyer les deux? Vous devrez faire attention, même avec une base de données zip/city qui peut être achetée, car certaines villes couvrent plusieurs zips, donc vous ne pouvez pas toujours "calculer" dans cette direction. Problème similaire dans la direction opposée.

+0

Un utilisateur peut fournir l'un ou l'autre et j'ai besoin des deux. – mmcdole

+0

Eh bien, dans de nombreux cas, vous ne serez pas en mesure de calculer l'information manquante appropriée, sauf peut-être que vous impliquez la rue. – alphadogg

+0

Par exemple, New York a six codes postaux. Si vous en prenez un, disons 10027, ce code postal se trouve dans deux villes: "New York City" et "Manhattan". Sans oublier que votre utilisateur pourrait fournir "New York City" comme "NYC", "NY City", "New York", etc ... – alphadogg

0

Il existe des bibliothèques que vous pouvez acheter et importer qui ne sont pas si chères. Votre problème avec eux, c'est que vous aurez un coût de maintenance continu (pas beaucoup). Les codes postaux changent tout le temps, ce qui signifie que dans 6 mois, vos données seront légèrement périmées. Vous voudrez peut-être vous intéresser à un service comme google maps. Ici, nous utilisons une approche hybride. Nous dépensons le montant de l'argent pour les mises à jour des données tous les 6 mois, et si le code postal ne figure pas dans le tableau, nous vérifions avec google maps que les informations saisies sont toujours valides et qu'elles n'ont pas été saisies dans notre système. Si c'est valide, nous mettons à jour le système, sinon nous informons l'utilisateur qu'une erreur a été commise.

Une autre option serait de faire un ping sur le site Web d'USPS. Je crois qu'ils ont une ville/état rechercher la page par code postal.

-1

J'ai eu ce rythme. Voici un gratuit (compressé, csv):

Hosted At maphacks.com

en-têtes sont zip, ville, état, latitude, longitude, fuseau horaire, dst

Maintenant, votre perte potentielle est que vous n'êtes pas payer pour les mises à jour (qui peuvent vous mordre à la fin, mais ils essayent de le garder quelque peu à jour)

+0

Attention, c'est gratuit. Parfois, ils disparaissent. Ou, les mises à jour ne sont pas propres. Je comptais sur un gratuit une fois ... une fois. Si votre base de données est importante, ne jouez pas avec ces données. GIGO. – alphadogg

1

Il existe de nombreux services web de géocodage gratuit où vous pouvez obtenir un zip d'une ville-état, et vice-versa. Jetez un coup d'œil au service Web GeoNames. Vous pouvez faire quelque chose comme vérifier votre base de données, et si ce que vous cherchez n'est pas là, prenez-le dans le webservice et ajoutez-le.

1

Si la raison de la recherche est la commodité de l'utilisateur, voici une autre approche qui ne nécessite pas de licence des bases de données tierces:

Juste rechercher la ville/état de votre table nom/adresse existante, sous réserve le code postal correspond. Si quelqu'un a précédemment fait une entrée pour ce code postal, alors vous trouverez la ville et l'état de cette entrée. Si aucune entrée précédente n'existe, alors le pire des cas, l'utilisateur doit entrer dans la ville et l'état.

Cette solution suppose que vous ayez besoin de commodité pour l'utilisateur. Si vous êtes plus préoccupé par la validation précise de la ville, de l'état, des codes postaux, il est préférable de concéder une licence pour une base de données vérifiée.

+0

+1 Pensée intressante! – Ramesh

-1

Je voudrais ajouter ce site.

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

Vous pouvez télécharger les données gratuitement si vous utilisez pour personnel/éducation (au 20/03/2014).

+0

Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et de fournir le lien pour référence. Les réponses à lien uniquement peuvent devenir invalides si la page liée change. –

+0

@SimonAdcock Comment voulez-vous inclure ces informations? ;) – Christoph

+0

@Christoph Ha, juste commentaire. Malheureusement, mon commentaire a été automatiquement ajouté lorsque je l'ai signalé comme une réponse à un lien seulement. Comme je suis sûr que vous le savez déjà, les réponses par lien seulement sont déconseillées, car si le lien est brisé, la réponse devient inutile pour les futurs visiteurs. –

0

Pour Tables Etats-Unis, vous pouvez utiliser la requête suivante, en supposant que vous avez StateId et StateName dans la table States et vous avez StateId incrémentation automatique.

Cette requête a 50 États américains ...

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'); 
Questions connexes