Есть ли способ заставить хотя бы один столбец NOT NULL - PullRequest
0 голосов
/ 23 декабря 2019

У меня есть таблица schedule_days с id, day, date столбцами.

id - автоинкремент, первичный ключ
день - weekday - перечисление (дни недели) по умолчанию не равно нулю
дата - конкретная дата - по умолчанию не равно нулю

Расписание для расписания поездов. Это будет иметь одинаковую процедуру для всех недель, за исключением любой конкретной даты, такой как любой фестиваль. Таким образом, я установил оба значения null, так как я хочу установить либо day, либо date.

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

Я могу использовать TRIGGER , но хотел бы знать, есть ли лучший способ сделать это в MySQL - 8.0. * версия

1 Ответ

0 голосов
/ 23 декабря 2019

С помощью @ Акина я могу решить проблему. Это последний запрос.

Я создал CONSTRAINT, используя CHECK (как предложено @ Akina ) для day и date для любой таблицы IS NOT NULL

CONSTRAINT day_date_check CHECK ((day IS NOT NULL) OR (date IS NOT NULL))

Запрос таблицы

CREATE TABLE IF NOT EXISTS schedule_days
(
    id   INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    day  ENUM ('SUNDAY', 'MONDAY', 'TUESDAY', 'WEDNESDAY', 'THURSDAY', 'FRIDAY', 'SATURDAY') DEFAULT NULL,
    date DATE DEFAULT NULL,
    INDEX schedule_day (day),
    CONSTRAINT day_date_check CHECK ((day IS NOT NULL) OR (date IS NOT NULL))
) ENGINE = INNODB;
...