Как сохранить дату и время в базе данных, если часть времени необязательна?

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

Вопрос

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top