C'è di strada comuni, gli indirizzi di progettazione di database per tutti gli indirizzi del mondo?

StackOverflow https://stackoverflow.com/questions/929684

Domanda

Io sono un programmatore e ad essere onesti non so indirizzo strutture del mondo, proprio come nel mio paese è strutturato :) quindi, quale è il migliore e il comune di progettazione di database per la memorizzazione di indirizzi?Dovrebbe essere così semplice da usare, veloce per eseguire query e dinamico per memorizzare tutti gli indirizzi del mondo, che si identifica semplicemente con un id
Grazie mille

È stato utile?

Soluzione

E 'possibile rappresentare indirizzi da un sacco di paesi diversi in un insieme standard di campi. L'idea di base di un percorso di nome di accesso (via), che gli edifici denominati o numerati sono situate è abbastanza standard, tranne che in Cina a volte. Altri concetti universali vicino includono: denominazione l'insediamento (città / paese / villaggio), che può essere indicato genericamente come una località; denominazione regione e assegnando un NPA alfanumerico. Notare che codici postali, noti anche come codici postali, sono puramente numerico solo in alcuni paesi. Avrete bisogno di un sacco di campi, se si vuole veramente essere generico.

L'UPU Unione Postale Universale fornisce i dati di indirizzo per un sacco di paesi in un formato standard. Si noti che il formato UPU contiene tutti gli indirizzi (verso il basso per la precisione campo disponibile) per un intero paese, è quindi relazionale. Se memorizzare indirizzi di clienti, in cui verrà memorizzato solo una piccola frazione di tutti i possibili indirizzi, è meglio usare una singola tabella (o formato flat) contenente tutti i campi e un indirizzo per riga.

Un formato ragionevole per memorizzare indirizzi sarebbe come segue:

  • linee di indirizzo 1-4
  • Località
  • Regione
  • CAP (o codice postale)
  • Paese

linee di indirizzo 1-4 può contenere componenti quali:

  • Edificio
  • Sotto-Costruzione
  • Premessa numero (numero civico)
  • Premessa Gamma
  • transitabile
  • Sotto-transitabile
  • Fare doppio Dependent Località
  • Località secondaria

spesso solo 3 linee di indirizzo sono usati, ma questo è spesso insufficiente. Naturalmente è possibile richiedere più linee per rappresentare tutti gli indirizzi nel formato ufficiale, ma le virgole può sempre essere usato come separatori di linea, vale a dire le informazioni possono comunque essere catturato.

Di solito l'analisi dei dati sarà effettuata per località, regione, codice postale e paese e questi elementi sono abbastanza facile per gli utenti a capire quando l'immissione di dati. Questo è il motivo per cui questi elementi devono essere conservati come campi separati. Tuttavia, non forzare gli utenti a fornire codice postale o regione, non possono essere utilizzati a livello locale.

Località può essere poco chiaro, in particolare la distinzione tra mappa località e postali-località. La frazione postale è quello ritenuto da un'autorità postale che può essere a volte un vicino grande città. Tuttavia, il codice postale di solito risolvere eventuali problemi o discrepanze lì, per consentire la consegna corretta anche se il post-località ufficiale non viene utilizzato.

Altri suggerimenti

Dai un'occhiata alla . In particolare, questo riguarda molti casi:

(Tutti i caratteri a lunghezza variabile tipo di dati)

AddressId
Line1
Line2
Line3
City
ZipOrPostcode
StateProvinceCounty
CountryId
OtherAddressDetails

entrare descrizione dell'immagine qui

Chiedetevi che cosa è il principale obiettivo di memorizzare questi dati? Avete intenzione di inviare effettivamente la posta alla persona presso l'indirizzo? Traccia la demografia, le popolazioni? Essere in grado di chiedere ai chiamanti per il loro indirizzo corretto come parte di una certa base di autenticazione / verifica? Tutti i precedenti? Nessuno dei precedenti?

A seconda del vostro bisogno reale, si determinerà sia a) che non ha molta importanza, e si può andare per un approccio di testo libero, oppure b) strutturati / campi specifici per tutti i paesi, o specifica architettura c) paese .

A volte il più vicino si può arrivare a un indirizzo è la città.

Una volta ho avuto un progetto per mettere tutte le scuole secondarie in India in Google Maps. Ho scritto un programma spiffy utilizzando l'API di Google e ho pensato che sarebbe stato abbastanza facile.

Poi ho ricevuto i dati dal client. Alcuni indirizzi della scuola erano cose come "Di fronte al mercato, vicino al barbiere" o "Vicino alla fermata dell'autobus vecchio".

Ha reso il mio compito molto più difficile dal momento che, purtroppo, l'API di Google non supporta quel formato.

Per gli indirizzi internazionali, è notevolmente difficile trovare un modo per formattare le informazioni se esso è suddiviso in campi. Come per esempio, un indirizzo italiano utilizza:

<street address>
<zip> <town> <region>
<country>

come

Via Eroi della Repubblica
89861 Tropea VV
Italy

