Кафедра ИТКафедра ИТ
Обучение
  • О кафедре
  • Направления подготовки
  • Структура кафедры
  • Обращение к студентам
  • Официальный сайт «ВШП»
На главнуюGitHub
Обучение
  • О кафедре
  • Направления подготовки
  • Структура кафедры
  • Обращение к студентам
  • Официальный сайт «ВШП»
  • МДК.11.01 - QUIZ. Задания для самопроверки

МДК.11.01 - QUIZ. Задания для самопроверки

В этом квизе представлены таблицы, каждая из которых находится в одной из нормальных форм базы данных: от ненормализованной формы (UNF) до шестой нормальной формы (6NF). Студентам предстоит проанализировать данные таблиц и определить, в какой нормальной форме они находятся. Обратите внимание, что в некоторых случаях отдельные таблицы могут находиться в более низких формах, однако если одна из таблиц удовлетворяет требованиям более высокой формы, принято считать, что вся база данных соответствует этой форме.

[!INFO]
Здесь и далее в примерах будут использованы следующие обозначения:

  • 🔑 - Первичный ключ
  • 🔗 - Внешний ключ
  • ⚠️ - Набор значений ограничен

Список покупок

Представлены данные о покупках клиентов, где каждый клиент может купить несколько товаров. Эти данные в ненормализованной форме, поскольку несколько покупок клиента хранятся в одной строке.

customer_nameitems_bought
Иван ИвановМолоко, Хлеб
Сергей СергеевЯйца, Сахар, Молоко
John SmithBread, Milk, Eggs
Иван ИвановСахар
Узнать правильный ответ

Представленная таблица находится в UNF, потому что у нас есть неатомарные значения в колонке items_bought, где несколько товаров записаны в одной ячейке.



Проекты и задачи

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

🔑 project_id🔑 task_idtask_nameassignee
1101Создать макетИван Иванов
1102Разработать дизайнСергей Сергеев
2201Написать документациюJohn Smith
2202Провести тестированиеИван Иванов
Узнать правильный ответ

Представленная таблица находится в 2NF, потому что она удовлетворяет требованиям 1NF и все неключевые атрибуты полностью зависят от первичного ключа (в данном случае ключ составной — project_id + task_id).



Расписание занятий

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

🔗 class_idstudent_namesubject
1Иван ИвановМатематика
1Иван ИвановФизика
2Сергей СергеевХимия
2Сергей СергеевБиология
3John SmithИстория
3John SmithEnglish
Узнать правильный ответ

Представленная таблица находится в 1NF, так как все атрибуты содержат атомарные значения, и каждая запись уникальна.



Аренда автомобилей

Данные о системе аренды автомобилей, в которой хранится информация о датах аренды автомобилей клиентами. Каждая аренда связана с конкретным клиентом и автомобилем.

Таблица аренды

🔑 car_id🔑 rental_date🔗 customer_id
1012024-09-01201
1022024-09-02202
1012024-09-03203

Таблица клиентов

🔑 customer_idcustomer_name
201Иван Иванов
202Сергей Сергеев
203John Smith

Таблица автомобилей

🔑 car_idcar_modellicense_plate
101Toyota CamryAA123BB
102Honda CivicBB234CC
Узнать правильный ответ

Представленные таблицы находятся в BCNF, потому что в таблице аренды составной ключ car_id + rental_date определяет все атрибуты, и нет транзитивных зависимостей. Две другие таблицы (клиентов и автомобилей) технически находятся в 3NF, так как в них все неключевые атрибуты зависят только от ключей. Однако, поскольку таблица аренды находится в BCNF, принято считать, что и вся база данных соответствует BCNF.



Заказы и клиенты

Система заказов, где хранится информация о заказах клиентов. Таблица заказов связана с таблицей клиентов, которые делают эти заказы.

Таблица заказов

🔑 order_id🔗 customer_idorder_date
11012024-09-01
21022024-09-02
31032024-09-03

Таблица клиентов

🔑 customer_idcustomer_namecustomer_email
101Иван Ивановivan@example.com
102Сергей Сергеевsergey@example.com
103John Smithjohn@example.com
Узнать правильный ответ

Представленные таблицы находятся в 3NF, потому что они удовлетворяют требованиям 2NF, и нет транзитивных зависимостей. Каждая таблица хранит только те данные, которые напрямую зависят от её первичного ключа. В таблице заказов все неключевые атрибуты зависят только от order_id, а в таблице клиентов — от customer_id.



Товары и поставщики

Эта система управляет поставками товаров в магазины. Один и тот же товар может поставляться в разные магазины от разных поставщиков.

Таблица товаров

🔑 product_idproduct_name
1Хлеб
2Молоко
3Яйца

Таблица поставок

🔑 product_id🔑 store_id🔗 supplier_id
1101201
1102202
2101201
2102203
3101204

Таблица поставщиков

🔑 supplier_idsupplier_name
201Поставщик 1
202Поставщик 2
203Поставщик 3
204Поставщик 4
Узнать правильный ответ

