Ich muss Postleitzahlen in einer Datenbank speichern. Wie groß sollte die Säule sein?

103

Ich erwarte, dass die Spalte in meiner Oracle-Datenbank eine VARCHAR2 ist.

US-Reißverschlüsse sind 9.

Kanadier ist 7.

Ich denke, 32 Zeichen wären eine vernünftige Obergrenze

Was vermisse ich?

[EDIT] TIL: 12 ist eine vernünftige Antwort auf die Frage. Vielen Dank an alle, die dazu beigetragen haben.

EvilTeach
quelle
Nützlicher Link, aber seine Genauigkeit kann etwas ausfallen. EG listet australische Postleitzahlen mit 7 Zeichen auf, obwohl sie tatsächlich 4 sind. Ref: en.wikipedia.org/wiki/Postcodes_in_Australia und die Postleitzahlenliste unter www1.auspost.com.au/postcodes .
Rossp
Betreff: Mein vorheriger Kommentar - das bedeutet nicht, dass diese Liste als Leitfaden nicht nützlich ist. Unter der Annahme, dass die Liste auf der Seite längerer Postleitzahlen fehlerhaft ist, beträgt die längste Länge 9 Zeichen, sodass 16 Zeichen oder so ungefähr ausreichend Platz zum Atmen bieten sollten.
Rossp
Auch die Länderliste ist etwas kurz. Ich bin sicher, es gibt mehr Länder auf dem Planeten als die aufgelisteten ...
Robert Koritnik
2
Laut en.wikipedia.org/wiki/List_of_postal_codes beträgt die längste 12 Zeichen, wenn Sie das '-' speichern, sonst 11
Neil McGuigan
@CMS: Vielleicht möchten Sie den Link zu dieser Wikipedia-Seite aktualisieren, er scheint detaillierter zu sein.
Vajk Hermecz

Antworten:

51

Beim Durchblättern der Postleitzahlenseite von Wikipedia sollten 32 Zeichen mehr als genug sein. Ich würde sogar sagen, dass 16 Zeichen gut sind.

Strager
quelle
8
Guter Link. Selbst wenn man die Interpunktion in US ZIP + 4 berücksichtigt, würden 10 Zeichen für jedes Land ausreichen, soweit ich das beurteilen kann.
Jonathan Leffler
Basierend auf diesem Link, von der oben verlinkten Seite, würde ich mit 18 gehen, um Länder wie Chile aufzunehmen: en.wikipedia.org/wiki/List_of_postal_codes
mopo922
5
Chile besteht aus 7 Zeichen. Die Webseite, auf die Sie verwiesen haben, zeigt lediglich die Interpunktionsvarianz.
EvilTeach
21

Wie bereits von @ neil-mcguigan angesprochen, hat Wikipedia eine anständige Seite zum Thema. Basierend darauf sollten 12 Zeichen dies tun: http://en.wikipedia.org/wiki/List_of_postal_codes

Der Wikipedia-Artikel listet ~ 254 Länder auf, was in Bezug auf UPU (Universal Postal Union) mit 192 Mitgliedsländern ziemlich gut ist.

Vajk Hermecz
quelle
2
Beachten Sie, dass Montserrat nur aus 8 Zeichen besteht. 1110-1350 bezeichnet einen Bereich. discovermni.com/about-montserrat/montserrat-post-codes
Vajk Hermecz
Möglicherweise muss Wikipedia bearbeitet werden, da die ähnlich aussehende Postleitzahl für Malta eine generische wie "AAA NNNN" hat. Es würde mir nichts ausmachen, auch nur 15 Zeichen zu haben, da es später nur dann weniger problematisch sein könnte, wenn wir die Spaltenlänge anpassen müssen. Auch bei richtiger Verwendung der Datentypen sollten ohnehin nicht alle 15 Zeichen verwendet werden (möglicherweise varchar oder nvarchar oder ähnliches?). .
Manohar Reddy Poreddy
12

Warum sollten Sie ein Feld deklarieren, das größer ist als die tatsächlichen Daten, die Sie voraussichtlich darin speichern werden?

