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
sql
database-design
street-address
postal-code
Arsen Mkrtchyan
quelle
quelle
Antworten:
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:
Die Adresszeilen 1 bis 4 können Komponenten enthalten wie:
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.
quelle
Schauen Sie sich Database Answers an . Dies deckt insbesondere viele Fälle ab:
(Alle Zeichendatentypen mit variabler Länge)
quelle
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.
quelle
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.
quelle
Bei internationalen Adressen ist es bemerkenswert schwierig, die Informationen zu formatieren, wenn sie in Felder unterteilt sind. Eine italienische Adresse verwendet beispielsweise:
Sowie
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
quelle
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 ...
quelle
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.
quelle
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:
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.
quelle
Len Silverston von Universal Data Model empfiehlt eine separate Hierarchie von
GEOGRAPHIC BOUNDARIES
und abhängig davon, wie viel Freiformigkeit Sie bereit sind, entweder einfacheSTREET ADDRESS LINE
s- oder länderspezifische Derivate zu akzeptieren .quelle
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.
quelle
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 .
quelle
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).
quelle