Каким должен быть тип столбца "срок действия", если в некоторых случаях он не имеет никакого значения? (пусто? ноль? 0000-00-00?)
У меня есть таблица с указанием пунктов, которые я использую в моем главном меню:
модель | display_name | подменю | активный
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 ответа
Я не вижу ничего плохого в использовании NULL
в качестве заполнителя, когда дата истечения срока не будет известна. Рассмотрим в качестве примера, что вы хотите найти все записи, которые еще не истекли. Лечение NULL
как еще не истек, мы можем написать следующий запрос:
SELECT model, display_name, sub_menu, active, exp_date
FROM main_menu
WHERE exp_date > NOW() OR exp_date IS NULL;
Использование NULL
если вы еще не знаете exp_date и используете 9999-12-31
(максимальное поддерживаемое значение для даты), если срок действия строки не истек.