МДК.11.01 - ТЕСТ. Задания на определение нормальных форм БД
В этом тесте представлены наборы данных в виде таблиц, каждая из которых находится в одной из нормальных форм базы данных: от сырых данных (RAW DATA
) и ненормализованной формы (UNF
) до шестой нормальной формы (6NF
). Проанализируйте данные таблиц и определите, в какой нормальной форме они находятся. Обратите внимание, что в некоторых случаях отдельные таблицы могут находиться в более низких формах, однако если одна из таблиц удовлетворяет требованиям более высокой формы, будем считать, что вся база данных соответствует этой форме.
Заметка
В рамках данного тестирования каждое задание посвящено отдельной нормальной форме БД — повторения форм в вопросах исключены.
Критерии оценки:
Верных ответов | Оценка |
---|---|
> 8 | «отлично» |
7-8 | «хорошо» |
5-6 | «удовлетворительно» |
< 5 | «неудовлетворительно» |
Примечание
В бланке ответов необходимо не только верно указать нормальную форму, но и обосновать по каким критериям вы выбрали именно эту. При проверке ответы без объяснения не засчитываются.
Список заданий:
Инфо
Здесь и далее в примерах будут использованы следующие обозначения:
- 🔑 - Первичный ключ
- 🔗 - Внешний ключ
- ⚠️ - Набор значений ограничен
1. Ферма: учёт надоя и рациона по периодам
В хозяйстве ведётся помесячный учёт по каждой корове. Данные разбиты на отдельные факты: сам список коров, надой и тип рациона за период.
Доменные ограничения на уровне СУБД:
avg_daily_liters
— число от 0 до 60;feed_type
— значение из допустимого перечня значений.
Таблица коров
🔑 🔗 cow_id | cow_name |
---|---|
1 | Зорька |
2 | Ночка |
3 | Белянка |
Таблица надоя
🔑 🔗 cow_id | 🔑 milk_period | ⚠️ avg_daily_liters |
---|---|---|
1 | [2025-01-01:2025-01-31] | 18 |
1 | [2025-02-01:2025-02-28] | 16 |
2 | [2025-01-01:2025-01-31] | 14 |
3 | [2025-01-15:2025-02-14] | 17 |
Таблица рациона
🔑 🔗 cow_id | 🔑 milk_period | ⚠️ feed_type |
---|---|---|
1 | [2025-01-01:2025-01-31] | силос + комбикорм |
1 | [2025-02-01:2025-02-28] | сено + комбикорм |
2 | [2025-01-01:2025-01-31] | сено |
3 | [2025-01-15:2025-02-14] | силос |
Вопрос: В какой нормальной форме находятся эти данные?
2. Учёт посетителей в фитнес-клубе
Перед вами таблица регистрации клиентов фитнес-клуба.
Таблица посещений
🔑 visitor_id | full_name | visits | services_used | trainer |
---|---|---|---|---|
1 | Иванов Иван | 2024-08-01, 2024-08-03 | кардио, силовая тренировка | Смирнов А. |
2 | Петрова Мария | 2024-08-02 | йога, пилатес | Сидорова Е. |
3 | John Smith | 2024-08-01, 2024-08-04, 2024-08-05 | плавание, массаж | Brown T. |
4 | Ким Алексей | 2024-08-01 | кардио | Смирнов А. |
Вопрос: В какой нормальной форме находятся эти данные?
3. Учёт приёмов в ветеринарной клинике
Это таблица учёта приёмов животных у ветеринаров. Каждый приём уникален по сочетанию ветврача и животного.
Таблица приёмов
🔑 🔗 vet_id | 🔑 🔗 appointment_id | vet_name | specialization | client_name | pet_name | service |
---|---|---|---|---|---|---|
1 | 101 | Иванова А.А. | терапевт | Петров С. | Барсик | Вакцинация |
1 | 102 | Иванова А.А. | терапевт | Смирнова Н. | Рекс | Осмотр |
2 | 201 | Кузнецов Д.Д. | хирург | Иванова Т. | Шарик | Лечение уха |
2 | 202 | Кузнецов Д.Д. | хирург | Иванова Т. | Бим | Вакцинация |
Вопрос: В какой нормальной форме находятся эти данные?
4. Учёт обращений в мастерскую
Перед вами фрагменты данных, собранных в столярной мастерской из разных источников: сообщений мессенджеров, заметок мастеров и фотографий заказов. Формат записей, порядок и формат данных различаются.
A | B | C | D | |
---|---|---|---|---|
1 | client=Иванов И.И., заказ: стул×4, цвет=«ясень»; дата=2024/08/01 | фото=chair_1.jpg | ||
2 | заказ №102, клиент: Петров С.А., изделие: шкаф (3 секции) | контакт: +7-900-555-22-11 | срок: 10 дней | |
3 | id:103 | CUSTOMER: «John Smith» | items: [table×1, shelf×2]; payment=card | |
4 | запись устная: Мария просила «полку как в прошлый раз» | |||
5 | заказ=104; client="Сергей"; details={material: oak, finish: matte} | total=17 500₽ |
Вопрос: В какой нормальной форме находятся эти данные?
5. Переговорные в коворкинге
Система бронирования переговорных комнат. Каждая запись брони уникальна по сочетанию комнаты и времени начала слота. Подразумевается что каждый временной слот бронирования комнаты равен 1 часу.
Таблица бронирований
🔑 🔗 room_id | 🔑 slot_start | 🔗 customer_id |
---|---|---|
11 | 2024-10-01 10:00:00 | 301 |
11 | 2024-10-01 11:00:00 | 302 |
12 | 2024-10-01 10:00:00 | 303 |
Таблица комнат
🔑 room_id | room_name |
---|---|
11 | Альфа |
12 | Браво |
Таблица клиентов
🔑 customer_id | customer_name |
---|---|
301 | Иван Иванов |
302 | Мария Петрова |
303 | John Smith |
Вопрос: В какой нормальной форме находятся эти данные?
6. Книжные издания: язык, формат и издательство
У книги существуют конкретные издания — тройки «язык-формат-издательство». Не все пары совместимы между собой: одно издательство печатает книгу на русском только в твёрдом переплёте, а на английском — у другого издательства и только в мягком.
Таблица изданий
🔑 🔗 book_id | 🔑 language_code | 🔑 🔗 format_id | 🔑 🔗 publisher_id |
---|---|---|---|
1 | ru | 1 | 201 |
1 | en | 2 | 202 |
2 | en | 2 | 201 |
Таблица книг
🔑 book_id | title |
---|---|
1 | Алгоритмы и структуры |
2 | Базы данных |
Таблица форматов
🔑 format_id | format_name |
---|---|
1 | Твёрдый переплёт |
2 | Мягкий переплёт |
Таблица издательств
🔑 publisher_id | publisher_name |
---|---|
201 | Издательство А |
202 | Издательство B |
Вопрос: В какой нормальной форме находятся эти данные?
7. Фонд библиотеки: филиалы и языки
Книга может находиться в нескольких филиалах и одновременно существовать на нескольких языках. Наличие книги в филиале не зависит от того, на каких языках есть издания, и наоборот.
Таблица наличия
🔑 🔗 book_id | 🔑 🔗 branch_id | 🔑 language_code |
---|---|---|
1 | 101 | ru |
1 | 102 | en |
1 | 103 | ru |
2 | 101 | en |
Таблица книг
🔑 book_id | title |
---|---|
1 | Алгоритмы и структуры |
2 | Базы данных |
Таблица филиалов
🔑 branch_id | branch_name |
---|---|
101 | Центральный |
102 | Северный |
103 | Южный |
Вопрос: В какой нормальной форме находятся эти данные?
8. Онлайн-магазин одежды
Система хранит заказы и клиентов. Данные разделены так, чтобы избежать транзитивных зависимостей.
Таблица заказов
🔑 order_id | 🔗 customer_id | order_date |
---|---|---|
1 | 101 | 2024-09-01 |
2 | 102 | 2024-09-02 |
3 | 101 | 2024-09-03 |
4 | 103 | 2024-09-04 |
Таблица клиентов
🔑 customer_id | customer_name | city |
---|---|---|
101 | Анна Смирнова | Москва |
102 | Иван Петров | Санкт-Петербург |
103 | Ольга Иванова | Казань |
Вопрос: В какой нормальной форме находятся эти данные?
9. Учёт лабораторных анализов
В медицинской лаборатории ведётся учёт результатов анализов.
Каждая таблица имеет только допустимые значения в своих доменах, а все ограничения реализованы на уровне СУБД. Каждый анализ должен соответствовать конкретному типу и иметь значение, которое допустимо только в рамках этого типа анализа (например, "группа крови" может быть только A, B, AB, O, а "гемоглобин" и "холестерин" — только числовое значение в определенном диапазона).
Таблица типов анализов
🔑 analysis_type_id | analysis_type_name | ⚠️ allowed_values |
---|---|---|
1 | Группа крови | Только 'A', 'B', 'AB' или 'O' |
2 | Гемоглобин | Только число в диапазоне от 80 до 180 |
3 | Холестерин | Только число в диапазоне от 100 до 300 |
Таблица пациентов
🔑 patient_id | patient_name |
---|---|
101 | Иванов И.И. |
102 | Петров П.П. |
103 | Смирнов С.С. |
104 | Кузнецов К.К. |
Таблица анализов
🔑 analysis_id | 🔗 patient_id | 🔗 analysis_type_id | ⚠️ value |
---|---|---|---|
1 | 101 | 1 | 'A' |
2 | 102 | 1 | 'AB' |
3 | 103 | 2 | 136 |
4 | 104 | 2 | 145 |
5 | 102 | 3 | 220 |
Вопрос: В какой нормальной форме находятся эти данные?
10. Заказы в кафе
В кафе ведётся журнал заказов, где все блюда и напитки записываются в одну ячейку, если их заказал один клиент.
Таблица заказов (сырые данные)
Клиент | Дата | Заказанные блюда и напитки | Сумма |
---|---|---|---|
Иванов И.И. | 2025-10-01 | Борщ, Котлета, Чай | 450 |
Петрова А.А. | 2025-10-01 | Салат, Суп, Компот | 390 |
Смирнов С.С. | 2025-10-02 | Пицца, Кофе | 520 |
Вопрос: В какой нормальной форме находятся эти данные?