Тема 2. Взаимосвязи в моделях и реляционный подход к построению моделей — Логическая и физическая независимость данных (§2.2 с.7 программы)
В зависимости от расписания учебной части СИЭУиП занятие реализуется в основном регламенте (80 минут) или в сокращенном регламенте (60 минут при сжатом графике звонков):
| Этап занятия | Основной (80 мин) | Сокращенный (60 мин) | Ключевой фокус преподавателя |
|---|---|---|---|
| 1. Оргмомент и мотивация | 5 мин | 4 мин | Проверка явки, постановка проблемы: «Что сломается в мобильном банке при добавлении нового поля в таблицу клиентов?» |
| 2. Актуализация опорных знаний | 8 мин | 6 мин | Повторение реляционной модели: сущности, атрибуты, таблицы, первичные и внешние ключи. Концепция отделения логики от физики. |
| 3. Изложение нового материала • Архитектура ANSI/SPARC • Логическая независимость (VIEW, INSTEAD OF) • Физическая независимость (индексы, партиции, tablespaces) |
32 мин | 24 мин | Системное раскрытие трехуровневой архитектуры ANSI/SPARC (внешний, концептуальный, внутренний уровни). Демонстрация живых SQL-примеров экранирования схем. |
| 4. Разбор эталонных инженерных кейсов | 12 мин | 8 мин | Демонстрация: декомпозиция таблицы клиентов с сохранением старого интерфейса через VIEW и оптимизация запроса с B-Tree индексом без правок кода приложения. |
| 5. Практическое закрепление в zanyatie.html | 15 мин | 12 мин | Самостоятельный анализ студентами 4 вариантов инженерных сценариев в интерактивном бланке. Индивидуальный контроль педагога. |
| 6. Подведение итогов, рефлексия, ДЗ | 8 мин | 6 мин | Анализ типовых ошибок, самооценка по критериальной шкале (4 балла), фиксация резервного домашнего задания. |
В 1975 году комитет стандартов ANSI/X3/SPARC (American National Standards Institute, Standards Planning and Requirements Committee) сформулировал фундаментальный принцип организации современных СУБД — трехуровневую архитектуру данных, призванную решить проблему жесткой привязки прикладного программного обеспечения к форматам хранения на магнитных носителях.
Логическая независимость данных — это свойство СУБД и схемы данных, при котором изменение концептуальной схемы (структуры таблиц, разделения или слияния сущностей, добавления новых атрибутов) не требует переписывания внешних схем и прикладного программного кода.
Клиенты на ЮрЛица и ФизЛица создается виртуальное представление v_Клиенты с помощью оператора UNION ALL, что позволяет внешним программам выполнять прежние SELECT-запросы без ошибок.
INSERT, UPDATE, DELETE), направленные на обновляемые сложные представления. Триггер программно распределяет входящий поток строк по новым концептуальным таблицам, сохраняя полную работоспособность устаревших систем учета.
ID, ФИО и Скидочную карту, не получая доступа к паспортам и финансовой истории).
-- Пример логической независимости: сохранение старого интерфейса
-- Исходная таблица Clients разделена на Legal_Entities и Individuals.
-- Создаем VIEW для старой бухгалтерской программы:
CREATE OR REPLACE VIEW Clients AS
SELECT client_id, company_name AS client_name, inn AS tax_id, 'LEGAL' AS client_type
FROM Legal_Entities
UNION ALL
SELECT client_id, full_name AS client_name, inn AS tax_id, 'INDIVIDUAL' AS client_type
FROM Individuals;
-- Обеспечение вставки через триггер INSTEAD OF:
CREATE OR REPLACE TRIGGER trg_clients_insert
INSTEAD OF INSERT ON Clients
FOR EACH ROW
BEGIN
IF :NEW.client_type = 'LEGAL' THEN
INSERT INTO Legal_Entities(client_id, company_name, inn)
VALUES (:NEW.client_id, :NEW.client_name, :NEW.tax_id);
ELSE
INSERT INTO Individuals(client_id, full_name, inn)
VALUES (:NEW.client_id, :NEW.client_name, :NEW.tax_id);
END IF;
END;
Физическая независимость данных — это способность СУБД изменять структуры физического хранения данных на дисковых накопителях, алгоритмы индексации, методы сжатия и распределение файлов по файловой системе без изменения концептуальной схемы (таблиц и связей) и прикладных запросов.
SELECT * FROM Orders WHERE order_date = '2026-05-10' синтаксически остается абсолютно неизменным: оптимизатор СУБД сам решает переключиться со сканирования всей таблицы (Seq Scan) на сканирование индекса (Index Scan).
Архив_Заказов воспринимается приложением как единая сущность, однако на диске СУБД автоматически распределяет строки по физическим секциям (например, по годам или регионам: orders_2024, orders_2025, orders_2026).
-- Пример физической независимости: оптимизация без изменения прикладного кода
-- Приложение шлет запрос:
SELECT order_id, total_amount FROM Orders WHERE customer_id = 94821;
-- Администратор создает B-Tree индекс:
CREATE INDEX idx_orders_customer ON Orders USING btree(customer_id);
-- Запрос приложения НЕ ИЗМЕНИЛСЯ ни на символ,
-- но время выполнения сократилось с 1200 мс (Sequential Scan) до 1.5 мс (Index Scan).
| Типовая ошибка студента | В чем заключается суть заблуждения | Педагогический прием и контрпример |
|---|---|---|
| «Создание индекса — это изменение логической схемы» | Студент путает концептуальный уровень с физическим. Полагает, что раз команда CREATE INDEX пишется на SQL, то это меняет бизнес-структуру таблицы. |
Прием «Слепой клиент»: Спросить: «Изменится ли список колонок, возвращаемых SELECT * FROM Users? Сломается ли мобильное приложение, если индекс удалить?» Показать план EXPLAIN: запрос идентичен, меняется только план выполнения. |
| «Представление VIEW физически дублирует данные на диске» | Отождествление VIEW с физической таблицей. Студенты боятся нехватки дискового пространства при создании 10 различных VIEW для одной таблицы. | Прием «Виртуальное окно / Стеклянный трафарет»: Объяснить, что стандартное VIEW — это сохраненный SQL-запрос, «трафарет», накладываемый на сырые данные в момент обращения. Затраты диска равны длине текстовой строки определения в системном каталоге. |
| «Партиционирование требует переписывания WHERE в запросах» | Студент считает, что при секционировании по годам программист должен писать FROM orders_2025 вместо FROM orders. |
Прием «Прозрачный диспетчер»: Продемонстрировать механизм Partition Pruning: программист обращается к мастер-таблице Orders, а планировщик СУБД сам отсекает ненужные секции, не читая терабайты лишних файлов. |
| «Логическая независимость защищает от любых изменений в БД» | Иллюзия абсолютной изоляции. Непонимание, что удаление критической бизнес-информации без эквивалента в новой схеме невозможно компенсировать никаким VIEW. | Прием «Закон сохранения информации»: Если поле Номер_Паспорта удалено физически и не вычисляется из других полей, VIEW вернет NULL, что может уронить клиентский софт. Логическая независимость работает тогда, когда информация может быть реконструирована! |
Оценка за практическую работу на интерактивном листе zanyatie.html выставляется по 4-балльной прозрачной шкале: