Практическая работа: Проектирование таблиц и ключей БД

Индивидуальный рабочий лист обучающегося по дисциплине «ОП.08 Основы проектирования баз данных». Практическое занятие №1: физическое проектирование реляционных таблиц, выбор типов данных, спецификация первичных (естественных/суррогатных) и внешних ключей, настройка каскадных действий и ограничений целостности CHECK.

Данные обучающегося

Вариант 1: Проект БД «Учет автопарка логистической компании»

Предметное описание кейса:

Логистическая компания осуществляет грузоперевозки. В автопарке числятся автомобили различных марок и грузоподъемности. Водители имеют удостоверения с открытыми категориями и трудовой стаж. Для каждого рейса оформляется Путевой лист, в котором фиксируются: назначенный автомобиль, водитель, дата/время выезда и возвращения, показания одометра (пробег при выезде и возвращении), а также объемы топлива в баке при выезде, объем заправки в рейсе и остаток при сдаче смены.

Перечислите таблицы и поля с указанием типов данных (INTEGER, BIGINT, VARCHAR(n), NUMERIC(p,s), TIMESTAMP, BOOLEAN) и ограничений NOT NULL / DEFAULT.

Обоснуйте, почему для таблицы «Автомобили» выбран суррогатный ключ id_avto, а не госномер или VIN. Укажите внешние ключи и аргументируйте политику при удалении (ON DELETE RESTRICT vs CASCADE).

Запишите условия предикатов CHECK: неотрицательность пробега, проверка возвращения (пробег при возвращении >= при выезде), корректность расхода топлива и дат рейса.

Вариант 2: Проект БД «Гостиничный комплекс»

Предметное описание кейса:

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

Опишите состав полей, типы данных (SMALLINT, INT, BIGINT, VARCHAR, DATE, NUMERIC) и правила обязательности полей.

Сравните составной ключ (номер комнаты + дата заезда) и суррогатный id_брони. Почему в промышленной системе предпочтителен суррогатный ID? Укажите каскадное действие при удалении категории номера.

Сформулируйте предикаты CHECK: дата выезда строго больше даты заезда (data_vyezda > data_zaezda), валидация статуса бронирования, проверка совершеннолетия гостя или положительной цены.

Вариант 3: Проект БД «Электронная библиотека»

Предметное описание кейса:

Библиотека ведет каталог книг, физический учет каждого тома на стеллажах, базу читателей и журнал книговыдачи. Одно библиографическое издание (название, автор, международный код ISBN) может быть представлено в библиотеке несколькими десятками реальных физических экземпляров, каждый из которых имеет свой уникальный инвентарный штрихкод. В журнале выдачи фиксируются конкретный выданный экземпляр, читатель, дата выдачи, плановый срок возврата и фактическая дата возврата.

Определите таблицы, атрибуты и типы данных для учета фонда, физических томов и выдач.

Почему ISBN книги не может служить первичным ключом для выдачи книги читателю? Какая таблица связывается с журналом выдачи? Объясните поведение системы при попытке удалить читателя с невозвращенной книгой (ON DELETE RESTRICT).

Запишите проверки: срок возврата >= дата выдачи, фактическая дата возврата (если заполнена) >= дата выдачи, статус экземпляра ('в_фонде', 'на_руках', 'в_реставрации', 'списан').

Вариант 4: Проект БД «Сервисный центр по ремонту электроники»

Предметное описание кейса:

Сервисный центр принимает в ремонт электронику (смартфоны, ноутбуки). Ведется учет клиентов, сервисных инженеров (мастеров), склада комплектующих (запчастей) и квитанций на ремонт (заказов). В рамках одного ремонта мастер может списывать несколько деталей со склада (таблица использованных запчастей). Заказ проходит статусы: 'принят', 'диагностика', 'в_работе', 'готов_к_выдаче', 'выдан', 'отказ'. Для каждой детали на складе фиксируется цена закупки и розничная цена для клиента.

Опишите атрибуты, типы данных (INT, BIGINT, VARCHAR, TEXT, NUMERIC, TIMESTAMP) и обязательность полей.

Сравните и обоснуйте каскадные правила: почему при удалении заказа допустимо удалять строки списания запчастей (CASCADE), но удаление клиента при наличии заказов строго блокируется (RESTRICT)? Что делать с заказом при увольнении мастера (SET NULL)?

Запишите условия: допустимые статусы заказа, цена продажи детали не ниже цены закупки, дата выдачи устройства позже даты приема.

Чек-лист инженерного самоконтроля

Критериальная шкала оценивания (Максимум: 4 балла)

Критерий Балл Индикатор выполнения
Структура таблиц и типы данных 0–2 б. Полнота состава таблиц предметной области, атомарность полей, оптимальные и ресурсоэффективные типы (INTEGER, VARCHAR, NUMERIC, TIMESTAMP, BOOLEAN).
Первичные и внешние ключи, ссылочная целостность 0–1 б. Обоснованный выбор суррогатных/естественных ключей, корректная спецификация внешних ключей и аргументированные каскадные правила.
Ограничения целостности и самопроверка 0–1 б. Наличие ограничений NOT NULL, UNIQUE, сложных предикатов CHECK на бизнес-логику предметной области и заполненный чек-лист.
✓ Данные успешно сохранены в локальном хранилище браузера