padrão de data SQL para datas que o usuário não pode saber todas as informações
-
03-07-2019 - |
Pergunta
Você sistema permite que novos usuários se registrem e digite sua data do casamento. Sendo um purista, eu queria guardar isso como uma data. Após entrevistas de usuários, ficou claro que a realidade difere desta abordagem. Os usuários muitas vezes não são a certeza do dia ou do mês, e desejo para armazenar datas parciais, então "June 2009" ou "em algum momento de 2012".
Alguém sabe um padrão de design bom que permite o armazenamento de datas parciais, e, em seguida, tentando criar uma linha do tempo para o grande dia - embora haja datas parciais entraram?
Solução
Talvez uma data "difusa". Se eles dizem "June 2009", que podem ser armazenados até 15 junho de 2009, com uma variação de +/- 15 dias.
"em algum momento em 2010" seria 01 de julho de 2010, com uma variação de 180 dias.
Assim armazenar uma data e um # dias.
Se / como isso funciona na prática, eu não sei. Apenas uma ideia. Um intervalo de datas pode ser mais fácil de implementar.
Outras dicas
Você pode armazená-lo como um intervalo com uma coluna de pós-data e antes da data.
Você sempre pode armazenar a data em colunas separadas:
- ano
- mês
- dia do mês
Mantenha-os todos anulável. Você pode adicionar uma coluna onde você armazena o tempo total calculado. Para que o tempo computadorizada você usa alguns valores padrão para todas as colunas que são nulos.
Você pode armazenar datas como YYYYMMDD
, com desconhecidos meses / dias definido como 0. por exemplo, 20090200
seria "algum dia em fevereiro 2009". Isso tudo vai você para classificar e comparar de forma relativamente fácil, e se você precisa convertê-lo para uma data, você pode simplesmente adicionar 1 ao mês ou dia para obter uma aproximação para comparações de data mais avançadas.
Eu tive um problema semelhante com datas; com a questão acrescentou que algumas pessoas também queria dizer "15 de junho", sem especificar o ano. É este um caso você tem que trabalhar também?
Eu armazenado o dia, mês e ano em três colunas separadas no banco de dados, com cada anulável, então (um pouco) re-inventou a roda no meu aplicativo (bem como não permitindo alguns casos, tais como as pessoas dizendo "O 15º de 1974" ).
No entanto, como eu colocar toda a lógica de manipulação de data na minha aplicação, eu nunca acessou as três colunas individualmente. Em retrospectiva eu ??gostaria de ter colocá-los em uma única coluna, segurando datas parciais como strings (algo como "19740615", "1974 ----", "---- 0615", etc.), apenas para que eu' d ter menos confusão coluna.
Eu acho que depende de quanto você quer fazer no banco de dados e quanto você quer fazer na sua aplicação. De qualquer forma, eu acho que você vai ser inventar uma roda de uma forma diferente, ligeiramente. Mas, claro, você é bom o suficiente para fazer algumas arrumado, encapsulado, classes reutilizáveis ??- que vai torná-lo divertido! : -)