Gibt es ein gemeinsames Datenbankdesign für Straßenadressen für alle Adressen der Welt?


122

Ich bin Programmierer und kenne ehrlich gesagt keine Adressstrukturen der Welt, nur wie in meinem Land strukturiert :) Welches ist das beste und gebräuchlichste Datenbankdesign zum Speichern von Straßenadressen? Es sollte so einfach zu bedienen, schnell abzufragen und dynamisch sein, um alle Straßenadressen der Welt zu speichern, die sich nur durch eine ID identifizieren.
Vielen Dank



Sie haben nach Straßenadressen gefragt, aber alle Antworten beziehen sich auf Postanschriften ( was ist der Unterschied? ). Vielleicht sollte der Titel geändert werden?
Wrygiel

Antworten:


123

Es ist möglich, Adressen aus vielen verschiedenen Ländern in einem Standardsatz von Feldern darzustellen. Die Grundidee eines benannten Zugangswegs (Durchgangsstraße), auf dem sich die benannten oder nummerierten Gebäude befinden, ist ziemlich Standard, außer in China manchmal. Andere nahezu universelle Konzepte umfassen: Benennung der Siedlung (Stadt / Gemeinde / Dorf), die allgemein als Ort bezeichnet werden kann; Benennen der Region und Zuweisen einer alphanumerischen Postleitzahl. Beachten Sie, dass Postleitzahlen, auch Postleitzahlen genannt, nur in einigen Ländern rein numerisch sind. Sie benötigen viele Felder, wenn Sie wirklich generisch sein möchten.

Die UPU Universal Postal Union liefert Adressdaten für viele Länder in einem Standardformat . Beachten Sie, dass das UPU-Format alle Adressen (bis zur verfügbaren Feldgenauigkeit) für ein ganzes Land enthält und daher relational ist. Wenn Sie Kundenadressen speichern, in denen nur ein kleiner Teil aller möglichen Adressen gespeichert wird, ist es besser, eine einzelne Tabelle (oder ein flaches Format) zu verwenden, die alle Felder und eine Adresse pro Zeile enthält.

Ein vernünftiges Format zum Speichern von Adressen wäre wie folgt:

  • Adresszeilen 1-4
  • Lokalität
  • Region
  • Postleitzahl (oder Postleitzahl)
  • Land

Die Adresszeilen 1 bis 4 können Komponenten enthalten wie:

  • Gebäude
  • Untergebäude
  • Betriebsnummer (Hausnummer)
  • Prämissenbereich
  • Durchgangsstraße
  • Sub-Thoroughfare
  • Doppelte abhängige Lokalität
  • Unterlokalität

Häufig werden nur 3 Adressleitungen verwendet, dies ist jedoch häufig nicht ausreichend. Es ist natürlich möglich, mehr Zeilen zu verlangen, um alle Adressen im offiziellen Format darzustellen, aber Kommas können immer als Zeilentrennzeichen verwendet werden, sodass die Informationen weiterhin erfasst werden können.

Normalerweise wird die Analyse der Daten nach Ort, Region, Postleitzahl und Land durchgeführt, und diese Elemente sind für Benutzer bei der Dateneingabe ziemlich leicht zu verstehen. Aus diesem Grund sollten diese Elemente als separate Felder gespeichert werden. Erzwingen Sie jedoch nicht, dass Benutzer eine Postleitzahl oder Region angeben, da diese möglicherweise nicht lokal verwendet werden.

Die Lokalität kann unklar sein, insbesondere die Unterscheidung zwischen Kartenlokalität und Postlokalität. Der Postort ist derjenige, der von einer Postbehörde als eine nahe gelegene Großstadt angesehen wird. Die Postleitzahl behebt jedoch in der Regel Probleme oder Unstimmigkeiten, um eine korrekte Zustellung zu ermöglichen, auch wenn die offizielle Poststelle nicht verwendet wird.


1
Können Sie eine URL für die UPU angeben? (Ja, ich weiß, ich könnte es finden - aber die besten Antworten lassen die Leute nicht suchen.)
Jonathan Leffler

Versuchen Sie upu.int/post_code/en/… und wählen Sie das entsprechende Land in der Dropdown-
Liste

URL für UPU Post * Code Produkt hinzugefügt
Edward Ross

17
Einige Länder (z. B. die Republik Irland) verwenden keine Postleitzahlen. Wenn ich einen Cent für die Häufigkeit hatte, mit der ich na (nicht zutreffend) als Postleitzahl eingeben musste, weil es ein erforderlicher Feldmann ist. . . Ich hätte jetzt fünf oder sechs Cent :)
Binary Worrier

Wenn die UPU derzeit herunterladbare Listen hat, haben sie gute Arbeit geleistet, um sie sehr gut versteckt zu halten.
Jahmic

47

Schauen Sie sich Database Answers an . Dies deckt insbesondere viele Fälle ab:

(Alle Zeichendatentypen mit variabler Länge)

AddressId
Line1
Line2
Line3
City
ZipOrPostcode
StateProvinceCounty
CountryId
OtherAddressDetails

Geben Sie hier die Bildbeschreibung ein


