Домашнее задание - Практическое занятие №4: проектирование реляционной БД

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

Данное задание представляет собой резервный дистанционный практикум по проектированию реляционной базы данных. Задание предназначено для студентов, пропустивших очное занятие по уважительной причине или выполняющих индивидуальную траекторию.

Форма сдачи: электронный отчет, сформированный через функцию печати в PDF.

Задание 1. Нормализация схемы до 3NF (Устранение транзитивности)

Предметная область: Информационная система регионального логистического терминала «СеверТранс».
Исходное ненормализованное отношение содержит следующие атрибуты:
Накладная(Номер_ТТН, Дата_оформления, Код_грузополучателя, Название_компании, Город_доставки, Тарифная_зона, Базовый_тариф_руб, Вес_груза_кг, Итоговая_стоимость_руб).

Бизнес-правила предметной области:
  • Номер ТТН однозначно определяет всю накладную и дату оформления.
  • Каждая компания-грузополучатель жестко привязана к конкретному городу доставки.
  • Каждый город доставки принадлежит фиксированной тарифной зоне (например: Сургут — Зона 1, Нижневартовск — Зона 1, Ханты-Мансийск — Зона 2).
  • Для каждой тарифной зоны установлен единый фиксированный базовый тариф за килограмм груза.

Ваша задача:
  1. Построить цепочку транзитивных функциональных зависимостей вида X → Y → Z.
  2. Выполнить декомпозицию отношения без потерь информации до Третьей нормальной формы (3NF), выделив необходимые таблицы-справочники.
  3. Привести итоговый список спроектированных отношений с указанием первичных (PK) и внешних (FK) ключей.

Задание 2. Физическая DDL-спецификация схемы базы данных

Разработайте полный DDL-скрипт на диалекте ANSI SQL для создания спроектированных в Задании 1 таблиц.

Требования к DDL-скрипту:
  • Соблюдение топологического порядка создания таблиц (сначала таблицы-справочники, затем зависимые таблицы накладных).
  • Назначение корректных типов данных (целочисленные ID, NUMERIC для тарифов и стоимости, DATE для дат, VARCHAR(N) с явным ограничением длины).
  • Декларативное объявление первичных ключей PRIMARY KEY.
  • Объявление внешних ключей FOREIGN KEY ... REFERENCES с обоснованной политикой ссылочной целостности ON DELETE RESTRICT.
  • Наложение ограничений NOT NULL на обязательные поля, UNIQUE на название компании, и CHECK на неотрицательность веса груза и тарифа.

Задание 3. Контрольный набор тестовых кортежей (DML INSERT INTO)

Сформируйте контрольный пакет операторов INSERT INTO для наполнения созданной схемы базы данных.

Требования к тестовым данным:
  • Минимум 5 связанных между собой валидных кортежей, покрывающих все спроектированные таблицы.
  • Соблюдение топологической последовательности вставки (справочники → операционные записи накладных).
  • Включение 1 граничного значения (минимальный вес груза или минимальный тариф).
  • Приведите 1 закомментированный негативный пример вставки (с нарушением ограничения CHECK или внешнего ключа FK) и укажите ожидаемое сообщение об ошибке ядра СУБД.

Задание 4. Аналитический самоконтроль

Ответьте кратко и аргументированно на следующие вопросы:
  1. Почему хранение базового тарифа в строке накладной приводит к аномалии обновления (Update Anomaly)?
  2. В каком случае при декомпозиции отношения до нормальной формы Бойса-Кодда (BCNF) может быть потеряно сохранение исходных функциональных зависимостей?
  3. Что произойдет при попытке выполнить удаление тарифной зоны из базы данных, если для внешнего ключа установлено правило ON DELETE RESTRICT?
Данные успешно сохранены в браузере!