Est-ce une bonne idée d’utiliser une colonne entière pour stocker les codes postaux américains dans une firebase database?

À première vue, il semblerait que je dispose de deux choix de base pour stocker les codes postaux dans une table de firebase database:

  1. Texte (probablement le plus courant), c.-à-d. char(5) ou varchar(9) pour prendre en charge l’extension +4
  2. Numérique, c’est-à-dire entier 32 bits

Les deux satisferaient aux exigences des données, si nous supposons qu’il n’y a pas de préoccupations internationales. Dans le passé, nous sums simplement passés par le texte, mais je me demandais si quelqu’un faisait le contraire? Juste à partir d’une brève comparaison, il semble que la méthode des nombres entiers présente deux avantages évidents:

  • De par sa nature, il se limite automatiquement aux chiffres uniquement (alors que sans validation, le style de texte pourrait stocker des lettres et celles qui, à ma connaissance, ne sont jamais valables dans un code postal). Cela ne veut pas dire que nous pourrions / devrions / devrions renoncer à valider les entrées des utilisateurs normalement!
  • Cela prend moins de place, soit 4 octets (ce qui devrait être suffisant même pour les codes postaux à 9 chiffres) au lieu de 5 ou 9 octets.

En outre, il semble que cela ne nuirait pas beaucoup à l’affichage. Il est banal de taper un ToSsortingng() sur une valeur numérique, d’utiliser une manipulation de chaîne simple pour insérer un trait d’union ou un espace ou autre pour l’extension +4, et utiliser le formatage de chaîne pour restaurer les zéros en tête.

Y a-t-il quelque chose qui découragerait l’utilisation de int comme type de données pour les codes postaux uniquement américains?

Un code postal numérique est – dans une petite mesure – trompeur.

Les chiffres doivent signifier quelque chose de numérique . Les codes postaux n’ajoutent, ne soustraient ou ne participent à aucune opération numérique. 12309 – 12345 ne calcule pas la distance entre le centre-ville de Schenectady et mon quartier.

Certes, pour les codes postaux, personne n’est confus. Cependant, pour d’autres champs de type nombre, cela peut être déroutant.

Étant donné que les codes postaux ne sont pas des nombres – ils sont simplement codés avec un alphabet restreint – je suggère d’éviter un champ numérique. L’économie d’un octet ne vaut pas grand chose. Et je pense que ce sens est plus important que l’octet.


Modifier

“Quant aux zéros de tête …” est mon point. Les nombres n’ont pas de zéros en tête. La présence de zéros significatifs sur les codes postaux est une autre preuve qu’ils ne sont pas numériques.

Allez-vous stocker des codes postaux non américains? Le Canada a 6 caractères avec quelques lettres. J’utilise généralement un champ de 10 caractères. L’espace disque est bon marché, ne pas avoir à retravailler votre modèle de données.

Utilisez une chaîne avec validation. Les codes postaux peuvent commencer par 0, donc le type numérique n’est pas approprié. En outre, cela s’applique parfaitement aux codes postaux internationaux (par exemple, le Royaume-Uni, qui peut contenir jusqu’à 8 caractères). Dans le cas peu probable où les codes postaux constituent un goulot d’étranglement, vous pouvez le limiter à 10 caractères, mais vérifiez d’abord vos formats cibles .

Voici les expressions de validation pour le Royaume-Uni, les États-Unis et le Canada.


Oui, vous pouvez appuyer pour récupérer les zéros en tête. Cependant, en théorie, vous jetez des informations qui pourraient vous aider en cas d’erreurs. Si quelqu’un trouve 1235 dans la firebase database, est-ce que c’est à l’origine 01235, ou est-ce qu’un autre chiffre a été manqué?

La meilleure pratique dit que vous devriez dire ce que vous voulez dire. Un code postal est un code, pas un nombre. Allez-vous append / soustraire / multiplier / diviser les codes postaux? Et d’un sharepoint vue pratique, il est beaucoup plus important que vous excluiez les zips étendus.

Normalement, vous utiliseriez un type de données non numérique, tel que varchar, qui autoriserait davantage de types de code postal. Si vous ne souhaitez pas autoriser les codes postaux à 5 chiffres [XXXXX] ou 9 chiffres [XXXXX-XXXX], vous pouvez utiliser un caractère (5) ou un caractère (10), mais je ne le recommanderai pas. Varchar est le choix le plus sûr et le plus sain.

Modifier: il convient également de noter que si vous ne prévoyez pas effectuer de calculs numériques sur le terrain, vous ne devez pas utiliser un type de données numérique. Le code postal n’est pas un nombre au sens où vous l’ajoutez ou le soustrayez. C’est juste une chaîne qui se compose généralement de nombres, vous devez donc vous abstenir d’utiliser des types de données numériques.