Wenn die ursprüngliche Version Ihrer Anwendung US- und kanadische Adressen unterstützt (was ich aus der Tatsache ableite, dass Sie diese Größen in Ihrer Frage angeben), würde ich das Feld als VARCHAR2 (9) (oder VARCHAR2 () deklarieren. 10) wenn Sie den Bindestrich in ZIP + 4-Feldern speichern möchten). Selbst wenn man sich die Beiträge anderer Länder zu Postleitzahlen in verschiedenen Ländern ansieht, würde VARCHAR2 (9) oder VARCHAR2 (10) für die meisten, wenn nicht alle anderen Länder ausreichen.

In der Folge können Sie die Spalte jederzeit ÄNDERN, um die Länge zu erhöhen, falls dies erforderlich sein sollte. Aber es ist im Allgemeinen schwer zu verhindern, dass sich jemand aus irgendeinem Grund dafür entscheidet, "kreativ" zu werden und 50 Zeichen in ein VARCHAR2 (50) -Feld zu stecken (dh weil er eine andere Zeile auf einem Versandetikett haben möchte). Sie müssen sich auch mit dem Testen der Grenzfälle befassen (wird jede Anwendung, die eine Postleitzahl anzeigt, 50 Zeichen verarbeiten?). Und mit der Tatsache, dass Clients beim Abrufen von Daten aus der Datenbank im Allgemeinen Speicher basierend auf der maximalen Größe der abzurufenden Daten und nicht auf der tatsächlichen Länge einer bestimmten Zeile zuweisen. In diesem speziellen Fall wahrscheinlich keine große Sache, aber 40 Bytes pro Zeile könnten in manchen Situationen ein anständiger Teil des Arbeitsspeichers sein.

Nebenbei können Sie auch in Betracht ziehen, die Postleitzahl und die + 4-Erweiterung (zumindest für US-Adressen) separat zu speichern. Es ist im Allgemeinen nützlich, Berichte nach geografischen Regionen erstellen zu können, und Sie möchten häufig alles in einer Postleitzahl zusammenfassen, anstatt es nach der Erweiterung +4 aufzuschlüsseln. An diesem Punkt ist es nützlich, nicht versuchen zu müssen, die ersten 5 Zeichen für die Postleitzahl zu SUBSTREN.

Justin Cave
quelle
4
Angenommen, wir codieren in etwas Dummem wie Pro * C. Wenn das Feld groß genug für Wachstum ist, muss der Code nicht berührt werden, wenn die Nutzung zunimmt.
EvilTeach
Ja, die Aufteilung der US-Postleitzahl in 5 und 4 Ziffern kann sinnvoll sein, je nachdem, wofür Sie sie verwenden möchten. Wenn Sie beispielsweise eine Art Adressabgleich durchführen, möchten Sie möglicherweise zuerst eine Übereinstimmung mit der Postleitzahl 5 herstellen und mit der Postleitzahl 9 ambitionierte Situationen lösen. Es ist auch
hilfreich,
3

Was Sie vermissen, ist ein Grund, warum Sie die Postleitzahl speziell behandeln müssen.

Wenn Sie nicht wirklich brauchen WORK mit einer Postleitzahl, würde ich vorschlagen , um es nicht besorgniserregend. Mit Arbeit meine ich eine spezielle Verarbeitung, anstatt nur Adressetiketten zu drucken und so weiter.

Erstellen Sie einfach drei oder vier Adressfelder von VARCHAR2 (50) [zum Beispiel] und lassen Sie den Benutzer eingeben, was er will.

Haben Sie wirklich brauchen Ihre Aufträge oder Geschäfte von Postleitzahl zu einer Gruppe? Ich denke nicht, da verschiedene Länder sehr unterschiedliche Systeme für diesen Bereich haben.

paxdiablo
quelle
Genau. Bei Verwendung eines VARCHAR2-Feldes spielt die Realität für ein Feld wie die Postleitzahl keine Rolle. Etwas zu groß ist besser, als einen Kunden zu ärgern, weil er seine Daten nicht eingeben kann.
Toby Allen
Und Varchars sind praktisch, da Datenbanken (mindestens DB2) die Speicherung optimieren können, um keinen Speicherplatz zu verschwenden.
Paxdiablo
1
Man möchte darauf hinweisen, dass die Sortierung nach Land und Postleitzahl an einigen Stellen zu günstigeren Postgebühren führt.
EvilTeach
10
Disgaree. Irgendwann werden Sie entscheiden, dass Sie die Adressen in Ihrer Datenbank validieren müssen (z. B. um Tipp- und Dateneingabefehler zu korrigieren), und dann werden Sie den Vorteil finden, Ihr Datenmodell richtig zu konstruieren, anstatt nur alles einzuschieben Eimer.
Gary Myers
1
@Pax Wenn Sie Massenpost an die Royal Mail übergeben, die vom Hauptbezirk (erster Buchstabe / zwei Buchstaben) der Postleitzahl vorsortiert ist, können Sie sie per MailSort zustellen lassen, was billiger ist als normale Post zweiter Klasse. Das ist nur ein Beispiel.
Richard Gadsden
3

