Un peu lié à ma question sur les entiers au lieu des nombres décimaux; mon fournisseur fournit beaucoup de champs "booléens" au format char (1) (c'est-à-dire Y/N). Certains de ces champs ne peuvent légitimement être un booléen car ils peuvent avoir plusieurs valeurs, mais la majorité peut être traitée comme un booléen. Dans ma question précédente, le conseil était de faire ce qui est "juste" au lieu de ce que le vendeur fournit; devrais-je encore appliquer cette logique et créer mon schéma de base de données en utilisant un champ de bits pour ces colonnes, ou le garder en tant que char (1) et faire la conversion dans mon code?Comment traitez-vous char (1) à la place d'un champs booléen et à trois états?
Toujours sur ce sujet, comment traiter les champs à trois états en ce qui concerne le code? Logiquement, le champ est un booléen (en ce sens que je ne m'intéresse qu'à la valeur Y/N et la troisième valeur est vraiment oui ou non), mais les valeurs peuvent être plus que vrai/faux (par ex. UpsShippable
champ qui peut être Y
, N
ou G
); ce champ a plusieurs états alors comment pourrais-je le mieux l'encapsuler? Quelque chose comme un enum (ou des constantes statiques, puisque Enums ne peut pas être utilisé avec le type de données char)? Dans les cas à valeurs multiples, les données ressemblent plus à un indicateur de type qu'à un indicateur. Pour résumer (je suis un peu long): 1) En traitant les valeurs char(1)
dans les données, les conservez-vous en tant que caractères ou convertissez en bit (ou quel que soit le type booléen de votre base de données) et pourquoi, et 2) Comment aborderiez-vous un champ de caractères à trois états dans votre code, en supposant que vous le laisseriez comme char(1)
dans le schéma de données?
EDIT: Pour clarifier, aucun de ces champs n'est utilisé pour la "vraie" logique, c'est simplement un indicateur. Par exemple, si l'article n'est pas expédiable via UPS (c'est-à-dire que la valeur est N/G), il indique que l'article ne peut pas être expédié par l'intermédiaire de l'UPS. un appel au service Web d'UPS pour calculer l'expédition. Les autres champs Y/N sont simplement là en tant que détails supplémentaires sur un élément et n'ont aucune logique, bien qu'ils doivent être modifiables (par exemple, avoir une case à cocher indiquant si elle est recyclée sur un formulaire de saisie de données); Je pourrais afficher une image ou des éléments de filtre par eux (par exemple, vous pouvez rechercher tous les produits recyclés, et je vais vérifier pour s'assurer que leur indicateur recyclé est vrai) mais rien d'autre, du moins pas pour le moment.
De même, le champ char (1) signifie que les données sont compatibles avec différentes bases de données (et c'est probablement la raison pour laquelle c'est char (1)) qui n'ont pas de champs bit/booléen; Oracle comme vous l'avez mentionné. –
+1 pour "vous permettre d'étendre le sens plus tard." Les besoins des utilisateurs ont le don de changer de manière inattendue. –
Ok, donc il semble que ce soit bien de le laisser en tant que char (1) et faire la conversion en code? Cela me permet de faire moins de conversions pendant l'importation de données et de l'étendre plus tard si j'en ai besoin. –