Как внести значения 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 )

т.е. выражение должно быть в скобках.

→ Ссылка