Modèle de date SQL pour les dates que l'utilisateur peut ne pas connaître toutes les informations

StackOverflow https://stackoverflow.com/questions/614093

Question

Votre système permet aux nouveaux utilisateurs de s'enregistrer et d'entrer leur date de mariage. Étant un puriste, je voulais stocker cela comme une date. Après les entretiens avec les utilisateurs, il était clair que la réalité diffère de cette approche. Les utilisateurs ne sont souvent pas sûrs du jour ou du mois et souhaitent stocker des dates partielles, donc "juin 2009". ou "dans le courant de 2012".

Est-ce que quelqu'un connaît un bon modèle qui permet de stocker des dates partielles, puis d'essayer de créer une chronologie pour le grand jour - même si des dates partielles ont été entrées?

Était-ce utile?

La solution

Peut-être un "fuzzy" rendez-vous amoureux. S'ils disent "juin 2009", ils pourraient être stockés le 15 juin 2009, avec un écart de +/- 15 jours.

" dans le courant de 2010 " serait le 01 juillet 2010 avec un écart de 180 jours.

Enregistrez donc une date et un nombre de jours.

Si / comment cela fonctionnerait dans la pratique, je ne le sais pas. Juste une idée. Une plage de dates peut être plus facile à implémenter.

Autres conseils

Vous pouvez le stocker sous forme de plage avec une colonne après-date et avant-date.

Vous pouvez toujours stocker la date dans des colonnes séparées:

  • année
  • mois
  • jour du mois

Conservez-les toutes comme nulles. Vous pouvez ajouter une colonne dans laquelle vous stockez le temps calculé. Pour ce temps calculé, vous utilisez des valeurs par défaut pour toutes les colonnes qui sont nulles.

Vous pouvez stocker les dates sous AAAAMMJJ , avec des mois / jours inconnus définis sur 0. Par exemple, 20090200 correspondrait à "un jour de février 2009". Cela vous permettra de trier et de comparer relativement facilement, et si vous devez le convertir en date, vous pouvez simplement ajouter 1 au mois ou au jour pour obtenir une approximation des comparaisons de dates plus avancées.

J'ai eu un problème similaire avec les dates; avec la question supplémentaire que certaines personnes voulaient également dire «15 juin», sans spécifier l'année. Est-ce un cas que vous devez gérer aussi?

J'ai stocké le jour, le mois et l'année dans trois colonnes distinctes de la base de données. Chacune d'entre elles pouvait être annulée, puis (quelque peu) réinventée la roue dans ma candidature (tout en refusant certains cas, tels que des personnes 15ème de 1974 ".

Cependant, comme je mettais toute la logique de traitement des dates dans mon application, je n’ai jamais accédé aux trois colonnes individuellement. Avec le recul, je souhaiterais les avoir placés dans une seule colonne, avec des dates partielles sous forme de chaînes (quelque chose comme "19740615", "1974 ----", "---- 0615", etc.), juste de sorte que j'aurais moins de fouillis de colonnes.

Je suppose que cela dépend de ce que vous voulez faire dans la base de données et de ce que vous voulez faire dans votre application. Quoi qu'il en soit, je pense que vous allez inventer une roue de forme légèrement différente. Mais bien sûr, vous avez la bonté de créer des classes rangées, encapsulées et réutilisables - ça rendra les choses amusantes! : -)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top