Как сохранить дату и время в базе данных, если часть времени является необязательной - PullRequest
1 голос
/ 19 июня 2009

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

Как лучше всего хранить это в базе данных? Я использую postgresql.

Ответы [ 2 ]

4 голосов
/ 19 июня 2009

Есть определённые причины, почему это плохая идея. Есть также причины, по которым ваш выбор ограничен. Это плохая идея, потому что это один элемент данных и по более практической причине, что вы не можете сохранить часовой пояс, если у вас есть два поля.

Как упоминалось выше, нулевые значения являются очевидным преимуществом использования двух полей.

Возможно, вы захотите использовать одно поле даты и времени и сохранить флаг, чтобы указать, вводил ли пользователь время. Это может быть логический флаг. Однако вам все равно придется подумать о том, как вы собираетесь использовать эти данные - ввод только даты в поле datetime приведет к тому, что для компонента времени будет задано значение midnight. Это будет иметь значение при сортировке и отборе. Кроме того, если вы храните часовые пояса, вам нужно быть очень осторожным при использовании данных.

Чтобы выполнить ваше требование знать, было ли введено время, вам нужно будет два поля. Вам не нужно, чтобы второе поле было временем.

2 голосов
/ 19 июня 2009

Очевидный ответ - использовать два отдельных поля; тогда вы можете использовать значения NULL.

Если вы решите использовать одно поле, вам нужно будет выбрать магическую часть времени, которая означает «не вошел в реальное время», что может совпасть с реальным временем (хотя и маловероятным).

Кроме того, если вы намереваетесь часто использовать часть даты и времени по отдельности, то может быть также удобно использовать отдельные поля; в противном случае вам часто придется использовать функции выбора для извлечения соответствующей части поля.

...