Ich habe nicht abgelehnt, aber ich denke, das könnte nur funktionieren, wenn alle Felder außer AddressId und Line1 optional wären. In diesem Fall ist es nicht zu nützlich.

11
Datentypen sind wichtig - nicht jedes Land hat ganzzahlige Postleitzahlen! Ein Mitarbeiter hat dies schnell bei einem Kunden in Kanada herausgefunden.
Eric

1
@Eric: Außer ID-Feldern sind alle diese Felder Zeichendatentypen
Mitch Wheat

2
Für die Länder-ID sollten Sie den 2-Buchstaben- (oder 3-Buchstaben-) Ländercode ISO 3166 verwenden. Mit dem vorgeschlagenen Schema können Sie eine analysierte Adresse speichern. Es sagt Ihnen nicht, wie Sie es formatieren sollen. (Oh, und Großbritannien hat alphanumerische Postleitzahlen - IP31 3GH, SE1W 9PQ usw. Ich denke, die zweite Gruppe ist immer NAA; die erste Gruppe beginnt mit A und enthält mindestens ein N (A = Alpha, N = Ziffer). aber nichts würde mich überraschen.)
Jonathan Leffler

@Neil: Genau. Es gibt so viele Unterschiede nach Land, dass Sie keine einzige Tabelle verwenden können und erwarten, dass die Datenbank sie validiert.
Dave Sherohman

26

Fragen Sie sich, was der Hauptzweck der Speicherung dieser Daten ist. Beabsichtigen Sie tatsächlich, E-Mails an die Person an der Adresse zu senden? Demografie und Bevölkerung verfolgen? Können Sie Anrufer im Rahmen einer grundlegenden Authentifizierung / Verifizierung nach ihrer korrekten Adresse fragen? Alles das oben Genannte? Nichts des oben Genannten?

Abhängig von Ihrem tatsächlichen Bedarf bestimmen Sie entweder a) es spielt keine Rolle, und Sie können sich für einen Freitextansatz entscheiden, oder b) strukturierte / spezifische Felder für alle Länder oder c) länderspezifische Architektur.


Macht Sinn. Ich suche nach einer guten Lösung für dieses Problem, aber es gibt viele verschiedene. Wie Sie sagten: Es ist wahrscheinlich am besten, aus den tatsächlichen Anforderungen zu wählen.
Anzeigename

12

Manchmal ist die Stadt die nächstgelegene Adresse.

Ich hatte einmal ein Projekt, um alle Sekundarschulen in Indien in Google Maps zu platzieren. Ich habe ein schickes Programm mit der Google-API geschrieben und dachte, es wäre ganz einfach.

Dann habe ich die Daten vom Kunden bekommen. Einige Schuladressen waren Dinge wie "Gegenüber dem Markt, neben dem Friseur" oder "In der Nähe der alten Bushaltestelle".

Dies hat meine Aufgabe erheblich erschwert, da die Google-API dieses Format leider nicht unterstützt.


2
Auch dafür sind asiatische Adressen berüchtigt. "73. Block West Ninjang St, Gebäude 2, Nehmen Sie den zweiten oberen Aufzug, Bürokomplex neben dem Food Court, 468. Industriegebiet, Shanghai 456789" ...
Ruhnet

9

Bei internationalen Adressen ist es bemerkenswert schwierig, die Informationen zu formatieren, wenn sie in Felder unterteilt sind. Eine italienische Adresse verwendet beispielsweise:

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

Sowie

Via Eroi della Repubblica
89861 Tropea VV
Italy

Das unterscheidet sich ziemlich von der Bestellung für US-Adressen - in der zweiten Zeile.

Siehe auch die SO-Fragen:

Überprüfen Sie auch die Postleitzahl des Tags ' an.


Bearbeiten : Umgekehrte Reihenfolge von Region und Stadt - pro UPU


5

Vielleicht ist dies nützlich: https://gist.github.com/259744 Für ein Projekt habe ich eine Tabelle mit Informationen über alle Länder der Welt gesammelt, einschließlich ISO-Codes, Top-Level-Domain, Telefoncode, Autozeichen, Länge und Regex von Postleitzahl. Ländernamen und Kommentare leider nur in deutscher Sprache ...


2

Kommt darauf an, wie frei du bereit bist, mit den Feldern umzugehen. Ein Freiform-Adressfeld reicht natürlich immer aus, hilft aber relativ wenig, die Geografie einzugrenzen.

Das Problem, das Sie haben werden, ist, dass die Ebene der geografischen Hierarchie zwischen den Ländern zu stark variiert. Heck, einige Länder haben nicht einmal überall "Straßenadressen".

Ich empfehle Ihnen, nicht zu schlau zu machen.


2

Im Gegensatz zu anderen Antworten hier glaube ich, dass es möglich ist, eine strukturierte Adressdatenbank zu haben.

Aus dem Hut heraus kann ich mir die folgende Struktur vorstellen:

  • Land
  • Region (Bundesland / Provinz)
  • Ort (Stadt / Gemeinde)
  • Unterort (Landkreis / andere Unterabteilung eines Ortes)
  • Straße