Таблица поставок находится в 4NF, потому что каждый поставщик может поставлять товары в несколько магазинов, и каждый товар может быть поставлен в несколько магазинов. Здесь нет многозначных зависимостей, так как каждая комбинация product_id, store_id, supplier_id уникальна. Другие таблицы, такие как таблицы товаров и поставщиков, по отдельности могут находиться не в 4NF (мы не можем это утверждать) а в 3NF, но принято считать, что база данных в целом соответствует 4NF, если хотя бы одна таблица удовлетворяет всем требованиям а другие не противоречат (не содержат аномалий данной формы).



Производство товаров

В этой системе описан процесс производства товаров. Производство каждого товара проходит через несколько этапов, и каждый этап может быть выполнен разными поставщиками.

Таблица этапов производства

🔑 product_id🔑 stage_id🔗 supplier_id
1101201
1102202
2101203
2103204
3102201

Таблица продуктов

🔑 product_idproduct_name
1Стол
2Стул
3Шкаф

Таблица этапов

🔑 stage_idstage_name
101Сборка
102Покраска
103Упаковка

Таблица поставщиков

🔑 supplier_idsupplier_name
201Поставщик 1
202Поставщик 2
203Поставщик 3
204Поставщик 4
Узнать правильный ответ

Таблица этапов производства находится в 5NF, потому что она разбита на три части, каждая из которых восстанавливает связи между продуктами, этапами и поставщиками.

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

В 5NF данные должны быть разложены таким образом, чтобы все многозначные зависимости были устранены, и никакая информация не была избыточно дублирована. Мы достигаем этого, разбивая сложные связи между тремя или более атрибутами на несколько таблиц. В результате каждая комбинация product_id, stage_id, supplier_id уникальна и не требует дублирования данных.

Остальные таблицы (продуктов, этапов и поставщиков) находятся как минимум в 3NF, однако вся база данных считается находящейся в 5NF, потому что таблица этапов производства соответствует этой нормальной форме.



Расписание работы сотрудников

Представлено расписание работы сотрудников с указанием периодов их работы и количества отработанных часов. Данные разделены по временным периодам и сотрудникам.

Таблица работы сотрудников (по периодам)

🔑 employee_id🔑 work_period
1[01-01-2024:05-01-2024]
1[06-01-2024:10-01-2024]
2[01-01-2024:05-01-2024]
3[03-01-2024:07-01-2024]

Таблица сотрудников

🔑 employee_idemployee_name
1Иван Иванов
2Сергей Сергеев
3John Smith

Таблица часов работы (по периодам)

🔑 employee_id🔑 work_periodhours_worked⚠️ min_hours⚠️ max_hours
1[01-01-2024:05-01-2024]403050
1[06-01-2024:10-01-2024]303050
2[01-01-2024:05-01-2024]403050
3[03-01-2024:07-01-2024]353050
Узнать правильный ответ

Таблицы находятся в 6NF, так как данные разбиты по каждому возможному атрибуту и используют временные маркеры для отображения периодов работы сотрудников. Каждая таблица хранит только один факт, что соответствует требованиям 6NF.

Добавлено доменное ограничение:

  • для каждого сотрудника в конкретный период должно быть отработано минимум 30 и максимум 50 часов.
  • зависимости управляются как ключами (employee_id, work_period), так и доменами (ограничения по количеству часов работы).

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



Регистрация на курсы

Система регистрации студентов на курсы. Каждый студент может зарегистрироваться на несколько курсов, и для каждого курса есть ограничения по количеству студентов.

Таблица регистрации студентов на курсы

🔑 student_id🔑 course_idenrollment_dateselected_courses⚠️ max_students
11012024-09-01230
21022024-09-02125
31032024-09-03120
11032024-09-04220

Таблица студентов

🔑 student_idstudent_nameselected_courses⚠️ max_courses
1Иван Иванов22
2Сергей Сергеев13
3John Smith13

Таблица курсов

🔑 course_idcourse_name⚠️ max_students
101Математика30
102Физика25
103Химия20
Узнать правильный ответ

Таблица регистрации студентов на курсы находится в DKNF, потому что все ограничения основаны на ключах и доменах.

  • Ограничение по ключам:
    • комбинация student_id и course_id уникальна для каждой записи.
  • Доменные ограничения:
    • Для каждого студента есть ограничение по количеству курсов, которые он может выбрать selected_courses <= max_courses.
    • Для каждого курса установлено максимальное количество студентов max_students.

Здесь нет зависимостей, которые противоречат ограничениям доменов. Все зависимости, включая количество курсов и количество студентов, контролируются как ключами, так и доменными правилами, что соответствует доменно-ключевой нормальной форме DKNF. Другие таблицы (студентов и курсов) находятся в 3NF, но вся база считается соответствующей DKNF, потому что таблица регистрации удовлетворяет требованиям DKNF.


Последнее обновление: 26.09.2025, 13:16
© Кафедра информационных технологий ЧУВО «ВШП», 2025. Версия: 0.9.2
Материалы доступны в соответствии с лицензией: