Домашнее задание - Логическая и физическая независимость данных

Выполняйте только если преподаватель назначил это задание. Срок сдачи сообщит преподаватель.
Назначение задания: Резервный дистанционный трек для студентов, пропустивших очное занятие по уважительной причине или находящихся на дистанционном обучении. Включает комплексный анализ влияния рефакторинга схемы базы данных на стабильность внешних приложений и выработку инженерных решений для сохранения независимости данных.

Комплексный инженерный кейс: Рефакторинг информационной системы маркетплейса

В ходе аудита высоконагруженной базы данных маркетплейса отдел архитектуры выявил две критические проблемы:

  1. Проблема на концептуальном уровне: Единая монолитная таблица Products(product_id, title, price, stock, weight, dimensions, supplier_id, warehouse_id) разрослась до 50 атрибутов. Мобильное приложение покупателей запрашивает только витринные данные (title, price, stock), однако внутренняя служба логистики требует нормализации схемы и разделения сущности на две независимые таблицы: Store_Catalog (каталог витрины) и Logistics_Details (логистические параметры: габариты, масса, класс опасности).
  2. Проблема на физическом уровне: Время выполнения запроса поиска товаров по категории и диапазону цен SELECT * FROM Products WHERE category_id = 15 AND price BETWEEN 1000 AND 5000; на массиве в 2 000 000 записей выросло до 1.8 секунды из-за отсутствия индексов и перемешивания актуальных товаров с архивными товарами, снятыми с продажи 5 лет назад.

Задание 1. Обеспечение логической независимости (2 балла)

Разработайте техническое решение, которое позволит разделить монолитную сущность на две таблицы (Store_Catalog и Logistics_Details), сохранив при этом полную работоспособность мобильного приложения покупателей без изменения его исходного кода.

В ответе требуется предоставить:

  • DDL-скрипт создания экранирующего представления (CREATE VIEW Products AS ...).
  • Обоснование: почему простого представления недостаточно для сценария, когда система администрирования витрины обновляет цену товара через запрос UPDATE Products SET price = ... WHERE product_id = ...?
  • Описание логики триггера INSTEAD OF UPDATE для маршрутизации изменений в нужную таблицу.

Задание 2. Обеспечение физической независимости (2 балла)

Предложите комплексную оптимизацию дисковой подсистемы и методов доступа для таблицы Store_Catalog, которая не потребует переписывания ни одного SQL-запроса в приложении покупателей.

В ответе требуется предоставить:

  • Выбор типа индекса: сравните применимость составного индекса B-Tree (category_id, price) и двух отдельных Hash-индексов для условия фильтрации WHERE category_id = 15 AND price BETWEEN 1000 AND 5000. Поясните, почему Hash-индекс не способен ускорить диапазонный поиск BETWEEN.
  • Проектирование секционирования (Table Partitioning): опишите, по какому критерию целесообразно секционировать исторический архив товаров (например, по признаку is_active или диапазону дат), и поясните механизм Partition Pruning.
  • Обоснование физической независимости: почему выполнение команд CREATE INDEX и изменение дискового tablespace не ломают контракт прикладного API?

Требования к оформлению и критерии проверки