web-dev-qa-db-fra.com

J'ai besoin de stocker les codes postaux dans une base de données. Quelle doit être la taille de la colonne?

Je m'attends à ce que la colonne soit un VARCHAR2, dans ma base de données Oracle.

Les zips américains sont 9.

Canadien a 7 ans.

Je pense que 32 caractères seraient une limite supérieure raisonnable

Qu'est-ce que je rate?

[EDIT] TIL: 12 est une réponse raisonnable à la question Merci à tous ceux qui ont contribué.

92
EvilTeach

Parcourez page des codes postaux de Wikipedia , 32 caractères devraient être plus que suffisants. Je dirais que même 16 caractères sont bons.

43
strager

Comme déjà soulevé par @ neil-mcguigan, wikipedia a une page décente sur le sujet. Sur la base de cela, 12 caractères devraient le faire: http://en.wikipedia.org/wiki/List_of_postal_codes

L'article de wikipedia répertorie ~ 254 pays, ce qui est assez bon en ce qui concerne PU (Union postale universelle) compte 192 pays membres.

19
Vajk Hermecz

Pourquoi déclareriez-vous une taille de champ supérieure aux données réelles que vous prévoyez d'y stocker?

Si la version initiale de votre application doit prendre en charge les adresses américaines et canadiennes (ce que je déduis du fait que vous appelez ces tailles dans votre question), je déclarerais le champ VARCHAR2 (9) (ou VARCHAR2 ( 10) si vous avez l'intention de stocker le tiret dans les champs Zip + 4). Même en regardant les messages que d'autres ont effectués sur les codes postaux d'un pays à l'autre, VARCHAR2 (9) ou VARCHAR2 (10) serait suffisant pour la plupart sinon tous les autres pays.

En bas de la ligne, vous pouvez toujours MODIFIER la colonne pour augmenter la longueur en cas de besoin. Mais il est généralement difficile d'empêcher quelqu'un, quelque part de décider de faire preuve de "créativité" et de placer 50 caractères dans un champ VARCHAR2 (50) pour une raison ou une autre (c'est-à-dire parce qu'ils veulent une autre ligne sur une étiquette d'expédition). Vous devez également gérer le test des cas limites (chaque application qui affiche un Zip gère-t-elle 50 caractères?). Et avec le fait que lorsque les clients récupèrent des données de la base de données, ils allouent généralement de la mémoire en fonction de la taille maximale des données qui seront extraites, et non de la longueur réelle d'une ligne donnée. Probablement pas une grosse affaire dans ce cas spécifique, mais 40 octets par ligne pourraient être un morceau décent de RAM pour certaines situations.

En passant, vous pouvez également envisager de stocker (au moins pour les adresses américaines) le code postal et l'extension +4 séparément. Il est généralement utile de pouvoir générer des rapports par région géographique, et vous souhaiterez souvent regrouper tout dans un code postal plutôt que de le décomposer par l'extension +4. À ce stade, il est utile de ne pas avoir à essayer de soustraire les 5 premiers caractères du code postal.

12
Justin Cave

Ce qui vous manque est une raison pour laquelle vous avez besoin que le code postal soit traité spécialement.

Si vous n'avez pas vraiment besoin de TRAVAILLER avec un code postal, je vous suggère de ne pas vous en soucier. Par travail, je veux dire faire un traitement spécial plutôt que de simplement utiliser pour imprimer des étiquettes d'adresse, etc.

Créez simplement trois ou quatre champs d'adresse de VARCHAR2 (50) [par exemple] et laissez l'utilisateur saisir ce qu'il veut.

Avez-vous vraiment besoin de regrouper vos commandes ou transactions par code postal? Je ne pense pas, car différents pays ont des régimes très différents dans ce domaine.

3
paxdiablo

Normalisation? Les codes postaux peuvent être utilisés plusieurs fois et peuvent être liés à des noms de rues ou à des noms de villes. Table (s) séparée (s).

3
Stephan Eggermont

Les codes postaux canadiens ne comportent que 6 caractères, sous forme de lettres et de chiffres (LNL NLN)

2
tegbains

Le Royaume-Uni a publié des normes: Catalogue des normes de données du gouvernement britannique

Max 35 characters per line 

Adresse postale internationale:

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 

La longueur du code postal britannique est:

Minimum 6 and Maximum 8 characters 
2
PodTech.io

Si vous souhaitez intégrer les codes postaux dans la base de données, la base de données de noms géographiques est préférable. Même s'il est difficile à utiliser et à comprendre, il s'agit de la plus grande base de données géographiques accessible gratuitement à des utilisateurs comme nous.

Toutes les autres bases de données de ce type ont plus ou moins probablement les mêmes données et la même structure. Ils suppriment simplement des informations supplémentaires/redondantes de la base de données. Si vous le faites simplement pour que les systèmes à faible charge utilisent leurs services gratuits, les limites sont attrayantes et offrent une interface plus facile en utilisant json et ajax. Vous pouvez voir les limites ici

Pour votre information, varchar (20) est suffisant pour stocker les codes postaux

1
Jay Kapasi