Как внести значения Restriction и Validation в SQL
Начал писать код для букинг системы в ресторане в Microsoft SQL Server, какие могут быть ограничения в базе данных запросов? Мой код по сслыке: https://shrib.com/?v=nc#David4goXEpw
- Бронирование не может быть в прошлом времени
- Нельзя забронировать негативное время(17:00-15:00) а только позитивное(17:00-19:00)
- Нельзя бронировать столик на больше чем два часа
- Нельзя бронировать столик в закрытое время ресторана с 22:00-07:00
- Ресторан закрыт в субботу и воскресенье( невозможно забронировать столик в эти дни)
- Количество людей в одном бронировании не может превышать 6-ти человек
Ответы (1 шт):
Автор решения: Roman Konoval
→ Ссылка
Большинство ограничений можно реализовать с помощью CHECK ограничений.
Выглядеть будет как-то так:
CREATE TABLE dbo.Reservation
(
reservationID INT not null,
tableID INT not null,
creationTime DATETIME DEFAULT GETDATE(),
startTime DATETIME not null,
endTime DATETIME not null,
CONSTRAINT Reservation_end_after_start CHECK (endTime > startTime),
CONSTRAINT Reservation_not_too_long CHECK (DATEDIFF(mi, startTime, endTime) <= 120),
CONSTRAINT Reservation_in_future CHECK (creationTime < startTime),
CONSTRAINT Reservation_in_working_hours CHECK (
DATEPART(hh, startTime) >= 7 AND DATEPART(hh, startTime) <= 22
AND DATEPART(hh, endTime) >= 7 AND DATEPART(hh, endTime) <= 22
),
CONSTRAINT Reservation_on_weekday CHECK (DATEPART(dw, startTime) <= 5),
)
В общем синтаксис такой:
CONSTRAINT <имя-ограничения> CHECK (<выражение которое возвращает true/false>)
Т.е. для проверки количества человек в бронировании нужно писать так:
CONSTRAINT max_number_visitor CHECK ( partySize<=6 )
т.е. выражение должно быть в скобках.