Je suis en train de concevoir une base de données pour un projet. Maintenant, je discute avec moi-même si je dois créer une table de consultation par exemple des données d'état civil qui ne peuvent contenir que des valeurs fixes comme Célibataire, Marié, Séparé, Veuve/Veuf. Je suis assez sûr qu'aucune autre valeur ne sera ajoutée à l'avenir. Devrais-je les mettre sur une table séparée ou juste coder en dur les valeurs sur le code du programme?Pour "table de consultation" ou non?
Répondre
Quel est l'avantage de les coder dur? Étant donné un système ORM moderne, n'est-il pas vraiment facile de lire ces valeurs hors de la base de données et de les utiliser? Si oui, alors je ne vois pas les avantages du codage en dur lorsque les inconvénients sont les suivants:
- Vous devrez redéployer si vous souhaitez ajouter à la liste
- Vous devrez redéployer si vous voulez changer les orthographes
- Vous voulez probablement avoir plus que la chaîne (peut-être un ref-id, ou un texte d'info-bulle, etc.)
- Vous devrez changer 1000s d'enregistrements pour changer le texte que vous avez stocké si vous ne stockez pas un ref-id.
"Je ne peux pas penser qu'ils vont changer" n'est presque jamais la même chose que "Ils ne peuvent pas changer". Si ne peut pas changer, comme dans True/False, alors bien. Si vous n'avez pas pensez ils vont changer, pas tellement.
Très bien dit. Merci! – codegy
Pour Marié, Séparé, Veuve/Veuf de changer, des légions entières de personnes passeraient des années à mettre à jour le code des impôts pour chaque pays de la planète. – Mike
Et c'est une bonne chose, Mike? – billjamesdev
En fonction de votre langage de programmation, faites-en des constantes ou des enums. Il n'y a aucune raison de les inclure dans la base de données parce que, comme vous l'avez dit, ils ne changeront probablement pas.
Si vos déplacements dans la base de données, ce qui est la prochaine étape? Homme Femme? Vrai faux? :)
J'utilise Java principalement et tous ces articles aller énumérations. Avec notre base de données étant MySQL, nous créons aussi le type de colonne comme enum. Nice match même là-bas.
HTH
Je crois que le PO signifie dire qu'il mettra des chaînes d'utilisateurs (anglais) dans la table de base de données, pas une recherche pour le programmeur. Les énumérations pourraient fonctionner si elles étaient transformées du côté client en utilisant un tableau. Peut-être pourriez-vous développer votre réponse en notant cette possibilité? – strager
Les énumérations Java permettent d'utiliser les noms de chaînes à la place du nom d'enum. – Mike
je aurais tendance à faire les deux - utiliser une table de consultation pour appliquer l'intégrité référentielle et fournir un ENUM pour rendre le code lisible. L'inconvénient est que si pour une raison quelconque les valeurs de recherche changent, vous devez vous rappeler de mettre à jour les deux emplacements.
Oui à l'énumération pour jouer avec la représentation numérique. Pour afficher le texte à l'utilisateur, cependant, je rechercherais les chaînes à partir d'un fichier de ressources ou de la base de données. –
Je suis d'accord. L'énumération sert uniquement à rendre le code lisible, à ne pas être affiché à l'utilisateur. –
Vous devriez avoir une colonne dans votre table pour CivilStatus (int) qui est la référence clé étrangère à la table CivilStatuses qui contient tous les statuts civils possibles.
Même si vous ne vous attendez pas à changer, je serais encore l'interroger à partir de la base de données. Cela facilitera d'autres choses à l'avenir, comme la localisation/la mondialisation.
Vous pouvez alors énumérations dans votre code, comme d'autres l'ont dit, pour rendre plus facile la mise en correspondance. Cependant, chaque fois que vous affichez du texte à l'utilisateur, celui-ci doit provenir de la base de données ou d'un fichier de ressources, et non directement du code.
normalisation dit: table de recherche
dit le bon sens: table de recherche
la notion de « union civile » n'est pas une loi naturelle, il est une question de droit civil - et qui peuvent changer.
Si vous devez faire quelque chose en fonction du statut d'union civile dans le programme, l'approche d'Andrew Kennan est bonne. Sinon, la table de recherche seule est suffisante
Je dois taper plus vite. Très bonne réponse. –
Table de consultation. Pourquoi?
1) Applique l'intégrité des données. Au moins mettre une contrainte de vérification sur la colonne.
2) Localisation
3) les questions de requête. Les bases de données sont parfois sensibles à la casse.
Select * from People where MarriageStatus = "single" or is it "Single", or is it "SINGLE"
Hmm, je ne sais pas mieux de mettre ToLower (MarriageStatus) = "single". Oups, je ne savais pas envelopper une fonction autour d'une colonne l'empêche d'utiliser un index :)
Épargnez-vous quelques problèmes et utilisez une table de consultation, sauf s'il s'agit d'un petit projet avec une faible espérance de vie.
- 1. objets de requête d'un many to many table de consultation
- 2. meilleures pratiques avec des tables de code ou consultation
- 3. Portable SQL pour déterminer si une table existe ou non?
- 4. Tables de consultation avec Linq-to-Sql
- 5. Fonction de consultation de base de données Biztalk et extracteur de valeur non-correspondance
- 6. Comment puis-je obtenir mes valeurs de table de consultation dans une zone de sélection?
- 7. Critères NHibernate pour une table non liée
- 8. liste Convertir des objets à une liste d'entiers et une table de consultation
- 9. Tables SQl Server: pour entasser ou non?
- 10. Collections PLSQL - pour créer une collection d'enregistrements ou non?
- 11. Table non créée par Hibernate
- 12. Rails: Polymorphes ou non?
- 13. ORM: Oui ou non?
- 14. De meilleurs moyens de déterminer si une colonne d'une table est vide ou non?
- 15. Pour "ceci" ou non pour "ceci" en C#?
- 16. Nom de table Alias pour faciliter la table de jointure à 3 colonnes (MySQL ou PostgreSQL)
- 17. Est-il possible dans DB2 ou dans une base de données de détecter si la table est verrouillée ou non?
- 18. Comment trouver le type, la longueur, nullable ou non d'une table et un nom de champ
- 19. Comment vérifier Table existe dans la base de données d'accès ou non?
- 20. Tables supplémentaires ou clés étrangères non spécifiques?
- 21. Table de correspondance vide par rapport à une table de correspondance non concordante (transformation de recherche)
- 22. Comment mettre std :: dec/hex/oct en consultation tableau
- 23. Classes imbriquées "publiques" ou non
- 24. Jarfile non valide ou corrigé
- 25. Silverlight et WCF ou non?
- 26. encapsuler des énumérations ou non?
- 27. iPhone-SDK: Comment définir la couleur de fond pour View et non pour la Table?
- 28. comment mapper une table non-standard avec ActiveRecord ou devrais-je utiliser un autre ORM?
- 29. LaTeX: désactiver ou désactiver l'hyperlien pour la table des matières?
- 30. Quoi de mieux, isset ou non?
Certains endroits ont des lois/règles différentes pour les mariages homosexuels (ou "unions civiles", si vous voulez) – nickf