Сотрудники_Кадры(Таб_номер, ФИО, Телефон, Паспортные_данные, Название_подразделения, Корпус, Номер_комнаты, Название_должности, Базовый_оклад, Номер_приказа, Дата_назначения, Ставка).
Выявите транзитивные функциональные зависимости (в частности, оклада от сотрудника через должность: Таб_номер → Должность → Базовый_оклад).
Спроектируйте не менее 3–4 таблиц в 3NF: departments, positions, employees, appointment_orders.
Укажите состав полей, первичные и внешние ключи.
Напишите ANSI SQL DDL-скрипт создания таблиц в правильном топологическом порядке.
Обязательно включите: PRIMARY KEY, FOREIGN KEY с ON DELETE RESTRICT для должностей и отделов, UNIQUE для паспорта/названия должности, NOT NULL, и предикаты CHECK (base_salary >= 19242.00) и CHECK (work_rate BETWEEN 0.25 AND 1.50).
Составьте не менее 5 согласованных операторов INSERT INTO, наполняющих все таблицы схемы в топологическом порядке.
Включите 1 граничный кортеж (минимальный оклад или максимальная ставка 1.5) и 1 закомментированный контрпример с демонстрацией перехвата ошибки.
Ответьте на вопросы:
1. Почему вынос оклада в таблицу positions устраняет аномалию обновления?
2. Почему для внешнего ключа сотрудника на должность недопустимо правило ON DELETE CASCADE?
Склад_Медикаменты(Код_товара, Торговое_наименование, Форма_выпуска, Дозировка_мг, Производитель, Страна_производителя, Лицензия_производителя, Номер_партии, Дата_изготовления, Срок_годности, Количество_упаковок, Номер_накладной, Дата_отгрузки, Аптека_получатель).
expiry_date > manufacture_date).
Устраните транзитивную зависимость страны производителя от препарата: Код_товара → Производитель → Страна.
Спроектируйте не менее 3–4 таблиц: manufacturers, medicines, batches, sales_invoices.
Обоснуйте приведение схемы к 3NF.
Напишите DDL-скрипт с типами INT, VARCHAR(N), DATE, NUMERIC.
Задайте PRIMARY KEY, FOREIGN KEY с ON DELETE RESTRICT, ограничение CHECK (dosage_mg > 0), CHECK (package_quantity >= 0) и контроль срока годности CHECK (expiry_date > manufacture_date).
Составьте не менее 5 согласованных операторов INSERT INTO в топологическом порядке.
Приведите закомментированный негативный тест с попыткой вставить партию с просроченной датой годности относительно даты выпуска.
Ответьте на вопросы: 1. К какой аномалии привело бы хранение лицензии завода в строке каждой отдельной партии препарата? 2. Почему проверка срока годности должна быть объявлена как ограничение CHECK на уровне СУБД, а не только на клиенте?
Договоры_Обучение(Код_слушателя, ФИО_слушателя, Телефон, Email, Код_группы, Название_курса, Полная_стоимость_курса, Академические_часы, Дата_старта_группы, Номер_платежа, Дата_оплаты, Внесенная_сумма_руб, Статус_оплаты).
payment_amount > 0).
Устраните зависимость параметров курса от учебной группы: Код_группы → Код_курса → (Стоимость, Часы).
Спроектируйте 4 таблицы в 3NF: courses, study_groups, students, payments.
Укажите первичные и внешние ключи.
Напишите DDL-скрипт с типами NUMERIC(10,2) для сумм, INT для часов и ключей, VARCHAR с ограничением длины.
Задайте UNIQUE на email слушателя, CHECK (total_hours > 0), CHECK (course_fee >= 5000.00), CHECK (payment_amount > 0) и правила ссылочной целостности.
Сформируйте не менее 5 согласованных кортежей INSERT INTO, демонстрирующих платежи нескольких слушателей.
Приведите закомментированный негативный тест с попыткой вставить отрицательную сумму платежа.
Ответьте на вопросы:
1. Почему удаление курса из каталога должно блокироваться (RESTRICT), если по нему уже созданы учебные группы?
2. Какая аномалия вставки возникла бы, если бы курсы хранились в одной таблице со студентами?
Заказы_СТО(Код_автомобиля, Госномер, VIN_номер, Марка_модель, Год_выпуска, ФИО_владельца, Телефон_владельца, Номер_заказ_наряда, Дата_приема, Пробег_км, Описание_неисправности, Код_работы, Наименование_работы, Нормо_часы, Стоимость_нормо_часа).
mileage >= 0).
Устраните зависимость контактных данных владельца от автомобиля и заказ-наряда: Заказ_наряд → Автомобиль → Владелец.
Спроектируйте 4 таблицы: clients, vehicles, repair_orders, work_items.
Обоснуйте ключи и связи.
Напишите DDL-скрипт с типами CHAR(17) для VIN, VARCHAR(12) для госномера, NUMERIC для стоимости.
Задайте UNIQUE(vin), UNIQUE(license_plate), CHECK (mileage >= 0), CHECK (labor_hours > 0), правило ON DELETE RESTRICT для клиентов и автомобилей, и ON DELETE CASCADE для таблицы работ work_items при удалении заказ-наряда.
Сформируйте не менее 5 согласованных кортежей INSERT INTO, покрывающих все 4 таблицы.
Приведите закомментированный негативный тест с попыткой вставить отрицательный пробег или работу с repair_order_id, отсутствующим в базе.
Ответьте на вопросы:
1. Почему для связи repair_orders → work_items допустимо правило ON DELETE CASCADE, а для связи clients → vehicles оно категорически запрещено?
2. Зачем нужен суррогатный ключ vehicle_id INT, если VIN-код уникален?