Questo è piuttosto diverso dalla decisione di rivolge a noi -. Sulla seconda riga

Si vedano anche le domande in modo:

Verificate anche tag ' postale codice '.


Modifica : ordine di regione e città Reverse - per UPU

Forse questo è utile: https://gist.github.com/259744 Per un progetto ho raccolto una tabella di informazioni su tutti i paesi del mondo, tra cui codici ISO, dominio di primo livello, telefono cellulare il codice, segno dell'automobile, la lunghezza e regex zip. nomi dei paesi e commenti purtroppo solo in tedesco ...

Dipende da come forma libera si è pronti ad andare con i campi. Un campo per l'indirizzo a forma libera, ovviamente sempre fare, ma essere di aiuto relativamente poco restringendo la geografia.

Il problema che avrete è che c'è troppa variazione del livello della gerarchia geografica tra i vari paesi. Heck, alcuni paesi non hanno nemmeno 'indirizzi' ovunque.

Vi consiglio di non cercare di renderlo troppo intelligente.

A differenza di altre risposte qui, credo sia possibile avere un database di indirizzi strutturato.

Appena fuori dal cappello, mi viene in mente la seguente struttura:

  • Paese
  • Regione (Stato / Provincia)
  • Località (Città / Comune)
  • Località secondaria (Contea / altra suddivisione di una località)
  • Via

Ma come eseguire una query è abbastanza veloce?

Un modo penso sempre che può essere realizzato è quello di chiedere il codice postale (o Codice Postale) che varia da paese a paese, ma è solido all'interno del paese.

In questo modo è possibile strutturare i dati in giro per le informazioni fornite dagli uffici postali in tutto il mondo.

Len Silverston di Universale Modello Di Dati fame raccomanda un'altra gerarchia di GEOGRAPHIC BOUNDARIES e a seconda della quantità di free-formato-ness sei disposto ad accettare semplice STREET ADDRESS LINEs o per paese derivati.

No, assolutamente no. Se si confronta il modo in cui Stati Uniti e indirizzi giapponesi lavoro, vedrai che non è possibile.

UPDATE:

Il secondo pensiero, tutto può essere fatto, ma c'è un trade-off.

Un approccio è quello di modellare il problema con indirizzo e address_attribute tavoli, con un 1: m rapporto tra di loro, tutto può essere modellato. La tabella address_attribute avrebbe un pk, un nome, un valore e un fk che punta alla pk il suo indirizzo con i genitori. E 'quasi come usare una mappa con nome, coppie di valori.

Il trade-off si trova a dover fare una JOIN ogni volta che si desidera un indirizzo. Hai anche di interrogare i nomi dei address_attributes per capire cosa si sta trattando di volta in volta.

Un altro approccio sarebbe quello di fare una ricerca più completa su come indirizzi sono modellate in tutto il mondo. In un mondo orientato agli oggetti si potrebbe avere la classe occidentale Indirizzo (street1 / street2 / città / stato / zip) e gli altri per il Giappone, la Cina, come molti come necessario per affiancare lo spazio di indirizzamento. Poi devi avere un tavolo e bambino maestro Indirizzo tavoli agli altri tipi con un 1:. Rapporto 1 tra di loro

Come fa Amazon o eBay fanno? Essi nave a livello internazionale. Hanno funzionalità dell'interfaccia utente specifiche della locale? Ho usato solo la versione locale degli Stati Uniti.

No, non ci sono schema di indirizzamento standard. E di solito varia da paese a paese. Anche il Unione Postale Universale ha detto il Indirizzamento del mondo , un indirizzo per tutti che non c'è nessuno. La soluzione migliore per questo è di utilizzare le norme del codice paese 2/3 lettere conosciute come ISO 3166 e trattare tutto il resto per gli standard del paese.

Tuttavia, se sei veramente disperato di utilizzare strumenti facilmente accessibili per il progetto, si può provare Google Luogo API .

Il vostro disegno dovrebbe fortemente dipenderà dal vostro scopo. Alcune persone hanno inviato come strutturare i dati. Quindi, se volete semplicemente inviare s-mail a qualcuno, lo farà. Le cose cominciano a complicarsi se si desidera utilizzare questi dati per la navigazione. Di navigazione per auto richiederà strutture supplementari per contenere informazioni sul traffico (ad esempio strade a senso unico), mentre la navigazione a piedi richiederà un sacco di dati aggiuntivi. Ecco piccolo esempio: nella mia città, il mio quartiere è vicino al parco. Accanto al parco è l'ex campo di volo (di fatto, una delle più antiche d'Europa) trasformata in museo dell'aviazione. Accanto al museo dell'aviazione è un parco commerciale. Numero civico per museo è 39, mentre i numeri parco affari iniziano con 39A. Così può sembrare che 39 e 39A sono vicini - ma ci vuole circa un miglio a piedi da uno all'altro (e anche di più se andare in auto)
. Questo è solo un piccolo esempio tratto dalla mia città, penso che probabilmente si può trovare un sacco di eccezioni (in particolare nelle zone rurali o più selvagge di ogni paese).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top