Шаблон даты SQL для дат, которые пользователь может не знать всю информацию - PullRequest
3 голосов
/ 05 марта 2009

Ваша система позволяет новым пользователям регистрироваться и вводить дату своей свадьбы. Будучи пуристом, я хотел сохранить это как дату. После опросов пользователей стало ясно, что реальность отличается от этого подхода. Пользователи часто не уверены в дне или месяце и хотят сохранить частичные даты, поэтому «июнь 2009» или «где-то в 2012».

Кто-нибудь знает хороший шаблон проектирования, который позволяет сохранять частичные даты, а затем пытаться создать временную шкалу для большого дня - даже если есть введенные частичные даты?

Ответы [ 5 ]

3 голосов
/ 05 марта 2009

Вы можете сохранить его как диапазон с колонкой после даты и до даты.

2 голосов
/ 05 марта 2009

Может быть "нечеткое" свидание. Если они скажут «июнь 2009», это может быть сохранено как 15 июня 2009 года с отклонением +/- 15 дней.

«где-то в 2010 году» будет 01 июля 2010 года с дисперсией 180 дней.

Так что сохраняйте дату и # дней.

Если / как это будет работать на практике, я не знаю. Просто идея. Диапазон дат может быть проще реализовать.

2 голосов
/ 05 марта 2009

Вы всегда можете сохранить дату в отдельных столбцах:

  • год
  • месяц
  • день-месяц

Держите их всех обнуляемыми. Вы можете добавить столбец, в котором вы храните вычисленные полный рабочий день. Для этого вычисленного времени вы используете некоторые значения по умолчанию для всех столбцов, которые являются нулевыми.

1 голос
/ 05 марта 2009

У меня была похожая проблема с датами; с добавленной проблемой, что некоторые люди также хотели сказать «15 июня», не указывая год. С этим случаем ты тоже должен разобраться?

Я сохранил день, месяц и год в трех отдельных столбцах базы данных, с каждым обнуляемым, а затем (несколько) заново изобрел колесо в моем приложении (а также запретил некоторые случаи, например, когда люди говорили «15-е число»). 1974 ").

Однако, поскольку я включил всю логику обработки дат в свое приложение, я никогда не обращался к трем столбцам по отдельности. Оглядываясь назад, я хотел бы поместить их в один столбец, содержащий частичные даты в виде строк (что-то вроде «19740615», «1974 ----», «---- 0615» и т. Д.), Просто чтобы я у меня будет меньше беспорядка в колонке.

Я думаю, это зависит от того, сколько вы хотите сделать в базе данных и сколько вы хотите сделать в своем приложении. В любом случае, я думаю, вы будете изобретать колесо немного другой формы. Но, конечно, вы достаточно хороши, чтобы создавать аккуратные, инкапсулированные, многократно используемые классы - это будет весело! : -)

1 голос
/ 05 марта 2009

Вы можете хранить даты как YYYYMMDD, с неизвестными месяцами / днями, установленными на 0. Например, 20090200 будет "когда-нибудь в феврале 2009". Это позволит вам сравнительно легко сортировать и сравнивать, и если вам нужно преобразовать его в дату, вы можете просто добавить 1 к месяцу или дню, чтобы получить приближение для более сложных сравнений дат.

...