39

Was ist die "beste" Möglichkeit, internationale Adressen in einer Datenbank zu speichern? Antworten Sie in Form eines Schemas und einer Erklärung der Gründe, warum Sie sich entschieden haben, (oder nicht) zu normalisieren. Erklären Sie auch, warum Sie den Typ und die Länge jedes Feldes gewählt haben.Was ist der "beste" Weg, internationale Adressen in einer Datenbank zu speichern?

Hinweis: Sie entscheiden, welche Felder Sie für notwendig halten.

+0

Ich habe über das letzte Jahr gerannt! [Adressen in Datenbanken] (http://mojoai.blogspot.com/2010/12/addresses-in-databases.html) –

+0

Postleitzahlen können kompliziert sein - zum Beispiel gibt es in der Republik Irland kein allgemeines Postleitzahlensystem Postleitzahlen existieren für Dublin (alle nummeriert 1-24, mit Ausnahme von 6W). – Geoglyph

+1

Nach der Diskussion helfen kann .. http://stackoverflow.com/questions/1159756/how-should-international-geographical-addresses-be-stored-in-a-relational-databa – chandraP

Antwort

24

Freier Text.

Die Überprüfung aller Post/Postleitzahlen der Welt ist zu schwer; Eine festgelegte Liste von Ländern ist zu politisch sensibel. obligatorischer Staat/Region/andere administrative Unterteilung ist einfach nur unpassend (allzu oft werde ich gefragt, in welchem ​​Land ich wohne - wenn ich nicht, weil Greater London überhaupt kein County ist).

Mehr auf den Punkt, es ist einfach unnötig. Es ist sehr unwahrscheinlich, dass Ihre Anwendung Adressen ernsthaft modelliert. Wenn Sie eine Postadresse wünschen, fragen Sie nach der Postanschrift. Die meisten Leute sind nicht so dumm, etwas anderes als eine Postanschrift einzutragen, und wenn sie es tun, können sie ihren neu gekauften Gegenstand auf Wiedersehen küssen.

Die Ausnahme ist, wenn Sie etwas tun, das natürlich auf ein Land beschränkt ist. In dieser Situation sollten Sie beispielsweise nach dem {Postleitzahl, Hausnummer} -Paar fragen, was ausreicht, um eine Postanschrift zu identifizieren. Ich kann mir vorstellen, dass man ähnliche Dinge mit der erweiterten Postleitzahl in den USA erreichen könnte.

+0

Greater London ist vielleicht kein County, aber wenn Sie nicht in der City of London leben, werden Sie wahrscheinlich feststellen, dass Sie tatsächlich in Surrey, Kent, Essex oder so leben. – belugabob

+3

Das Einfügen in verschiedene administrative Unterteilungen ist praktisch zum Filtern nach Region. Wie sonst wirst du wissen, in welchem ​​Teil der Welt/des Landes du die meisten Produkte verkaufst? –

+1

Im besten Fall Länder auswählbar machen. Länder werden nur selten geschaffen. – DrPizza

-3

Sie müssen ein wenig mehr Details darüber angeben, wie Sie die Daten verwenden möchten. Beispielsweise können Felder wie Stadt, Bundesland, Land entweder Text in der einzelnen Tabelle sein oder Codes, die mit einer separaten Tabelle mit einem Fremdschlüssel verknüpft sind.

Simplest würde

Address_Line_01 (Erforderlich, Nicht leer) Address_Line_02 Address_Line_03 Zeichen Stadt (Erforderlich) Pin (Erforderlich) Province_District Staat (Erforderlich) Land (Erforderlich) sein

All das kann Text/Unicode mit entsprechenden Feldlängen sein.

Telefonnummern wie zutreffend.

+1

Nur ein paar Länder hat Staaten. –

9

In der Vergangenheit habe ich Formulare modelliert, die international sein mussten, nachdem die ups/fedex Lieferadresse Formulare auf ihren Websites bilden (ich dachte, wenn sie nicht wissen, wie man eine internationale Ordnung behandelt, werden wir alle abgespritzt). Die von ihnen verwendeten Felder können als Referenz für die Einrichtung Ihres Schemas verwendet werden.

5

Im Allgemeinen müssen Sie verstehen, warum Sie eine Adresse möchten. Ist es für den Versand/Mailing? Dann gibt es wirklich nur eine Anforderung, das Land zu trennen. Die anderen Zeilen sind Freiform, die vom Benutzer ausgefüllt werden müssen. Der Grund dafür ist die übliche Weiterleitungsstrategie für Post: Jede eingehende Post für ein fremdes Land wird ohne Blick auf die anderen Adresszeilen weitergeleitet. Daher wird die detaillierte Information nur von dem Mail-Sortierer geparst, der sich in dem Land selbst befindet. Wie der Empfänger werden sie mit den nationalen Konventionen vertraut sein.

(UPS kann einige kleine europäische Länder bündeln, e .. alle Niederlande werden wahrscheinlich aus Belgien bedient - die Idee gilt immer noch.)

+0

Haben Sie zufällig "ausgehende" statt "eingehende" gemeint? – rinogo

2

Ich denke, Hinzufügen von Land/Stadt und Adresse Text wird in Ordnung sein. Land und Stadt sollten für die Berichterstattung getrennt sein. Manager immer Fragen Sie nach dieser Art von Berichten, die Sie nicht erwarten, und ich nicht lieber eine LIKE-Abfrage durch eine große Datenbank ausführen.

2

Facebook nicht zu wenig Respekt zu geben. Die Gesamtstruktur der Datenbank scheint jedoch in vielen Webanwendungen, die jeden Tag gestartet werden, übersehen zu werden. Natürlich glaube ich nicht, dass es eine perfekte Lösung gibt, die alle möglichen Variablen mit Adressstruktur ohne harte Arbeit abdeckt. Das heißt, in Kombination mit Autocomplete Facebook gelingt es, Standortdaten zu erfassen und einen Großteil ihrer überflüssigen Einträge zu eliminieren. Sie tun dies, indem sie ihre Datenbank gut genug organisieren, um Autocomplete-Informationen in einer kostengünstigen, fehlerarmen Weise dem Client in Echtzeit zur Verfügung zu stellen, so dass sie mehr oder weniger den richtigen Ort aus einer bestehenden Liste auswählen können.

Ich denke, die beste Lösung besteht darin, auf eine Datenbank von Drittanbietern zuzugreifen, die Ihren gewünschten geographischen Bereich enthält, und diese zu verwenden, um anfänglich Ihre Standortinformationen für den Benutzer zu erstellen. Dies ermöglicht es Ihnen, die Erstellung Ihrer eigenen zu vermeiden. Mit etwas Glück können Sie die Belastung Ihres Servers reduzieren, indem Sie Ihren neuen Benutzern die Möglichkeit geben, die korrekten Autocomplete-Informationen direkt von Ihrem Drittanbieter zu erhalten. Schließlich werden Sie in der Lage sein, die meisten automatischen Vervollständigungen für Standortinformationen wie Stadt, Land usw. aus Informationen, die in Ihrer eigenen Datenbank enthalten sind, aus Benutzereingabedaten zu füllen.