2008-12-18 6 views
3

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?

+0

Certains endroits ont des lois/règles différentes pour les mariages homosexuels (ou "unions civiles", si vous voulez) – nickf

Répondre

7

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.

+0

Très bien dit. Merci! – codegy

+0

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

+0

Et c'est une bonne chose, Mike? – billjamesdev

1

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

+0

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

+0

Les énumérations Java permettent d'utiliser les noms de chaînes à la place du nom d'enum. – Mike

0

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.

+0

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. –

+0

Je suis d'accord. L'énumération sert uniquement à rendre le code lisible, à ne pas être affiché à l'utilisateur. –

1

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.

3

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

+0

Je dois taper plus vite. Très bonne réponse. –

0

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.

Questions connexes