Техническое задание: Спроектируйте таблицу conference_room_bookings для автоматизированного учета бронирования залов. Бизнес-требования исключают человеческий фактор и наложения встреч:
room_id (INT NOT NULL).booking_slot (TSRANGE NOT NULL).CHECK на валидность границ интервала: начало встречи должно быть строго меньше окончания встречи (lower(booking_slot) < upper(booking_slot)), а интервал не должен быть пустым.EXCLUDE USING gist обязано гарантировать, что для одного и того же зала room_id (оператор =) временные интервалы booking_slot ни в коем случае НЕ пересекаются (оператор перекрытия &&).Техническое задание: Спроектируйте таблицу профилей клиентов интернет-банкинга bank_clients со строгими ограничениями формата персональных данных:
snils (CHAR(14) NOT NULL): валидация формата страхового номера СНИЛС по регулярному выражению POSIX ^\d{3}-\d{3}-\d{3} \d{2}$ (три группы по 3 цифры через дефис, затем пробел и 2 контрольные цифры).passport_series (CHAR(4) NOT NULL) — строго 4 цифры (^\d{4}$), passport_number (CHAR(6) NOT NULL) — строго 6 цифр (^\d{6}$).birth_date (DATE NOT NULL): ограничение совершеннолетия (клиент должен быть старше 18 лет на момент регистрации: birth_date <= CURRENT_DATE - INTERVAL '18 years').phone_number (VARCHAR(12) NOT NULL): международный мобильный формат РФ (^\+7\d{10}$).Техническое задание: Смоделируйте структуру гостиничного комплекса с циклической зависимостью 1:1 / 1:N:
hotels: поля hotel_id (INT PRIMARY KEY), hotel_name (VARCHAR(100) NOT NULL), presidential_suite_id (INT NOT NULL). Отель обязан иметь главный президентский номер-люкс.hotel_rooms: поля room_id (INT PRIMARY KEY), hotel_id (INT NOT NULL REFERENCES hotels(hotel_id)), room_number (VARCHAR(20) NOT NULL). Номер принадлежит отелю.NOT NULL.hotels.presidential_suite_id REFERENCES hotel_rooms(room_id) как DEFERRABLE INITIALLY DEFERRED для отложенной проверки в конце транзакции.Техническое задание: Спроектируйте каталог товаров интернет-магазина marketplace_goods со сложной бизнес-логикой ограничений:
sku (VARCHAR(20) NOT NULL): артикул товара строго формата 3 заглавные буквы, дефис, 6 цифр (например, 'ELC-109283'). Валидация через POSIX regex.base_price (NUMERIC(10,2) NOT NULL): базовая стоимость строго больше 0.discount_percent (NUMERIC(5,2)): процент скидки должен находиться в диапазоне BETWEEN 0 AND 90 (не может быть отрицательным и не может превышать 90%).sale_price (NUMERIC(10,2)): цена по акции. Если указана, то должна быть строго меньше base_price (sale_price < base_price).sale_price, то discount_percent не должен быть NULL, и наоборот (связанная пара скидочных реквизитов).