Каким должен быть тип столбца «срок действия», если в некоторых случаях он не имеет никакого значения? (пусто? ноль? 0000-00-00?) - PullRequest
0 голосов
/ 02 января 2019

У меня есть таблица с указанием элементов, которые я использую в моем главном меню:

модель |display_name |подменю |active

MYSQL:

CREATE TABLE `main_menu` (
  `model` varchar(255) NOT NULL COMMENT 'name of the model',
  `display_name` varchar(255) NOT NULL,
  `sub_menu` enum('Fruits','Vegtables','Grains','Breads','Snacks','Sweets') DEFAULT NULL,
  `active` tinyint(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

пример:

model   | display_name  | sub_menu  | active
---------------------------------------------
potato  | Potato        | Vegtables | 0
apple   | Apple         | Fruits    | 1
pumpkin | Pumpkin       | Vegtables | 1
  • Я хочу добавить к нему дату истечения срока действия ( "exp_date" ).
  • Не все строки имеют срок годности.

Каким должен быть тип exp_date?Очевидно, «Дата» .. но в тех случаях, когда для определенной строки не существует exp_date, что считается «хорошей практикой»?Вставить NULL?вставка 0000-00-0?

model   | display_name  | sub_menu  | active    | exp_date
--------------------------------------------------------------
potato  | Potato        | Vegtables | 0         | NULL
apple   | Apple         | Fruits    | 1         | NULL
pumpkin | Pumpkin       | Vegtables | 1         | 2019-03-01

Использование MySQL 5.7 и может перейти на новую версию 8.Я просто хочу убедиться, что я делаю это правильно.Я помню (не уверен, откуда), что типы даты и значения даты в проблеме, и есть правильный способ сделать это.

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Используйте NULL, если вы еще не знаете дату exp_date, и используйте 9999-12-31 (максимальное поддерживаемое значение для даты), если срок действия строки не истек.

0 голосов
/ 02 января 2019

Я не вижу ничего плохого в использовании NULL в качестве заполнителя, когда дата истечения срока не известна.Рассмотрим в качестве примера, что вы хотите найти все записи, которые еще не истекли.Рассматривая NULL как еще не истекшее время, мы можем написать следующий запрос:

SELECT model, display_name, sub_menu, active, exp_date
FROM main_menu
WHERE exp_date > NOW() OR exp_date IS NULL;
...