wake-up-neo.com

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

Ich bin ein Programmierer und weiß ehrlich gesagt nicht, wie die Straßenadressenstrukturen in meinem Land aufgebaut sind :) 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

113
Arsen Mkrtchyan

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 normal, außer in China manchmal. Andere nahezu universelle Konzepte umfassen: Benennen der Siedlung (Stadt/Ort/Dorf), die allgemein als ein Ort bezeichnet werden kann; Benennung der Region und Vergabe 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.

Der UPU Universal Postal Union stellt Adressdaten für viele Länder in einem Standardformat zur Verfügung. Beachten Sie, dass das UPU-Format alle Adressen (bis auf die verfügbare Feldgenauigkeit) für ein ganzes Land enthält und daher relational ist. Wenn Sie Kundenadressen speichern, bei 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:

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

Die Adresszeilen 1-4 können folgende Komponenten enthalten:

  • Gebäude
  • Untergebäude
  • Hausnummer
  • Premise Range
  • Durchgangsstraße
  • Sub-Thoroughfare
  • Doppelte abhängige Lokalität
  • Unterort

Häufig werden nur 3 Adressleitungen verwendet, was jedoch oft nicht ausreicht. Es ist natürlich möglich, weitere Zeilen zur Darstellung aller Adressen im offiziellen Format zu verlangen, aber Kommas können immer als Zeilentrennzeichen verwendet werden, sodass die Informationen weiterhin erfasst werden können.

Normalerweise werden die Daten nach Ort, Region, Postleitzahl und Land analysiert, und diese Elemente sind für den Benutzer bei der Dateneingabe recht einfach zu verstehen. Aus diesem Grund sollten diese Elemente als separate Felder gespeichert werden. Erzwingen Sie jedoch nicht, dass Benutzer 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. Die Poststelle ist diejenige, die von einer Postbehörde als eine nahe gelegene Großstadt angesehen wird. Die Postleitzahl wird jedoch in der Regel alle Probleme oder Unstimmigkeiten dort beheben, um eine korrekte Zustellung zu ermöglichen, auch wenn die offizielle Poststelle nicht verwendet wird.

114
Edward Ross

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

enter image description here

43
Mitch Wheat

Fragen Sie sich, was der Hauptzweck der Speicherung dieser Daten ist ? Wollen Sie tatsächlich eine E-Mail an die Person an der Adresse senden? Verfolgen Sie die Demografie, die Bevölkerung? Können Sie Anrufer im Rahmen einer grundlegenden Authentifizierung/Überprüfung nach ihrer korrekten Adresse fragen? Alles das oben Genannte? Nichts des oben Genannten?

Abhängig von Ihrem tatsächlichen Bedarf werden Sie entweder feststellen, a) dass es nicht wirklich wichtig ist, und Sie können sich für einen Freitext-Ansatz entscheiden, oder b) strukturierte/spezifische Felder für alle Länder oder c) länderspezifische Architektur.

25
andora

Manchmal ist die Stadt die Straße, die einer Adresse am nächsten kommt.

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

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

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

12
Emily

Bei internationalen Adressen ist es bemerkenswert schwierig, eine Möglichkeit zu finden, die Informationen zu formatieren, wenn sie in Felder unterteilt sind. Beispielsweise verwendet eine italienische Adresse:

<street address>
<Zip> <town> <region>
<country>

Sowie

Via Eroi della Repubblica
89861 Tropea VV
Italy

Das ist etwas anderes als bei der Bestellung von US-Adressen - in der zweiten Zeile.

Siehe auch die SO Fragen:

Schauen Sie sich auch das Tag ' Postleitzahl ' an.


Bearbeiten : Umgekehrte Reihenfolge von Region und Stadt - pro UPU

9

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, Autoschild, Länge und Regex von Zip. Ländernamen und Kommentare leider nur in Deutsch ...

5
Hraban

Nein, es gibt kein Standardadressierungsschema. Dies ist normalerweise von Land zu Land unterschiedlich. Sogar der Weltpostverein sagte am Adressierung der Welt, eine Adresse für alle dass es keine gibt. Die beste Lösung dafür ist, die 2/3-Buchstaben-Ländercode-Standards zu verwenden, die als ISO 3166 bekannt sind, 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 Google Place API .

2
Abel Callejo

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

AKTUALISIEREN:

Auf den zweiten Blick kann alles getan werden, aber es gibt einen Kompromiss.

Ein Ansatz besteht darin, das Problem mit den Tabellen address und address_attribute zu modellieren, wobei eine 1: m-Beziehung zwischen ihnen besteht. Es kann alles modelliert werden. Die Tabelle address_attribute hätte einen pk, einen Namen, einen Wert und einen fk, der auf den pk der übergeordneten Adresse verweist. 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, mit was Sie jedes Mal zu tun haben.

Ein weiterer 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 zum Kacheln des Adressraums erforderlich sind. Dann hätten Sie eine Hauptadressentabelle und untergeordnete Tabellen zu den 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.

2
duffymo

Kommt darauf an, wie frei du bereit bist, mit den Feldern umzugehen. Ein Adressfeld in freier Form ist natürlich immer ausreichend, kann jedoch nur relativ wenig zur Eingrenzung der Geografie beitragen.

Das Problem ist, dass die geografische Hierarchie in den verschiedenen Ländern zu unterschiedlich ist. Heck, einige Länder haben nicht einmal überall 'Straßenadressen'.

Ich empfehle, dass Sie nicht versuchen, es zu klug zu machen.

2
jerryjvl

Anders als bei 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)
  • Ortschaft (Stadt/Gemeinde)
  • Unterort (Landkreis/andere Unterregion eines Ortes)
  • Straße

Aber wie kann man es schnell genug abfragen?

Eine Möglichkeit, die meiner Meinung nach immer erreicht werden kann, besteht darin, nach der Postleitzahl zu fragen, die von Land zu Land unterschiedlich ist, aber im jeweiligen Land 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
Paulo Santos

Len Silverston von niversal Data Model Fame empfiehlt eine separate Hierarchie von GEOGRAPHIC BOUNDARIES Und abhängig davon, wie viel Freiform Sie bereit sind, entweder einfache STREET ADDRESS LINE Zu akzeptieren oder länderspezifische Derivate.

2
David Schmitt

Ihr Design sollte stark von Ihrem Zweck abhängen. Einige Leute haben geschrieben, wie man Daten strukturiert. Wenn Sie also einfach eine E-Mail an jemanden senden möchten, reicht dies aus. Die Dinge beginnen sich zu komplizieren, 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 ist ein kleines Beispiel: In meiner Stadt ist meine Nachbarschaft in der Nähe des Parks. Neben dem Park befindet sich ein ehemaliger 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 ist 39, während die Nummern der Gewerbegebiete mit 39A beginnen. So scheint es, dass 39 und 39A nahe beieinander liegen - aber es dauert ungefähr eine Meile, um von einem zum anderen zu laufen (und noch länger, wenn man mit dem Auto fährt).
Dies ist nur ein kleines Beispiel aus meiner Stadt. Ich denke, Sie können wahrscheinlich viele Ausnahmen finden (insbesondere in ländlichen oder wilderen Gegenden jedes Landes).

1
smok1