Normalisierung? Postleitzahlen können mehrmals verwendet werden und sich auf Straßennamen oder Städtenamen beziehen. Separate Tabelle (n).

Stephan Eggermont
quelle
Interessant. Ein anderer Standpunkt wurde einfach ohne Grund abgelehnt. +1
EvilTeach
Eine Postleitzahl verweist normalerweise auf einen Block auf einer Straßenseite. Um eine breitere Region zu finden, wählen Sie die erste Hälfte der Postleitzahl aus. Diese Informationen in einer separaten Tabelle zu haben, hilft wirklich nichts und wäre komplizierter zu pflegen.
RevNoah
4
@ EvilTeach: Ich wette, es wurde abgelehnt, weil es nicht zum Thema gehört. Sagt es Ihnen, wie groß eine Spalte sein sollte, um jede mögliche Postleitzahl der Welt zu speichern? Nr.
wmax
2

Kanadische Postleitzahlen bestehen nur aus 6 Zeichen in Form von Buchstaben und Zahlen (LNLNLN).

Tegbains
quelle
3
Kanadische Postleitzahlen haben ein Leerzeichen in der Mitte "ANA NAN" Das sind 7 Zeichen.
EvilTeach
1
Der Platz befindet sich jedoch immer in der Mitte, sodass Sie ihn nicht speichern müssen.
Graeme Perrow
1
Das Leerzeichen scheint nicht Teil der Daten zu sein: "Hinweis: Kanadische Postleitzahlen werden immer in derselben Reihenfolge formatiert: alphabetisches Zeichen / Ziffer / Alpha / Ziffer / Alpha / Ziffer (z. B. K1A0B1)." Das ist von der Canada Post Website.
Tegbains
2
Ich denke nicht, dass das Weglassen des Leerzeichens etwas mit "Normalisierung" zu tun hat. Es ist lediglich ein Anzeigeproblem. Wie Bindestriche in Kontonummern. Ich würde es nicht speichern und mich nicht darauf verlassen, kanadische Postleitzahlen gegenüber einem CountryCode (int) -Feld zu identifizieren, das indiziert werden kann. Das Trennen der Daten- und Präsentationsebene ist der richtige Weg, dies zu tun.
Sam
2
Canada Post bevorzugt den Platz in der Postleitzahl bei der Adressierung von Umschlägen. Es ist am besten, es mit dem Leerzeichen zu speichern und die Validierung bei der Eingabe durchzuführen.
RevNoah
2

Großbritannien hat Standards veröffentlicht: UK Government Data Standards Catalogue

Max 35 characters per line 

Internationale Postanschrift:

Minimum of 2 lines and maximum of 5 lines for the postal delivery point 
details, plus 1 line for country and 1 line for postcode/zip code 

Die Postleitzahl in Großbritannien beträgt:

Minimum 6 and Maximum 8 characters 
PodTech.io
quelle
1

Wenn Sie Postleitzahlen in die Datenbank integrieren möchten, verwenden Sie am besten die geonames-Datenbank. Obwohl es schwer zu bedienen und zu verstehen ist, ist es die größte geografische Datenbank, die Benutzern wie uns frei zur Verfügung steht.

Alle anderen derartigen Datenbanken haben mehr oder weniger wahrscheinlich die gleichen Daten und Strukturen. Sie entfernen nur einige zusätzliche / redundante Informationen aus der Datenbank. Wenn Sie dies nur für Systeme mit geringer Last tun, die ihre kostenlosen Dienste nutzen, sind die Grenzwerte attraktiv und bieten eine einfachere Benutzeroberfläche mit json und ajax. Sie können die Grenzen anzeigen hier

Zu Ihrer Information: varchar (20) reicht aus, um Postleitzahlen zu speichern

Jay Kapasi
quelle