Disons que j'ai une table avec des annonces immobilières. Chaque liste peut être «À vendre» ou «À louer». Par conséquent, je peux mapper «À vendre» à 0, «À louer» à 1 et le stocker comme INT dans la base de données. Cependant, il serait beaucoup plus descriptif si je le stocke comme «vente»/«location» dans un champ de type CHAR. Ou je peux mapper 0 et 1 à deux constantes FOR_SALE et FOR_RENT dans mon programme. Ou utilisez les caractères 'S' et 'R'. Quelles sont les meilleures pratiques pour stocker ces propriétés dans une base de données avec une condition que le nombre total d'options pour une telle propriété est très faible.Entier vs char pour la propriété d'enregistrement DB
Répondre
Vous devez utiliser un char (1) ou un int (en fonction du nombre d'options) et affecter les valeurs à chaînes constantes, de cette façon vous économiser de l'espace et les chaînes seront facilement configurable à l'avenir :)
J'utiliserais toujours un int pour n'importe quel identifiant, y compris ceux de simples tables de recherche avec seulement quelques enregistrements. C'est plus cohérent et s'il n'y a pas beaucoup d'enregistrements, vous ne perdrez pas beaucoup d'espace non plus. – GolezTrol
PostgreSQL et MySQL supportent enumerated types, ce qui correspond à ce que vous recherchez. Le seul problème avec les types énumérés est la portabilité de la base de données. Oracle, par exemple, n'a pas de types énumérés, donc vous devez utiliser CHAR à la place. Ainsi, si vous utilisez PostgreSQL par exemple, il n'y a aucune raison de ne pas utiliser ses fonctionnalités. Si vous avez besoin de la portabilité d'une base de données, utiliser CHAR (1) ou NUMBER (1) est le plus efficace. Mise à jour: Vous pouvez utiliser une table de recherche avec une clé étrangère comme d'autres réponses l'ont mentionné mais avec des valeurs booléennes qui ne changeront pas, cela introduirait une complexité inutile. Surtout quand vous considérez avoir à créer des classes supplémentaires pour eux dans votre ORM. Cependant, si vous prévoyez une plage de valeurs à modifier pour cette colonne/variable, l'utilisation de la table de conversion est la meilleure solution.
Je stocker l'attribut dans la liste sous la forme d'un int et en faire une clé étrangère à une table de recherche où vous pouvez ajouter vos descriptions.
L'avantage de les avoir dans une table de recherche séparée par rapport aux énumérations, est que vous pouvez utiliser la valeur de recherche plus facilement dans les requêtes de vos programmes. – GolezTrol
Je voudrais juste utiliser un char(1)
pour une chose si simple; J'appliquerais aussi une contrainte CHECK
dessus (si disponible) pour donner une certaine mesure de contrôle de santé mentale. L'ajout d'une table supplémentaire pour quelque chose avec seulement deux valeurs est un peu inutile, même si elle est pendentif correcte. En outre, un S
ou R
dans la colonne vous aidera lorsque vous déboguez ou déblayez dans la base de données à la main, un 1
ou 6
sera à peu près vide de sens. Bien sûr, si vous avez des valeurs et que vous ne pouvez pas trouver de caractères mnémotechniques sensés pour les représenter, alors l'approche "int et FK" a plus de sens.
Vous pouvez passer de char(1)
à "int et un FK" assez facilement si cela devient nécessaire.
- 1. Fortran: entier * 4 vs entier (4) vs entier (type = 4)
- 2. entier Extrait du char buffer
- 3. Performance - Int vs Char (3)
- 4. char vs tinytext
- 5. MySQL PHP | "SELECT FROM table" utilisant "alphanumérique" -UUID. Vitesse vs. indexée Entier/indexé Char
- 6. Append entier à la fin de const char * C++
- 7. Non initialisé int vs entier
- 8. Résultat de la "sélection entier + datetime + char" et "select entier caractère + + datetime"
- 9. Entier hors de portée sur Postgres DB
- 10. statique char * vs #define en C++ VS2005
- 11. MySQL - TEXTE vs CHAR et VARCHAR
- 12. Chaîne [] vs Entier [] dans l'attribut d'action Struts2
- 13. Impossible de convertir un entier en caractère dans Char Array
- 14. Raccourci de propriété dans VS
- 15. Propriété vs Fonction (spécifiquement .NET)
- 16. char non ascii à binaire ou entier en C++
- 17. Evénement Filtrage CollectionViewSource vs Propriété
- 18. propriété publique vs static readonly
- 19. C# auto propriété VS 2005?
- 20. is_dirty VS last_modified_date dans un db?
- 21. Configuration du fichier Spring, db et de la propriété
- 22. Nouvelles Stockage dans un DB vs SGBDR
- 23. clé de dimension SSAS comme clé composée vs champ char
- 24. Imprimer char [] pour messageBox
- 25. spécificateur de format pour entier court
- 26. char [] pour LPCWSTR
- 27. fstream pour const char *
- 28. magento VS magento clone - coût de la propriété
- 29. format entier à la chaîne
- 30. Afficher la suggestion dans la fenêtre de propriétés VS pour une propriété de contrôle personnalisée
est-il pas la possibilité que quelque chose pourrait être À vendre et à louer en même temps? – Adam
@adam, c'est souvent le cas selon les agents immobiliers que je connais. – HLGEM
Système de base de données? – DeaconDesperado