Je dois stocker une année et un mois dans ma table avec deux autres colonnes du thème du prochain mois et du thème Détails du thème Que devrais-je utiliser devrais-je utiliser deux colonnes de devrais-je utiliser une colonne Une chose que je veux aussi ajouter que je dois utiliser ces colonnes dans la recherche également, je dois donc les utiliser dans la clause de la référence ainsi en réponse à cette chose est également importante p> Type de données code> Dois-je utiliser P>
smalldateTime code> et stocker en faisant une date comme 09/01/2011 code>? p>
varchar code> ou int code> pour stocker une année distincte et
mois comme 2011 code> 09 code>? p>
varchar code> dans laquelle les stocker avec les concaténants
comme 201109 code>? p>
3 Réponses :
Si vous avez besoin de faire des recherches sur ces champs, j'utiliserais un datformat. Deux Int utiliseront plus d'espace, Varchar doit être remplacé par de charcuter, car votre taille est corrigée. Mais comme je l'ai mentionné, j'entiendrais à une dateformat. P>
Normalement, je conseillerais d'utiliser les types de date de date, quelle que soit vos restrictions, car elles vous permettent de faire de la date de manipulations et de comparaisons. Vous pouvez ensuite utiliser des déclencheurs pour limiter les dates au premier mois. Vous auriez besoin de déclencheurs em> pour vous assurer que vous ne pouviez pas obtenir deux rangées pour un seul combo mensuel / année. P>
En réalité, comme Cependant, dans ce cas, je serais assez satisfait d'une configuration d'année / mois à deux colonnes, basée sur votre cas d'utilisation. P>
En utilisant deux colonnes de type entier, vous n'avez pas besoin de vous inquiéter des déclencheurs, et vous ne semblez pas avoir besoin de traitement massivé du contenu de la table, sur la base de vos spécifications de colonne. P>
Je ne les stockerais pas comme une seule colonne de type entier si vous prévoyez jamais la nécessité de traiter des données pour une année an em> (indépendante du mois). Avoir l'année distincte permettra un index distinct qui sera probablement plus rapide que d'obtenir une gamme de valeurs code> yyyymm code>. P>
Sérieusement, choisissez celui que vous pensez être le plus facile de coder (et rencontre les exigences em> fonctionnelles em>). Ensuite, si et seul em> si, vous découvrez un problème de performance, examinez un schéma ré-org. Les bases de données ne sont pas définies et oublient des choses, vous devriez les surveiller constamment pour des problèmes et, si nécessaire, changer les choses. P>
Damian_the_unbeliever code> fait à juste titre, vous ne le fait pas besoin em> les déclencheurs si votre intention est de permettre aux utilisateurs de tenter d'insertion des dates où la journée du mois est 1. Dans ce cas, les contraintes seront probablement suffisantes. Ce n'est que le cas où vous voulez permettre aux utilisateurs de tenter d'insérer toute la date em>, mais de le forcer à devenir le premier jour de ce mois, que des déclencheurs seraient nécessaires. P>
blockQuote>
Vous auriez besoin de déclencheurs b>? Quel est le problème avec les contraintes check et uniques?
Parce que les contraintes sont contraintes. I> En d'autres termes, ils empêchent d'être insérés ou mis à jour. C'est bon si c'est le comportement que vous voulez, mais si vous souhaitez laisser une date à utiliser et simplement le forcer au premier mois, vous avez besoin de déclencheurs. Je mettrai à jour la réponse pour rendre cela clair.
Je suggérerais d'avoir deux colonnes séparées pour le mois et l'année:
Month TINYINT Year INT
Quel type de base de données utilisez-vous?
SQL Server ... si étiqueté correct?