МДК.11.01 - QUIZ. Задания для самопроверки
В этом квизе представлены таблицы, каждая из которых находится в одной из нормальных форм базы данных: от ненормализованной формы (UNF
) до шестой нормальной формы (6NF
). Студентам предстоит проанализировать данные таблиц и определить, в какой нормальной форме они находятся. Обратите внимание, что в некоторых случаях отдельные таблицы могут находиться в более низких формах, однако если одна из таблиц удовлетворяет требованиям более высокой формы, принято считать, что вся база данных соответствует этой форме.
[!INFO]
Здесь и далее в примерах будут использованы следующие обозначения:
- 🔑 - Первичный ключ
- 🔗 - Внешний ключ
- ⚠️ - Набор значений ограничен
Список покупок
Представлены данные о покупках клиентов, где каждый клиент может купить несколько товаров. Эти данные в ненормализованной форме, поскольку несколько покупок клиента хранятся в одной строке.
customer_name | items_bought |
---|---|
Иван Иванов | Молоко, Хлеб |
Сергей Сергеев | Яйца, Сахар, Молоко |
John Smith | Bread, Milk, Eggs |
Иван Иванов | Сахар |
Узнать правильный ответ
Представленная таблица находится в UNF
, потому что у нас есть неатомарные значения в колонке items_bought
, где несколько товаров записаны в одной ячейке.
Проекты и задачи
Это система управления проектами, в которой каждый проект состоит из задач, назначенных разным сотрудникам. Таблица содержит данные о проекте, задачах и сотрудниках, отвечающих за их выполнение.
🔑 project_id | 🔑 task_id | task_name | assignee |
---|---|---|---|
1 | 101 | Создать макет | Иван Иванов |
1 | 102 | Разработать дизайн | Сергей Сергеев |
2 | 201 | Написать документацию | John Smith |
2 | 202 | Провести тестирование | Иван Иванов |
Узнать правильный ответ
Представленная таблица находится в 2NF
, потому что она удовлетворяет требованиям 1NF
и все неключевые атрибуты полностью зависят от первичного ключа (в данном случае ключ составной — project_id + task_id
).
Расписание занятий
Здесь представлено расписание занятий для студентов. В таблице хранятся данные о том, какие предметы студенты изучают в каждом классе.
🔗 class_id | student_name | subject |
---|---|---|
1 | Иван Иванов | Математика |
1 | Иван Иванов | Физика |
2 | Сергей Сергеев | Химия |
2 | Сергей Сергеев | Биология |
3 | John Smith | История |
3 | John Smith | English |
Узнать правильный ответ
Представленная таблица находится в 1NF
, так как все атрибуты содержат атомарные значения, и каждая запись уникальна.
Аренда автомобилей
Данные о системе аренды автомобилей, в которой хранится информация о датах аренды автомобилей клиентами. Каждая аренда связана с конкретным клиентом и автомобилем.
Таблица аренды
🔑 car_id | 🔑 rental_date | 🔗 customer_id |
---|---|---|
101 | 2024-09-01 | 201 |
102 | 2024-09-02 | 202 |
101 | 2024-09-03 | 203 |
Таблица клиентов
🔑 customer_id | customer_name |
---|---|
201 | Иван Иванов |
202 | Сергей Сергеев |
203 | John Smith |
Таблица автомобилей
🔑 car_id | car_model | license_plate |
---|---|---|
101 | Toyota Camry | AA123BB |
102 | Honda Civic | BB234CC |
Узнать правильный ответ
Представленные таблицы находятся в BCNF
, потому что в таблице аренды составной ключ car_id + rental_date
определяет все атрибуты, и нет транзитивных зависимостей. Две другие таблицы (клиентов и автомобилей) технически находятся в 3NF
, так как в них все неключевые атрибуты зависят только от ключей. Однако, поскольку таблица аренды находится в BCNF
, принято считать, что и вся база данных соответствует BCNF
.
Заказы и клиенты
Система заказов, где хранится информация о заказах клиентов. Таблица заказов связана с таблицей клиентов, которые делают эти заказы.
Таблица заказов
🔑 order_id | 🔗 customer_id | order_date |
---|---|---|
1 | 101 | 2024-09-01 |
2 | 102 | 2024-09-02 |
3 | 103 | 2024-09-03 |
Таблица клиентов
🔑 customer_id | customer_name | customer_email |
---|---|---|
101 | Иван Иванов | ivan@example.com |
102 | Сергей Сергеев | sergey@example.com |
103 | John Smith | john@example.com |
Узнать правильный ответ
Представленные таблицы находятся в 3NF
, потому что они удовлетворяют требованиям 2NF
, и нет транзитивных зависимостей. Каждая таблица хранит только те данные, которые напрямую зависят от её первичного ключа. В таблице заказов все неключевые атрибуты зависят только от order_id
, а в таблице клиентов — от customer_id
.
Товары и поставщики
Эта система управляет поставками товаров в магазины. Один и тот же товар может поставляться в разные магазины от разных поставщиков.
Таблица товаров
🔑 product_id | product_name |
---|---|
1 | Хлеб |
2 | Молоко |
3 | Яйца |
Таблица поставок
🔑 product_id | 🔑 store_id | 🔗 supplier_id |
---|---|---|
1 | 101 | 201 |
1 | 102 | 202 |
2 | 101 | 201 |
2 | 102 | 203 |
3 | 101 | 204 |
Таблица поставщиков
🔑 supplier_id | supplier_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 |
---|---|---|
1 | 101 | 201 |
1 | 102 | 202 |
2 | 101 | 203 |
2 | 103 | 204 |
3 | 102 | 201 |
Таблица продуктов
🔑 product_id | product_name |
---|---|
1 | Стол |
2 | Стул |
3 | Шкаф |
Таблица этапов
🔑 stage_id | stage_name |
---|---|
101 | Сборка |
102 | Покраска |
103 | Упаковка |
Таблица поставщиков
🔑 supplier_id | supplier_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_id | employee_name |
---|---|
1 | Иван Иванов |
2 | Сергей Сергеев |
3 | John Smith |
Таблица часов работы (по периодам)
🔑 employee_id | 🔑 work_period | hours_worked | ⚠️ min_hours | ⚠️ max_hours |
---|---|---|---|---|
1 | [01-01-2024:05-01-2024] | 40 | 30 | 50 |
1 | [06-01-2024:10-01-2024] | 30 | 30 | 50 |
2 | [01-01-2024:05-01-2024] | 40 | 30 | 50 |
3 | [03-01-2024:07-01-2024] | 35 | 30 | 50 |
Узнать правильный ответ
Таблицы находятся в 6NF
, так как данные разбиты по каждому возможному атрибуту и используют временные маркеры для отображения периодов работы сотрудников. Каждая таблица хранит только один факт, что соответствует требованиям 6NF
.
Добавлено доменное ограничение:
- для каждого сотрудника в конкретный период должно быть отработано минимум
30
и максимум50
часов. - зависимости управляются как ключами (
employee_id, work_period
), так и доменами (ограничения по количеству часов работы).
Таким образом, каждая таблица соответствует 6NF
, а данные могут быть изменены независимо без нарушения других зависимостей. Таблицы сотрудников и расписания работы по отдельности находятся в 5NF
, но база данных считается соответствующей 6NF
благодаря разделению данных и использованию доменных ограничений.
Регистрация на курсы
Система регистрации студентов на курсы. Каждый студент может зарегистрироваться на несколько курсов, и для каждого курса есть ограничения по количеству студентов.
Таблица регистрации студентов на курсы
🔑 student_id | 🔑 course_id | enrollment_date | selected_courses | ⚠️ max_students |
---|---|---|---|---|
1 | 101 | 2024-09-01 | 2 | 30 |
2 | 102 | 2024-09-02 | 1 | 25 |
3 | 103 | 2024-09-03 | 1 | 20 |
1 | 103 | 2024-09-04 | 2 | 20 |
Таблица студентов
🔑 student_id | student_name | selected_courses | ⚠️ max_courses |
---|---|---|---|
1 | Иван Иванов | 2 | 2 |
2 | Сергей Сергеев | 1 | 3 |
3 | John Smith | 1 | 3 |
Таблица курсов
🔑 course_id | course_name | ⚠️ max_students |
---|---|---|
101 | Математика | 30 |
102 | Физика | 25 |
103 | Химия | 20 |
Узнать правильный ответ
Таблица регистрации студентов на курсы находится в DKNF
, потому что все ограничения основаны на ключах и доменах.
- Ограничение по ключам:
- комбинация
student_id
иcourse_id
уникальна для каждой записи.
- комбинация
- Доменные ограничения:
- Для каждого студента есть ограничение по количеству курсов, которые он может выбрать
selected_courses <= max_courses
. - Для каждого курса установлено максимальное количество студентов
max_students
.
- Для каждого студента есть ограничение по количеству курсов, которые он может выбрать
Здесь нет зависимостей, которые противоречат ограничениям доменов. Все зависимости, включая количество курсов и количество студентов, контролируются как ключами, так и доменными правилами, что соответствует доменно-ключевой нормальной форме DKNF
. Другие таблицы (студентов и курсов) находятся в 3NF
, но вся база считается соответствующей DKNF
, потому что таблица регистрации удовлетворяет требованиям DKNF
.