Домашнее задание - Практическое занятие №5: записи и логические условия

Выполняйте только если преподаватель назначил это задание. Срок сдачи сообщит преподаватель.

Данная разработка является резервным дистанционным практическим заданием по дисциплине «ОП.08 Основы проектирования баз данных» для СИЭУиП. Цель — закрепление навыков конструирования сложных логических предикатов фильтрации и модификации кортежей данных в СУБД с контролем трехзначной логики и транзакционной безопасности.

Задание 1. Конструирование сложного предиката модификации (Кейс «Фитнес-клуб»)

В таблице club_clients хранятся данные клиентов сети фитнес-центров со следующими атрибутами:

club_clients (
  client_id INT PRIMARY KEY,
  client_name VARCHAR(100),
  tariff VARCHAR(50),             -- 'Standart', 'VIP', 'Student', 'Corporate'
  visits_left INT,                -- количество оставшихся визитов
  expiration_date DATE,           -- срок действия абонемента
  last_visit_date DATE,           -- дата последнего посещения (может быть NULL)
  discount_percent INT            -- текущий процент скидки
);

Постановка задачи: руководство фитнес-клуба решило начислить персональную скидку 15% (установить discount_percent = 15) клиентам тарифов 'Standart' или 'Student', у которых осталось от 1 до 5 визитов включительно (visits_left), абонемент действует дольше '2026-11-01', и при этом у них отсутствует запись о последнем визите (last_visit_date IS NULL — клиент ни разу не посетил клуб после продления).

Требования: составьте полный SQL-запрос модификации данных с применением явной транзакции и операторов IN, BETWEEN, IS NULL.

Задание 2. Пошаговая верификация и составление таблицы аудита (До / После)

Дана выборка из 5 кортежей таблицы club_clients:

ID ФИО Тариф Визиты Годен до Посл. визит Скидка
1Иванов ИванStandart32026-12-15NULL0
2Петрова АннаVIP22026-11-20NULL5
3Сидоров ОлегStudent52026-10-10NULL0
4Кузнецов АртемStudent42027-01-152026-09-010
5Федорова МарияStandart12026-11-10NULL0

Вопрос: какие именно строки (укажите ID) удовлетворяют сложному логическому предикату из Задания 1? Для каждой строки укажите новое значение discount_percent и статус модификации.

Задание 3. Анализ трехзначной логики SQL (3VL) и ловушек с NULL

Студент составил следующий запрос для поиска клиентов, не являющихся VIP-пользователями:

SELECT * FROM club_clients WHERE tariff <> 'VIP';

В базе данных присутствуют клиенты, у которых поле tariff временно не заполнено (содержит NULL).

Вопросы:
1) Попадут ли строки с tariff IS NULL в результат выборки студента? Почему? Рассчитайте логическое выражение согласно модели 3VL.
2) Напишите корректный запрос, который вернет всех клиентов, кроме VIP, обязательно включая клиентов с неуказанным тарифом.

Задание 4. Критический анализ приоритета AND и OR

Инженер БД получил задачу перевести в архив записи списанного оборудования: оборудование марки 'HP' или 'Canon' со статусом 'Списано'.

Он выполнил команду:

UPDATE office_equipment 
SET is_archived = TRUE 
WHERE vendor = 'HP' OR vendor = 'Canon' AND status = 'Списано';

Вопрос: к каким нежелательным последствиям в базе данных приведет данный запрос из-за приоритета операторов? Как исправить запрос?