Резервное практическое задание предназначено для дистанционного закрепления теоретического материала занятия №23 «Организация интерфейса с пользователем: ввод» (§2.2 с.7–8 учебной программы дисциплины «ОП.08 Основы проектирования баз данных»). В рамках задания вам предстоит спроектировать экранную форму ввода для корпоративной системы, составить детальную матрицу маппинга элементов интерфейса на атрибуты реляционной БД и сформировать серверный транзакционный блок сохранения.
Вам поручено спроектировать интерфейсную форму ввода для модуля заключения договоров аренды помещений в торгово-деловом центре. Документ должен фиксировать реквизиты договора, арендатора, помещение, даты аренды, сумму и перечень дополнительных услуг.
-- Родительская таблица договоров аренды (Master)
CREATE TABLE lease_contracts (
contract_id BIGSERIAL PRIMARY KEY,
contract_number VARCHAR(30) NOT NULL UNIQUE, -- Номер договора (например: АР-2026/089)
tenant_id INT NOT NULL REFERENCES tenants(id), -- Арендатор (выбор из справочника)
room_id INT NOT NULL REFERENCES office_rooms(id), -- Помещение (выбор из справочника)
start_date DATE NOT NULL, -- Дата начала аренды
end_date DATE NOT NULL, -- Дата окончания аренды
monthly_rate NUMERIC(12,2) NOT NULL, -- Месячная ставка аренды (руб)
security_deposit NUMERIC(12,2) NOT NULL, -- Обеспечительный платеж (руб)
auto_renewal BOOLEAN NOT NULL DEFAULT FALSE, -- Автоматическая пролонгация договора
payment_day SMALLINT NOT NULL CHECK (payment_day BETWEEN 1 AND 28), -- День ежемесячной оплаты
comments TEXT, -- Особые условия и примечания
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
CONSTRAINT chk_dates CHECK (end_date > start_date)
);
-- Табличная часть дополнительных услуг к договору (Detail)
CREATE TABLE lease_contract_services (
service_line_id BIGSERIAL PRIMARY KEY,
contract_id BIGINT NOT NULL REFERENCES lease_contracts(contract_id) ON DELETE CASCADE,
service_id INT NOT NULL REFERENCES service_catalog(id), -- Услуга (клининг, паркинг, охрана)
quantity NUMERIC(6,2) NOT NULL CHECK (quantity > 0), -- Объем/Количество
price_per_unit NUMERIC(10,2) NOT NULL, -- Тариф за единицу
total_cost NUMERIC(12,2) NOT NULL -- Сумма по услуге
);
Опишите структуру экранной формы: логическое деление на информационные блоки (карточки), порядок расположения элементов управления, клавиатурный порядок табуляции (Tab Order) и размещение кнопок действий («Заключить договор», «Отмена»).
Заполните спецификацию элементов экранной формы. Для каждого поля укажите:
1. Представьте пример структуры DTO-объекта (JSON), который экранная форма отправляет на бэкенд при клике кнопки «Заключить договор».
2. Напишите параметризованный SQL-скрипт серверной транзакции (BEGIN ... COMMIT), гарантирующий неделимость сохранения договора вместе со строками услуг и атомарный откат (ROLLBACK) при сбое.
Ответьте на контрольные вопросы инженера-проектировщика:
DatePicker предотвращает нарушение ограничения CHECK (end_date > start_date) на этапе ввода?room_id) недостаточно обычного текстового поля ввода номера офиса? Опишите сценарий потенциального сбоя.