Разработчик баз данных

Курс повышения квалификации: "Разработчик баз данных. Начальный уровень (Junior)"
Целевая аудитория:
- Начинающие специалисты в IT, желающие освоить проектирование и разработку баз данных.
- Студенты технических вузов (информатика, прикладная математика).
- Профессионалы, планирующие сменить сферу деятельности на Data Engineering или Database Administration.
- Основные требования: базовые навыки работы с компьютером, понимание алгоритмов и структур данных (на уровне начальной подготовки).
Формат обучения:
- Онлайн-курс с элементами смешанного обучения:
- Видеолекции (теория).
- Практические задания в среде SQL-клиентов (MySQL, PostgreSQL).
- Живые вебинары с разбором кейсов.
- Доступ к учебным материалам 24/7.
- Поддержка кураторов через чат и форум.
- Длительность: 3 месяца (4 академических часа в неделю).
- Итоговая аттестация: защита проекта + тест.
Итоговый проект:
Разработка базы данных для интернет-магазина
- Этапы:
- Сбор требований и анализ данных.
- Проектирование ER-диаграммы (сущности: пользователи, товары, заказы, платежи).
- Реализация в СУБД (MySQL/PostgreSQL).
- Написание сложных SQL-запросов (отчеты, аналитика).
- Оптимизация производительности (индексы, нормализация).
- Презентация проекта с демонстрацией функционала.
Модуль 1: Введение в базы данных
- Типы БД: реляционные, NoSQL, графовые.
- Реляционная модель: таблицы, первичные/внешние ключи.
- Основы SQL: SELECT, INSERT, UPDATE, DELETE.
Модуль 2: SQL-запросы и работа с данными
- Сложные JOINы, агрегатные функции, GROUP BY.
- Подзапросы, CTE, оконные функции.
- Практика: анализ данных из CSV-файлов.
Модуль 3: Проектирование БД
- ER-диаграммы, нормализация (1NF, 2NF, 3NF).
- Кейс: проектирование БД для сервиса доставки еды.
Модуль 4: Администрирование и оптимизация
- Установка и настройка СУБД.
- Индексы, анализ планов запросов.
- Резервное копирование и безопасность.
Модуль 5: Итоговый проект
- Разработка и защита проекта (индивидуально или в команде).
По окончании обучения студент должен знать:
- Основы реляционных и NoSQL-баз данных.
- Принципы работы с SQL (синтаксис, операторы, транзакции).
- Методы нормализации и проектирования ER-диаграмм.
- Инструменты администрирования: резервное копирование, восстановление данных, права доступа.
- Основы оптимизации запросов и индексирования.
- Стандарты документирования баз данных.
По окончании обучения студент должен уметь:
- Проектировать реляционные базы данных (ER-модели, нормализация до 3NF).
- Писать SQL-запросы любой сложности (JOIN, подзапросы, агрегатные функции).
- Работать с СУБД (MySQL, PostgreSQL): создавать/изменять таблицы, управлять пользователями.
- Оптимизировать запросы и структуру БД для повышения производительности.
- Использовать CASE-инструменты (например, MySQL Workbench) для визуализации моделей.
- Выполнять резервное копирование и восстановление данных.
Экзаменационные билеты: Разработчик баз данных (начальный уровень)
Билет 1
Теория:
- Что такое реляционная база данных?
- Для чего используется оператор
JOIN
в SQL?
Практика:
Напишите SQL-запрос для создания таблицы "Клиенты" с полями: id
(первичный ключ), имя
, email
(уникальный), телефон
.
Ответы:
- Реляционная БД — это база данных, организованная в виде таблиц (отношений) с заданными связями между ними.
JOIN
объединяет данные из двух или более таблиц на основе связанных столбцов.- Запрос для создания таблицы: создайте таблицу "Клиенты" с полями
id
как первичный ключ,имя
типа VARCHAR(50),email
типа VARCHAR(100) с ограничением уникальности ителефон
типа VARCHAR(20).
Билет 2
Теория:
- Что такое первичный ключ?
- В чем разница между
INNER JOIN
иLEFT JOIN
?
Практика:
Добавьте в таблицу "Заказы" поле дата_заказа
типа DATE
.
Ответы:
- Первичный ключ — уникальный идентификатор записи в таблице, не допускающий повторяющихся или NULL-значений.
INNER JOIN
возвращает только совпадающие строки,LEFT JOIN
— все строки левой таблицы и совпадающие из правой.- Используйте команду ALTER TABLE для добавления нового поля
дата_заказа
типа DATE в таблицу "Заказы".
Билет 3
Теория:
- Что такое нормализация?
- Как работает оператор
GROUP BY
?
Практика:
Напишите запрос для подсчета количества клиентов в таблице "Клиенты" .
Ответы:
- Нормализация — процесс устранения избыточности данных путем разделения таблиц.
GROUP BY
группирует строки с одинаковыми значениями для агрегации (например,COUNT
,SUM
).- Используйте функцию COUNT(*) для подсчета всех записей в таблице "Клиенты".
Билет 4
Теория:
- Что такое внешний ключ?
- Для чего используется оператор
HAVING
?
Практика:
Удалите таблицу "Тестовая" .
Ответы:
- Внешний ключ — ссылка на первичный ключ другой таблицы, обеспечивающая целостность связей.
HAVING
фильтрует группы после агрегации (аналогWHERE
дляGROUP BY
).- Используйте команду DROP TABLE для удаления таблицы "Тестовая".
Билет 5
Теория:
- Что такое индекс в БД?
- В чем разница между
WHERE
иHAVING
?
Практика:
Обновите поле email
на "new@example.com " для клиента с id = 5
.
Ответы:
- Индекс — структура данных для ускорения поиска и сортировки.
WHERE
фильтрует строки до агрегации,HAVING
— после.- Используйте команду UPDATE для изменения значения поля
email
на "new@example.com " для записи сid = 5
в таблице "Клиенты".
Билет 6
Теория:
- Что такое транзакция?
- Как работает оператор
UNION
?
Практика:
Создайте индекс для поля фамилия
в таблице "Сотрудники" .
Ответы:
- Транзакция — набор операций, которые либо все выполняются, либо откатываются (ACID).
UNION
объединяет результаты двух запросов, удаляя дубликаты.- Используйте команду CREATE INDEX для создания индекса по полю
фамилия
в таблице "Сотрудники".
Билет 7
Теория:
- Что такое ACID в контексте БД?
- Для чего используется
CASE
в SQL?
Практика:
Напишите запрос для выбора всех клиентов, у которых email
содержит "gmail.com".
Ответы:
- ACID — свойства транзакций: атомарность, согласованность, изолированность, долговечность.
CASE
позволяет выполнять условные операции в SQL-запросах.- Используйте оператор LIKE для поиска значений в поле
email
, содержащих "gmail.com", в таблице "Клиенты".
Билет 8
Теория:
- Что такое денормализация?
- В чем разница между
CHAR
иVARCHAR
?
Практика:
Удалите все заказы старше 1 января 2020 года из таблицы "Заказы" .
Ответы:
- Денормализация — добавление избыточности для повышения производительности чтения.
CHAR
фиксированной длины,VARCHAR
— переменной.- Используйте команду DELETE для удаления записей из таблицы "Заказы", где значение поля
дата_заказа
меньше '2020-01-01'.
Билет 9
Теория:
- Что такое ER-диаграмма?
- Для чего используется
LIMIT
в SQL?
Практика:
Создайте таблицу "Товары" с полями: id
, название
, цена
, категория
.
Ответы:
- ER-диаграмма визуализирует структуру БД: сущности, атрибуты, связи.
LIMIT
ограничивает количество возвращаемых строк.- Создайте таблицу "Товары" с полями:
id
как первичный ключ,название
типа VARCHAR(100),цена
типа DECIMAL(10,2) икатегория
типа VARCHAR(50).
Билет 10
Теория:
- Что такое триггер в БД?
- Как работает оператор
DISTINCT
?
Практика:
Напишите запрос для подсчета общей суммы всех заказов в таблице "Заказы" .
Ответы:
- Триггер — процедура, автоматически выполняемая при определенных событиях (INSERT, UPDATE).
DISTINCT
удаляет дубликаты из результатов запроса.- Используйте функцию SUM для подсчета общей суммы значений в поле
сумма
таблицы "Заказы".
Билет 11
Теория:
- Что такое база данных NoSQL?
- Для чего используется оператор
ORDER BY
?
Практика:
Напишите запрос для выбора всех клиентов из таблицы "Клиенты" , упорядоченных по алфавиту по полю имя
.
Ответы:
- NoSQL — это не реляционная база данных, предназначенная для работы с большими объемами неструктурированных данных.
ORDER BY
сортирует строки в результате запроса по указанному столбцу.- Используйте команду SELECT с ORDER BY для выбора всех записей из таблицы "Клиенты", отсортированных по полю
имя
в алфавитном порядке.
Билет 12
Теория:
- Что такое первая нормальная форма (1NF)?
- В чем разница между
DELETE
иTRUNCATE
?
Практика:
Удалите все записи из таблицы "Тестовая" .
Ответы:
- Первая нормальная форма требует, чтобы значения всех столбцов были атомарными (неделимыми).
DELETE
удаляет записи построчно, аTRUNCATE
удаляет все данные сразу, очищая таблицу полностью.- Используйте команду TRUNCATE TABLE для удаления всех записей из таблицы "Тестовая".
Билет 13
Теория:
- Что такое вторая нормальная форма (2NF)?
- Для чего используется оператор
IN
?
Практика:
Напишите запрос для выбора всех заказов из таблицы "Заказы" , где id_клиента
равен 1, 3 или 5.
Ответы:
- Вторая нормальная форма требует, чтобы таблица была в 1NF и все неключевые атрибуты зависели от всего первичного ключа.
IN
проверяет, соответствует ли значение одному из значений в списке.- Используйте команду SELECT с условием IN для выбора заказов, где
id_клиента
равен 1, 3 или 5.
Билет 14
Теория:
- Что такое третья нормальная форма (3NF)?
- Как работает оператор
BETWEEN
?
Практика:
Напишите запрос для выбора всех товаров из таблицы "Товары" , цена которых находится в диапазоне от 100 до 500.
Ответы:
- Третья нормальная форма требует, чтобы таблица была в 2NF и все неключевые атрибуты зависели только от первичного ключа.
BETWEEN
выбирает значения в заданном диапазоне, включая границы.- Используйте команду SELECT с условием BETWEEN для выбора товаров, где цена находится в диапазоне от 100 до 500.
Билет 15
Теория:
- Что такое хранимая процедура?
- Для чего используется оператор
UNION ALL
?
Практика:
Объедините результаты двух запросов: один выбирает всех клиентов с id > 10
, второй — всех клиентов с email
содержащим "example.com".
Ответы:
- Хранимая процедура — это предварительно скомпилированный набор SQL-команд, который можно вызывать для выполнения определенной задачи.
UNION ALL
объединяет результаты двух запросов, включая дубликаты.- Используйте UNION ALL для объединения результатов двух запросов: первый выбирает клиентов с
id > 10
, второй — сemail
содержащим "example.com".
Билет 16
Теория:
- Что такое представление (VIEW) в SQL?
- В чем разница между
COUNT(*)
иCOUNT(столбец)
?
Практика:
Создайте представление, которое показывает всех клиентов с email
содержащим "test.com".
Ответы:
- Представление — это виртуальная таблица, основанная на результатах SQL-запроса.
COUNT(*)
считает все строки, включая NULL, аCOUNT(столбец)
считает только непустые значения в указанном столбце.- Используйте команду CREATE VIEW для создания представления, которое выбирает клиентов с
email
содержащим "test.com".
Билет 17
Теория:
- Что такое транзакционная целостность?
- Для чего используется оператор
EXISTS
?
Практика:
Напишите запрос для выбора всех клиентов из таблицы "Клиенты" , у которых есть хотя бы один заказ в таблице "Заказы" .
Ответы:
- Транзакционная целостность — это свойство БД, гарантирующее, что транзакции выполняются полностью или не выполняются вообще.
EXISTS
проверяет, существует ли хотя бы одна строка, удовлетворяющая условию.- Используйте команду SELECT с EXISTS для выбора клиентов, у которых есть хотя бы один заказ в таблице "Заказы".
Билет 18
Теория:
- Что такое индекс покрытия?
- В чем разница между
INNER JOIN
иCROSS JOIN
?
Практика:
Напишите запрос для выбора всех возможных комбинаций товаров и категорий из таблиц "Товары" и "Категории" .
Ответы:
- Индекс покрытия содержит все необходимые для запроса данные, позволяя избежать чтения самой таблицы.
INNER JOIN
объединяет таблицы по условию, аCROSS JOIN
создает декартово произведение (все возможные комбинации).- Используйте CROSS JOIN для выбора всех комбинаций товаров и категорий из таблиц "Товары" и "Категории".
Билет 19
Теория:
- Что такое оконные функции в SQL?
- Для чего используется оператор
OVER
?
Практика:
Напишите запрос для подсчета общей суммы заказов для каждого клиента с использованием оконной функции.
Ответы:
- Оконные функции выполняют вычисления над набором строк, связанных с текущей строкой, без группировки данных.
OVER
определяет окно (набор строк), к которому применяется оконная функция.- Используйте оконную функцию SUM с OVER для подсчета общей суммы заказов для каждого клиента.
Билет 20
Теория:
- Что такое партиционирование таблиц?
- Для чего используется оператор
WITH
(CTE)?
Практика:
Напишите запрос с использованием CTE для выбора всех клиентов, у которых общая сумма заказов превышает 1000.
Ответы:
- Партиционирование таблиц — это разделение таблицы на части для улучшения производительности запросов.
WITH
(CTE) создает временный набор данных, который можно использовать в основном запросе.- Используйте CTE для расчета общей суммы заказов по каждому клиенту и выберите тех, у кого сумма превышает 1000.
Билет 21
Теория:
- Что такое денормализация и когда она применяется?
- Для чего используется оператор
OFFSET
?
Практика:
Напишите запрос для выбора первых 10 записей из таблицы "Клиенты" , пропустив первые 5 строк.
Ответы:
- Денормализация — это процесс добавления избыточности в БД для повышения производительности чтения за счет усложнения записи.
OFFSET
пропускает указанное количество строк в результате запроса.- Используйте команду SELECT с LIMIT и OFFSET для выбора первых 10 записей, пропустив первые 5 строк.
Билет 22
Теория:
- Что такое индексированное представление?
- В чем разница между
UNION
иUNION ALL
?
Практика:
Объедините данные из двух таблиц: "Клиенты" и "Сотрудники" , исключив дубликаты.
Ответы:
- Индексированное представление — это материализованное представление, которое хранит результаты выполнения запроса физически.
UNION
удаляет дубликаты, аUNION ALL
включает их.- Используйте UNION для объединения данных из таблиц "Клиенты" и "Сотрудники", исключив дубликаты.
Билет 23
Теория:
- Что такое полнотекстовый поиск в SQL?
- Для чего используется оператор
LIKE
?
Практика:
Напишите запрос для выбора всех товаров из таблицы "Товары" , где название содержит слово "ноутбук".
Ответы:
- Полнотекстовый поиск позволяет находить текстовые данные по ключевым словам или фразам с учетом релевантности.
LIKE
используется для поиска строк, соответствующих шаблону.- Используйте команду SELECT с условием LIKE для выбора товаров, где название содержит слово "ноутбук".
Билет 24
Теория:
- Что такое каскадное удаление (CASCADE)?
- В чем разница между
NULL
и пустой строкой?
Практика:
Добавьте внешний ключ в таблицу "Заказы" , связывающий её с таблицей "Клиенты" , с каскадным удалением.
Ответы:
- Каскадное удаление автоматически удаляет связанные записи при удалении родительской записи.
NULL
означает отсутствие значения, а пустая строка — это строка нулевой длины.- Используйте команду ALTER TABLE с FOREIGN KEY и CASCADE для добавления внешнего ключа с каскадным удалением.
Билет 25
Теория:
- Что такое транзакционный журнал?
- Для чего используется оператор
COALESCE
?
Практика:
Напишите запрос, который заменяет NULL-значения в поле email
на строку "no_email@example.com ".
Ответы:
- Транзакционный журнал фиксирует все изменения в БД для восстановления данных в случае сбоя.
COALESCE
возвращает первое не-NULL значение из списка.- Используйте функцию COALESCE для замены NULL-значений в поле
email
на "no_email@example.com ".
Билет 26
Теория:
- Что такое уникальный индекс?
- В чем разница между
INSERT
иUPDATE
?
Практика:
Добавьте новую запись в таблицу "Клиенты" : id = 10
, имя = "Иван"
, email = "ivan@example.com"
.
Ответы:
- Уникальный индекс гарантирует, что значения в столбце будут уникальными.
INSERT
добавляет новые записи, аUPDATE
изменяет существующие.- Используйте команду INSERT для добавления новой записи в таблицу "Клиенты".
Билет 27
Теория:
- Что такое база данных OLAP?
- Для чего используется оператор
INTERSECT
?
Практика:
Найдите общие записи в таблицах "Клиенты" и "Сотрудники" по полю email
.
Ответы:
- OLAP — это база данных, оптимизированная для аналитических запросов и многомерного анализа данных.
INTERSECT
возвращает строки, которые присутствуют в обоих запросах.- Используйте INTERSECT для выбора общих записей по полю
email
из таблиц "Клиенты" и "Сотрудники".
Билет 28
Теория:
- Что такое временная таблица?
- В чем разница между
PRIMARY KEY
иUNIQUE
?
Практика:
Создайте временную таблицу "Временные_клиенты" , содержащую поля id
, имя
, email
.
Ответы:
- Временная таблица существует только в течение сессии и доступна только создавшему её пользователю.
PRIMARY KEY
уникален и не допускает NULL, аUNIQUE
допускает одно NULL-значение.- Используйте команду CREATE TEMPORARY TABLE для создания временной таблицы "Временные_клиенты".
Билет 29
Теория:
- Что такое партиция RANGE в SQL?
- Для чего используется оператор
ROW_NUMBER
?
Практика:
Пронумеруйте записи в таблице "Клиенты" по алфавиту по полю имя
.
Ответы:
- RANGE-партиция разделяет данные на основе диапазона значений.
ROW_NUMBER
присваивает уникальный номер каждой строке в результате запроса.- Используйте ROW_NUMBER с OVER для нумерации записей в таблице "Клиенты" по полю
имя
.
Билет 30
Теория:
- Что такое база данных графового типа?
- Для чего используется оператор
MERGE
?
Практика:
Обновите поле статус
на "Активный" для клиента с id = 7
, если он существует, или создайте новую запись.
Ответы:
- Графовая база данных хранит данные в виде узлов и связей между ними.
MERGE
выполняет операцию вставки или обновления в зависимости от наличия записи.- Используйте команду MERGE для обновления или создания записи в таблице "Клиенты".
Билет 31
Теория:
- Что такое база данных документо-ориентированного типа?
- Для чего используется оператор
PIVOT
?
Практика:
Преобразуйте строки таблицы "Продажи" в столбцы, группируя данные по месяцам.
Ответы:
- Документо-ориентированная БД хранит данные в виде документов (например, JSON или BSON), что удобно для работы с неструктурированными данными.
PIVOT
преобразует строки в столбцы для создания сводных таблиц.- Используйте PIVOT для преобразования строк таблицы "Продажи" в столбцы, группируя данные по месяцам.
Билет 32
Теория:
- Что такое база данных колоночного типа?
- В чем разница между
ROLLBACK
иCOMMIT
?
Практика:
Начните транзакцию, обновите поле статус
на "Завершен" для заказа с id = 5
, затем откатите изменения.
Ответы:
- Колоночная БД хранит данные по столбцам, что ускоряет аналитические запросы.
COMMIT
фиксирует изменения, аROLLBACK
отменяет их.- Начните транзакцию, выполните UPDATE для обновления статуса, затем используйте ROLLBACK для отмены изменений.
Билет 33
Теория:
- Что такое индекс B-Tree?
- Для чего используется оператор
FETCH FIRST
?
Практика:
Выберите первые 5 записей из таблицы "Клиенты" , упорядоченных по полю имя
.
Ответы:
- B-Tree — это структура данных для индексов, обеспечивающая быстрый поиск, вставку и удаление данных.
FETCH FIRST
ограничивает количество возвращаемых строк.- Используйте команду SELECT с ORDER BY и FETCH FIRST для выбора первых 5 записей из таблицы "Клиенты".
Билет 34
Теория:
- Что такое база данных временного ряда?
- В чем разница между
INNER JOIN
иNATURAL JOIN
?
Практика:
Выполните объединение таблиц "Клиенты" и "Заказы" с использованием NATURAL JOIN.
Ответы:
- Временной ряд — это БД, оптимизированная для хранения и анализа данных, связанных со временем (например, метрики, логи).
INNER JOIN
требует явного указания условий, аNATURAL JOIN
автоматически объединяет таблицы по совпадающим столбцам.- Используйте NATURAL JOIN для объединения таблиц "Клиенты" и "Заказы".
Билет 35
Теория:
- Что такое шардирование базы данных?
- Для чего используется оператор
PARTITION BY
?
Практика:
Разделите данные таблицы "Заказы" на партиции по году совершения заказа.
Ответы:
- Шардирование — это разделение данных на независимые фрагменты (шарды) для распределения нагрузки.
PARTITION BY
определяет группы строк для применения оконных функций.- Используйте PARTITION BY для разделения данных таблицы "Заказы" по году совершения заказа.
Билет 36
Теория:
- Что такое база данных объектно-реляционного типа?
- В чем разница между
TRUNCATE
иDELETE
?
Практика:
Удалите все записи из таблицы "Тестовая" с использованием TRUNCATE.
Ответы:
- Объектно-реляционная БД поддерживает работу с объектами, такими как классы и методы, в сочетании с реляционной моделью.
TRUNCATE
удаляет все данные сразу, аDELETE
удаляет построчно.- Используйте TRUNCATE TABLE для удаления всех записей из таблицы "Тестовая".
Билет 37
Теория:
- Что такое индекс Hash?
- Для чего используется оператор
CAST
?
Практика:
Преобразуйте поле цена
из таблицы "Товары" в тип INTEGER.
Ответы:
- Hash-индекс использует хэш-функцию для быстрого поиска данных, но работает только с равенством.
CAST
преобразует данные из одного типа в другой.- Используйте CAST для преобразования поля
цена
в тип INTEGER.
Билет 38
Теория:
- Что такое база данных в памяти?
- В чем разница между
COUNT
иSUM
?
Практика:
Подсчитайте общую сумму всех заказов из таблицы "Заказы" .
Ответы:
- База данных в памяти хранит данные в оперативной памяти для максимальной производительности.
COUNT
считает количество строк, аSUM
вычисляет сумму значений.- Используйте SUM для подсчета общей суммы всех заказов из таблицы "Заказы".
Билет 39
Теория:
- Что такое база данных NewSQL?
- Для чего используется оператор
EXTRACT
?
Практика:
Извлеките год из поля дата_заказа
в таблице "Заказы" .
Ответы:
- NewSQL — это гибридные БД, сочетающие преимущества SQL и NoSQL для масштабирования и ACID-совместимости.
EXTRACT
извлекает часть даты или времени (год, месяц, день).- Используйте EXTRACT для извлечения года из поля
дата_заказа
.
Билет 40
Теория:
- Что такое база данных многомодельного типа?
- В чем разница между
DISTINCT
иGROUP BY
?
Практика:
Выберите уникальные категории товаров из таблицы "Товары" .
Ответы:
- Многомодельная БД поддерживает несколько моделей данных (реляционную, документную, графовую) в одной системе.
DISTINCT
удаляет дубликаты, аGROUP BY
группирует данные для агрегации.- Используйте DISTINCT для выбора уникальных категорий товаров из таблицы "Товары".
Тесты для оценки навыков: Junior-разработчик баз данных
Формат теста: 1 вопрос с 4 вариантами ответов (один правильный).
Тест 1
Вопрос: Что такое SQL-инъекция?
- Метод оптимизации запросов к базе данных.
- Атака, при которой злоумышленник внедряет вредоносный код через SQL-запросы. ✅
- Способ создания индексов для ускорения поиска.
- Процесс нормализации базы данных.
Тест 2
Вопрос: Какой оператор используется для фильтрации строк в SQL?
GROUP BY
ORDER BY
WHERE ✅
JOIN
Тест 3
Вопрос: Какая из следующих функций используется для подсчета количества строк в таблице?
SUM()
COUNT() ✅
MAX()
AVG()
Тест 4
Вопрос: Что такое первичный ключ в базе данных?
- Поле, которое может содержать дубликаты.
- Поле, которое уникально идентифицирует каждую запись в таблице. ✅
- Поле, которое используется только для внешних связей.
- Поле, которое всегда имеет тип
VARCHAR
.
Тест 5
Вопрос: Какой тип JOIN возвращает только совпадающие строки из обеих таблиц?
LEFT JOIN
RIGHT JOIN
INNER JOIN ✅
FULL OUTER JOIN
Тест 6
Вопрос: Какая команда используется для удаления таблицы из базы данных?
DELETE TABLE
DROP TABLE ✅
REMOVE TABLE
CLEAR TABLE
Тест 7
Вопрос: Что такое транзакция в базе данных?
- Процесс создания резервной копии данных.
- Набор операций, которые выполняются как одно целое (ACID). ✅
- Процесс нормализации таблиц.
- Операция добавления новых данных в таблицу.
Тест 8
Вопрос: Какой оператор используется для сортировки данных в SQL?
SORT BY
ORDER BY ✅
GROUP BY
FILTER BY
Тест 9
Вопрос: Что делает оператор DISTINCT
?
- Удаляет дубликаты из результатов запроса. ✅
- Группирует данные для агрегации.
- Фильтрует строки по условию.
- Сортирует данные в алфавитном порядке.
Тест 10
Вопрос: Какой тип данных используется для хранения чисел с плавающей запятой?
INT
FLOAT ✅
VARCHAR
DATE
Тест 11
Вопрос: Что такое денормализация?
- Процесс разделения таблиц для устранения избыточности.
- Добавление избыточности данных для повышения производительности чтения. ✅
- Удаление всех индексов из таблицы.
- Очистка базы данных от ненужных записей.
Тест 12
Вопрос: Какой оператор используется для объединения результатов двух запросов без дубликатов?
UNION ALL
UNION ✅
JOIN
MERGE
Тест 13
Вопрос: Что такое индекс в базе данных?
- Структура данных для ускорения поиска и сортировки. ✅
- Поле, которое всегда является первичным ключом.
- Тип данных для хранения больших текстовых значений.
- Процесс удаления данных из таблицы.
Тест 14
Вопрос: Какая команда используется для изменения структуры таблицы?
ALTER TABLE ✅
MODIFY TABLE
UPDATE TABLE
CHANGE TABLE
Тест 15
Вопрос: Что такое ACID в контексте баз данных?
- Свойства транзакций: атомарность, согласованность, изолированность, долговечность. ✅
- Алгоритм шифрования данных.
- Метод оптимизации запросов.
- Тип индекса для быстрого поиска.
Тест 16
Вопрос: Какой оператор используется для группировки данных в SQL?
ORDER BY
GROUP BY ✅
SORT BY
FILTER BY
Тест 17
Вопрос: Что такое хранимая процедура?
- Предварительно скомпилированный набор SQL-команд, который можно вызывать. ✅
- Временная таблица для хранения промежуточных данных.
- Инструмент для восстановления базы данных.
- Метод защиты от SQL-инъекций.
Тест 18
Вопрос: Какой оператор используется для проверки диапазона значений?
IN
BETWEEN ✅
LIKE
EXISTS
Тест 19
Вопрос: Что такое внешний ключ?
- Поле, которое ссылается на первичный ключ другой таблицы. ✅
- Поле, которое всегда уникально.
- Поле, которое используется только для индексации.
- Поле, которое содержит только числовые значения.
Тест 20
Вопрос: Какой оператор используется для поиска по шаблону?
MATCH
LIKE ✅
SEARCH
FIND
Тест 21
Вопрос: Что такое представление (VIEW) в SQL?
- Временная таблица, которая хранится в оперативной памяти.
- Виртуальная таблица, основанная на результатах SQL-запроса. ✅
- Инструмент для создания индексов.
- Метод защиты данных от несанкционированного доступа.
Тест 22
Вопрос: Какой тип JOIN возвращает все строки из левой таблицы и совпадающие из правой?
INNER JOIN
LEFT JOIN ✅
RIGHT JOIN
FULL OUTER JOIN
Тест 23
Вопрос: Что такое нормализация базы данных?
- Процесс разделения таблиц для устранения избыточности данных. ✅
- Добавление избыточности данных для повышения производительности.
- Создание индексов для ускорения запросов.
- Удаление всех внешних ключей из таблиц.
Тест 24
Вопрос: Какой оператор используется для фильтрации групп после агрегации?
WHERE
HAVING ✅
GROUP BY
ORDER BY
Тест 25
Вопрос: Что делает оператор LIMIT
?
- Ограничивает количество возвращаемых строк. ✅
- Сортирует данные по указанному столбцу.
- Группирует данные для агрегации.
- Фильтрует строки по условию.
Тест 26
Вопрос: Какой тип данных используется для хранения даты в SQL?
VARCHAR
DATE ✅
FLOAT
TEXT
Тест 27
Вопрос: Что такое триггер в базе данных?
- Автоматически выполняемая процедура при определенных событиях (INSERT, UPDATE). ✅
- Инструмент для создания индексов.
- Метод защиты от SQL-инъекций.
- Процесс восстановления данных из резервной копии.
Тест 28
Вопрос: Какой оператор используется для объединения результатов двух запросов с дубликатами?
UNION ALL ✅
UNION
JOIN
MERGE
Тест 29
Вопрос: Что такое партиционирование таблиц?
- Разделение таблицы на части для улучшения производительности запросов. ✅
- Удаление всех индексов из таблицы.
- Создание временных таблиц.
- Процесс нормализации базы данных.
Тест 30
Вопрос: Какой тип данных используется для хранения больших текстовых значений?
INT
TEXT ✅
VARCHAR
DATE
Тест 31
Вопрос: Что такое оконные функции в SQL?
- Функции, выполняющие вычисления над набором строк без группировки данных. ✅
- Функции, которые работают только с индексированными столбцами.
- Инструмент для создания индексов.
- Метод защиты от SQL-инъекций.
Тест 32
Вопрос: Какой оператор используется для проверки существования записей?
IN
EXISTS ✅
LIKE
BETWEEN
Тест 33
Вопрос: Что такое каскадное удаление (CASCADE)?
- Автоматическое удаление связанных записей при удалении родительской записи. ✅
- Удаление всех данных из таблицы.
- Процесс восстановления данных из резервной копии.
- Добавление новых записей в таблицу.
Тест 34
Вопрос: Какой оператор используется для замены NULL-значений?
COALESCE ✅
REPLACE
NULLIF
CAST
Тест 35
Вопрос: Что такое временная таблица?
- Таблица, которая существует только в течение сессии. ✅
- Таблица, которая хранит данные в оперативной памяти.
- Таблица, которая используется только для индексации.
- Таблица, которая содержит только числовые значения.
Тест 36
Вопрос: Какой тип JOIN возвращает все строки из обеих таблиц?
INNER JOIN
FULL OUTER JOIN ✅
LEFT JOIN
RIGHT JOIN
Тест 37
Вопрос: Что такое полнотекстовый поиск в SQL?
- Поиск данных по ключевым словам или фразам с учетом релевантности. ✅
- Поиск данных по точному совпадению.
- Поиск данных только в числовых столбцах.
- Поиск данных в индексированных таблицах.
Тест 38
Вопрос: Какой оператор используется для пропуска определенного количества строк?
OFFSET ✅
SKIP
IGNORE
PASS
Тест 39
Вопрос: Что такое база данных NoSQL?
- База данных, предназначенная для работы с большими объемами неструктурированных данных. ✅
- База данных, использующая только числовые значения.
- База данных, которая поддерживает только SQL-запросы.
- База данных, которая хранит данные только в оперативной памяти.
Тест 40
Вопрос: Какой оператор используется для преобразования типа данных?
CONVERT
CAST ✅
CHANGE
TRANSFORM
Кейс: Разработка системы управления складом для розничной сети
Сценарий:
Вы работаете в команде разработчиков, которая создает систему управления складом для крупной розничной сети. Компания имеет несколько складов, где хранятся товары различных категорий. Система должна позволять отслеживать наличие товаров, управлять поставками, формировать отчеты и обеспечивать высокую производительность при работе с большими объемами данных.
Цели проекта:
- Создать базу данных для хранения информации о товарах, складах, поставках и заказах.
- Обеспечить возможность быстрого поиска товаров, анализа запасов и генерации отчетов.
- Оптимизировать производительность запросов для работы с большими объемами данных.
- Защитить данные от несанкционированного доступа и SQL-инъекций.
Задачи:
1. Проектирование базы данных (Junior)
- Создайте ER-диаграмму для следующих сущностей:
- Товары :
id
,название
,категория
,цена
,количество
. - Склады :
id
,адрес
,вместимость
. - Поставки :
id
,id_товара
,id_склада
,дата_поставки
,количество
. - Заказы :
id
,id_клиента
,id_товара
,дата_заказа
,статус
.
- Товары :
- Убедитесь, что таблицы связаны через первичные и внешние ключи.
- Нормализуйте структуру до 3NF.
2. Реализация базы данных (Middle)
- Напишите SQL-скрипт для создания таблиц на основе ER-диаграммы.
- Добавьте ограничения:
- Поле
цена
должно быть больше 0. - Поле
количество
не может быть отрицательным. - Поле
email
клиента должно быть уникальным.
- Поле
- Создайте индексы для часто используемых полей (например,
название
товаров,дата_поставки
).
3. Оптимизация производительности (Senior)
- Проанализируйте план выполнения запросов для следующих операций:
- Поиск всех товаров определенной категории на складе.
- Подсчет общего количества товаров на каждом складе.
- Добавьте индексы или партиционирование таблиц для улучшения производительности.
- Настройте кэширование для часто запрашиваемых данных.
4. Безопасность и защита данных (Middle)
- Защитите систему от SQL-инъекций, используя параметризованные запросы.
- Создайте роли пользователей:
- Администратор : полный доступ ко всем данным.
- Менеджер склада : доступ только к данным о товарах и поставках.
- Клиент : доступ только к своим заказам.
- Настройте права доступа для каждой роли.
5. Генерация отчетов (Middle)
- Напишите хранимые процедуры для формирования отчетов:
- Отчет о текущем количестве товаров на каждом складе.
- Отчет о поставках за последний месяц.
- Отчет о самых продаваемых товарах за период.
- Используйте оконные функции для расчета рангов товаров по популярности.
6. Масштабирование и отказоустойчивость (Senior)
- Настройте репликацию базы данных для обеспечения отказоустойчивости.
- Разработайте стратегию шардирования для распределения данных между несколькими серверами.
- Настройте автоматическое резервное копирование базы данных.
Дополнительные задачи:
7. Работа с JSON (Middle)
- Добавьте поддержку JSON для хранения дополнительных характеристик товаров (например, цвет, размер).
- Напишите запросы для выборки товаров с определенными характеристиками.
8. Триггеры и аудит (Junior)
- Создайте триггер, который записывает изменения в таблице
Товары
в таблицуЖурнал_изменений
. - Настройте автоматическое обновление поля
дата_обновления
при изменении записи.
9. Анализ данных (Senior)
- Используйте CTE (Common Table Expressions) для анализа данных о заказах:
- Найдите клиентов, которые сделали более 10 заказов за последний год.
- Рассчитайте среднюю стоимость заказов по каждой категории товаров.
Итоговый проект:
Подготовьте презентацию, включающую:
- ER-диаграмму вашей базы данных.
- Описание ключевых решений (нормализация, индексы, безопасность).
- Примеры SQL-запросов и хранимых процедур.
- Результаты оптимизации производительности (планы запросов до и после).
- План масштабирования и отказоустойчивости.
Ожидаемый результат:
- Функциональная база данных, готовая к использованию в реальной системе.
- Эффективные решения для работы с большими объемами данных.
- Защищенная система с четким разделением прав доступа.
- Готовые инструменты для анализа данных и генерации отчетов.
Уровень сложности:
- Junior: Проектирование базы данных, работа с простыми запросами, создание триггеров.
- Middle: Реализация базы данных, оптимизация запросов, работа с JSON, написание хранимых процедур.
- Senior: Масштабирование, отказоустойчивость, глубокая оптимизация, анализ данных с использованием сложных запросов.
Ролевые игры для разработчиков баз данных
Каждая ролевая игра включает описание сценария, задачи и уровень сложности (Junior, Middle, Senior).
1. Создание базы данных для интернет-магазина
Сценарий: Вы работаете над проектом интернет-магазина, который требует хранения данных о клиентах, товарах и заказах.
Задача: Спроектировать ER-диаграмму и реализовать базу данных с таблицами Клиенты
, Товары
, Заказы
.
Уровень сложности: Junior
2. Оптимизация запросов для отчетов
Сценарий: Компания жалуется на медленную генерацию отчетов по продажам.
Задача: Проанализировать план выполнения запросов, создать индексы и оптимизировать производительность.
Уровень сложности: Middle
3. Устранение SQL-инъекций
Сценарий: В системе обнаружена уязвимость: злоумышленник может внедрить вредоносный код через форму авторизации.
Задача: Переписать код для защиты от SQL-инъекций, используя параметризованные запросы.
Уровень сложности: Junior
4. Миграция данных из старой системы
Сценарий: Компания переходит на новую систему учета, и данные из старой БД нужно перенести без потерь.
Задача: Написать скрипт для миграции данных между двумя базами данных с разной структурой.
Уровень сложности: Middle
5. Разработка хранимой процедуры для расчета бонусов
Сценарий: Компания хочет автоматизировать расчет бонусов для сотрудников на основе их продаж.
Задача: Написать хранимую процедуру, которая рассчитывает бонусы и сохраняет результаты в таблицу.
Уровень сложности: Middle
6. Реализация триггера для аудита изменений
Сценарий: Необходимо отслеживать все изменения в таблице Заказы
(добавление, обновление, удаление).
Задача: Создать триггер, который записывает изменения в таблицу Аудит
.
Уровень сложности: Junior
7. Шардирование базы данных для высоконагруженного приложения
Сценарий: Приложение испытывает нагрузку, и требуется разделить данные между несколькими серверами.
Задача: Разработать стратегию шардирования и реализовать её для таблицы Пользователи
.
Уровень сложности: Senior
8. Поиск и устранение узких мест в производительности
Сценарий: База данных работает медленно, и необходимо выявить причины.
Задача: Использовать инструменты мониторинга (например, EXPLAIN
) для анализа запросов и устранения проблем.
Уровень сложности: Middle
9. Работа с JSON в базе данных
Сценарий: Необходимо хранить и обрабатывать данные в формате JSON для нового API.
Задача: Создать таблицу с полем JSON, написать запросы для выборки и обновления данных.
Уровень сложности: Middle
10. Создание временной таблицы для аналитики
Сценарий: Для ежедневного анализа продаж требуется создавать временную таблицу с агрегированными данными.
Задача: Написать скрипт для создания и заполнения временной таблицы.
Уровень сложности: Junior
11. Реализация партиционирования таблиц
Сценарий: Таблица Логи
занимает много места, и требуется оптимизировать её хранение.
Задача: Разделить таблицу на партиции по дате.
Уровень сложности: Middle
12. Настройка резервного копирования
Сценарий: Компания требует автоматическое резервное копирование базы данных каждые 6 часов.
Задача: Настроить скрипт для создания бэкапов и восстановления данных.
Уровень сложности: Junior
13. Интеграция NoSQL с реляционной БД
Сценарий: Необходимо добавить поддержку NoSQL для хранения неструктурированных данных.
Задача: Интегрировать MongoDB с существующей реляционной БД.
Уровень сложности: Senior
14. Разработка представления для аналитики
Сценарий: Аналитикам нужен удобный способ просмотра данных о продажах.
Задача: Создать представление (VIEW), которое объединяет данные из нескольких таблиц.
Уровень сложности: Junior
15. Оптимизация индексов для больших таблиц
Сценарий: Таблица Заказы
содержит миллионы записей, и запросы работают медленно.
Задача: Проанализировать и оптимизировать индексы для повышения производительности.
Уровень сложности: Middle
16. Создание базы данных для системы управления проектами
Сценарий: Необходимо разработать базу данных для хранения данных о проектах, задачах и командах.
Задача: Спроектировать ER-диаграмму и реализовать БД.
Уровень сложности: Junior
17. Реализация полнотекстового поиска
Сценарий: Пользователям нужна возможность искать товары по ключевым словам.
Задача: Настроить полнотекстовый поиск для таблицы Товары
.
Уровень сложности: Middle
18. Разработка системы ролей и прав доступа
Сценарий: Необходимо настроить права доступа для разных групп пользователей.
Задача: Создать роли и назначить им соответствующие права.
Уровень сложности: Junior
19. Масштабирование базы данных в облаке
Сценарий: Компания планирует перенести базу данных в облачное решение (например, AWS RDS).
Задача: Разработать план миграции и масштабирования.
Уровень сложности: Senior
20. Реализация оконных функций для аналитики
Сценарий: Необходимо рассчитать ранги клиентов по объему заказов.
Задача: Использовать оконные функции для расчета рангов.
Уровень сложности: Middle
21. Создание базы данных для системы онлайн-обучения
Сценарий: Разработайте БД для хранения данных о курсах, студентах и их прогрессе.
Задача: Спроектировать ER-диаграмму и реализовать БД.
Уровень сложности: Junior
22. Реализация репликации базы данных
Сценарий: Необходимо настроить репликацию для обеспечения отказоустойчивости.
Задача: Настроить мастер-слейв репликацию.
Уровень сложности: Senior
23. Разработка системы логирования действий пользователей
Сценарий: Компания хочет отслеживать действия пользователей в системе.
Задача: Создать таблицу логов и настроить автоматическое заполнение.
Уровень сложности: Middle
24. Оптимизация хранения больших файлов
Сценарий: Необходимо хранить и эффективно извлекать большие файлы (например, изображения).
Задача: Разработать стратегию хранения и доступа к файлам.
Уровень сложности: Senior
25. Создание базы данных для системы бронирования
Сценарий: Разработайте БД для хранения данных о бронировании отелей.
Задача: Спроектировать ER-диаграмму и реализовать БД.
Уровень сложности: Junior
26. Реализация каскадного удаления
Сценарий: Необходимо настроить автоматическое удаление связанных записей при удалении родительской записи.
Задача: Добавить внешний ключ с каскадным удалением.
Уровень сложности: Junior
27. Анализ данных с использованием CTE
Сценарий: Необходимо проанализировать данные о продажах за последний месяц.
Задача: Написать запрос с использованием CTE.
Уровень сложности: Middle
28. Разработка системы мониторинга базы данных
Сценарий: Компания хочет отслеживать состояние базы данных в реальном времени.
Задача: Создать систему мониторинга с использованием триггеров и логов.
Уровень сложности: Senior
29. Создание базы данных для системы голосования
Сценарий: Разработайте БД для хранения данных о голосовании и участниках.
Задача: Спроектировать ER-диаграмму и реализовать БД.
Уровень сложности: Junior
30. Реализация партиционирования по времени
Сценарий: Необходимо разделить данные по временным периодам для улучшения производительности.
Задача: Настроить партиционирование таблицы Логи
по месяцам.
Уровень сложности: Middle
Нет элементов для просмотра