database – date – plusieurs colonnes ou un?

Je travaille sur une database, et je peux voir que la table a été configurée avec plusieurs colonnes (jour, mois, année) par opposition à une colonne de date. Je pense que je devrais convertir cela en un, mais je voulais vérifier s'il y avait beaucoup de points.

Je suis en train de réécrire le site, donc je suis en train de mettre à jour le code qui le traite de toute façon, mais je suis curieux de savoir s'il y a un avantage à le faire de cette façon?

La seule chose pour laquelle il est utilisé est de comparer des données, où toutes les colonnes sont comparées, et je pense qu'une comparaison d'entiers pourrait être plus rapide qu'une comparaison de date.

Consolidez-les en une seule colonne – un index sur une date unique sera plus compact (et donc plus efficace) que l'index composé sur 3 ints. Vous bénéficierez également de la security de type et des fonctions liées à la date fournies par le SGBD.

Même si vous voulez interroger le mois de l'année ou le jour du mois (ce qui ne semble pas être le cas, à en juger par votre description), il n'est pas nécessaire de les séparer – créez simplement les colonnes calculées appropriées et intégrez- les .

La colonne de date a un sens pour datatables temporelles car elle est adaptée à l'objective.

Toutefois, si vous avez un cas d'utilisation spécifique où vous comparez plus souvent datatables mensuelles que la date complète, il y a un petit avantage – comme vous l'avez mentionné – les colonnes int sont beaucoup plus maigres pour stocker pages d'index et plus rapide pour correspondre.

Les inconvénients sont que, avec 3 colonnes int séparées, la validation des dates est à peu près une affaire frontale sans avoir recours à un encoding supplémentaire du côté de SQL Server.

Normalement, un champ de date unique est idéal car il permet une comparaison plus efficace, des vérifications de validité à un niveau bas et des fonctions de date-math de database.

Le seul avantage significatif de séparer les composants est quand une première search (comparaison) de jour ou de mois est fréquemment nécessaire. Peut-être un «autre événement qui s'est passé ce jour-là». Ou une application de budgétisation mensuelle ou quelque chose.

(Même alors, un champ de date approprié pourrait probablement être fait pour fonctionner efficacement avec une indexing appropriée.)

Oui, je vous suggère de replace les 3 colonnes par une seule colonne qui contient la date en julien qui est un nombre à floating point. La partie avant le point donne le jour, la partie après le point donne l'heure dans la journée. Les calculs seront faciles et vous pouvez facilement convertir Julian en mois / jour / année, etc. Je crois que MS Excel stocke les dates en interne sous la forme d'un nombre à floating point afin que vous soyez en bonne compagnie.