D’un sharepoint vue technique, certains points soulevés ici sont assez sortingviaux. Je travaille quotidiennement sur le nettoyage des données d’adressage, en particulier les adresses de nettoyage du monde entier. Ce n’est pas une tâche anodine par un effort d’imagination. En ce qui concerne les codes postaux, vous pouvez les stocker sous forme d’entier, même si cela n’est pas “sémantiquement” correct. Le fait est que les données sont sous une forme numérique, qu’elles soient ou non, à proprement parler, numériques.

Cependant, le véritable inconvénient de les stocker en tant que types numériques est que vous perdez la possibilité de voir facilement si les données ont été entrées de manière incorrecte (valeurs manquantes) ou si le système a supprimé les zéros menant à des opérations coûteuses de validation codes postaux qui étaient par ailleurs corrects.

Il est également très difficile de forcer l’utilisateur à saisir des données correctes si l’une des répercussions est un retard dans les affaires. Les utilisateurs n’ont souvent pas la patience d’entrer des données correctes si ce n’est pas immédiatement évident. L’utilisation d’une regex est un moyen de garantir des données correctes. Toutefois, si l’utilisateur saisit une valeur non conforme et affiche une erreur, il peut simplement omettre cette valeur ou saisir quelque chose de conforme mais incorrect. Un exemple [utilisant les codes postaux canadiens] est que vous voyez souvent A0A 0A0 entré qui n’est pas valide mais qui est conforme à l’expression régulière pour les codes postaux canadiens. Plus souvent qu’autrement, les utilisateurs sont obligés de fournir un code postal, mais ils ne savent pas ce que c’est ou n’ont pas tous les codes corrects.

Une suggestion consiste à valider la totalité de l’entrée en tant qu’unité en validant que le code postal est correct par rapport au rest de l’adresse. S’il est incorrect, proposer des codes postaux alternatifs valides pour l’adresse facilitera la saisie de données valides. De même, si le code postal est correct pour l’adresse postale, mais que le numéro de rue ne figure pas dans le domaine de ce code postal, offrez alors des numéros de rue différents pour cette combinaison code postal / rue.

À moins que vous ayez besoin d’exécuter des calculs mathématiques sur des données de code postal, vous ne pouvez pas utiliser une INT. Vous êtes sur l’ingénierie.

J’espère que cela t’aides,

Facture

Non parce que

  • Vous ne faites jamais de fonctions mathématiques sur le code postal
  • Peut contenir des tirets
  • Pourrait commencer par 0
  • Les valeurs NULL sont parfois interprétées comme des valeurs nulles dans le cas de types scalaires tels que des nombres entiers (par exemple lorsque vous exportez les données d’une manière ou d’une autre)
  • Le code postal, même s’il s’agit d’un nombre, désigne une zone, ce qui signifie qu’il s’agit d’un nom et non d’une quantité numérique de quelque chose.

Le code postal est vraiment un espace de noms codé, si vous y réfléchissez. Traditionnellement digits, mais aussi un trait d’union et des majuscules:

“10022-SHOE”

http://www.saksfifthavenue.com/main/10022-shoe.jsp

De manière réaliste, beaucoup d’applications professionnelles n’auront pas besoin de prendre en charge cet avantage, même s’il est valide.

Integer est bien, mais cela ne fonctionne qu’aux États-Unis, ce qui explique pourquoi la plupart des gens ne le font pas. D’habitude, j’utilise juste un varchar (20) ou plus. Probablement trop pour n’importe quel lieu.

Si vous deviez utiliser un entier pour US Zips, vous voudriez multiplier la partie principale par 10 000 et append le +4. L’encodage dans la firebase database n’a rien à voir avec la validation des entrées. Vous pouvez toujours exiger que l’entrée soit valide ou non, mais le stockage dépend de la quantité de vos besoins ou de l’USPS. (Indice: vos besoins changeront.)

J’ai appris récemment que dans Ruby, une des raisons pour lesquelles vous voudriez éviter ceci est que certains codes postaux commencent par des zéros, qui, s’ils sont stockés en tant qu’entier, seront automatiquement convertis en octal.

De la documentation :

Vous pouvez utiliser un préfixe spécial pour écrire des nombres en format décimal, hexadécimal, octal ou binary. Pour les nombres décimaux, utilisez un préfixe de 0d, pour les nombres hexadécimaux, utilisez un préfixe de 0x, pour les nombres octaux, utilisez un préfixe de 0 ou 0o…