Aber wie kann man es schnell genug abfragen?

Eine Möglichkeit, die ich immer für möglich halte, besteht darin, nach der Postleitzahl (oder Postleitzahl) zu fragen, die von Land zu Land unterschiedlich ist, aber innerhalb des Landes solide ist.

Auf diese Weise können Sie Ihre Daten anhand der Informationen strukturieren, die von den Postämtern auf der ganzen Welt bereitgestellt werden.


2

Len Silverston von Universal Data Model empfiehlt eine separate Hierarchie von GEOGRAPHIC BOUNDARIESund abhängig davon, wie viel Freiformigkeit Sie bereit sind, entweder einfache STREET ADDRESS LINEs- oder länderspezifische Derivate zu akzeptieren .


1
Es stimmt, und die Modelle, die Silverston entwickelt hat, sind ziemlich gut und decken viel Boden ab, aber ich denke immer noch nicht, dass diese Komplexität (zu diesem Zeitpunkt) auf das Web anwendbar ist, insbesondere aus der Sicht des Endbenutzers. Am Ende gewinnt die Benutzerfreundlichkeit (fast) immer.
Alix Axel

2

Nein auf keinen Fall. Wenn Sie die Funktionsweise von US- und japanischen Adressen vergleichen , werden Sie feststellen, dass dies nicht möglich ist.

AKTUALISIEREN:

Beim zweiten Gedanken kann alles getan werden, aber es gibt einen Kompromiss.

Ein Ansatz besteht darin, das Problem mit Adress- und Adressattributtabellen zu modellieren, wobei eine 1: m-Beziehung zwischen ihnen besteht. Alles kann modelliert werden. Die address_attribute-Tabelle hätte ein pk, einen Namen, einen Wert und ein fk, die auf das pk der übergeordneten Adresse verweisen. Es ist fast so, als würde man eine Karte mit Name-Wert-Paaren verwenden.

Der Kompromiss besteht darin, jedes Mal, wenn Sie eine Adresse wünschen, einen JOIN durchzuführen. Sie müssen auch die Namen der address_attributes abfragen, um herauszufinden, womit Sie sich jedes Mal beschäftigen.

Ein anderer Ansatz wäre eine umfassendere Untersuchung der weltweiten Modellierung von Adressen. In einer objektorientierten Welt haben Sie möglicherweise die westliche Adressklasse (Straße1 / Straße2 / Stadt / Bundesland / Postleitzahl) und andere für Japan, China, so viele wie nötig, um den Adressraum zu kacheln. Dann hätten Sie eine Hauptadressentabelle und untergeordnete Tabellen für die anderen Typen mit einer 1: 1-Beziehung zwischen ihnen.

Wie macht Amazon oder eBay das? Sie versenden international. Haben sie länderspezifische UI-Funktionen? Ich habe nur das US-Gebietsschema verwendet.


1
Was ist, wenn ich die meisten Adressen benötige?
Arsen Mkrtchyan

Entschuldigung, ich folge dir hier nicht.
Duffymo

2

Nein, es gibt kein Standardadressierungsschema. Es variiert normalerweise von Land zu Land. Sogar die Weltpostunion sagte über die Adressierung der Welt, eine Adresse für alle, dass es keine gibt. Die beste Lösung hierfür besteht darin, die als ISO 3166 bekannten 2/3-Buchstaben-Ländercode-Standards zu verwenden und alles andere nach den Standards des Landes zu behandeln.

Wenn Sie jedoch unbedingt leicht zugängliche Tools für Ihr Projekt verwenden möchten, können Sie die Google Place-API ausprobieren .


Die Idee, zu sehen, wie die Google Place-API mit Dingen umgeht, gefällt mir sehr gut!
Andrew Steitz

1

Ihr Design sollte stark von Ihrem Zweck abhängen. Einige Leute haben geschrieben, wie man Daten strukturiert. Wenn Sie also einfach eine S-Mail an jemanden senden möchten, reicht dies aus. Die Dinge werden komplizierter, wenn Sie diese Daten für die Navigation verwenden möchten. Für die Autonavigation sind zusätzliche Strukturen erforderlich, die Verkehrsinformationen enthalten (z. B. Einbahnstraßen), während für die Fußnavigation viele zusätzliche Daten erforderlich sind. Hier ein kleines Beispiel: In meiner Stadt befindet sich meine Nachbarschaft in der Nähe des Parks. Neben dem Park befindet sich der ehemalige Flugplatz (einer der ältesten in Europa), der in ein Luftfahrtmuseum umgewandelt wurde. Neben dem Luftfahrtmuseum befindet sich ein Gewerbegebiet. Die Hausnummer für das Museum lautet 39, während die Gewerbeparknummern mit 39A beginnen. Es scheint also, dass 39 und 39A nahe beieinander liegen - aber es dauert ungefähr eine Meile, um von einem zum anderen zu gehen (und noch länger, wenn Sie mit dem Auto fahren).
Dies ist nur ein kleines Beispiel aus meiner Stadt. Ich denke, Sie können wahrscheinlich viele Ausnahmen finden (insbesondere in ländlichen oder wilderen Teilen jedes Landes).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.