Этап 3 из 18 · ≈ 16 ч

SQL и реляционные базы

Основа с Junior

Таблицы, запросы, JOIN, индексы и транзакции — хранение пользователей, диалогов и документов.

Почти любой сервис хранит данные в реляционной базе, чаще всего в PostgreSQL. Для LLM-продуктов это пользователи и права, история диалогов, документы и их фрагменты, оценки ответов, расходы на модели.

SELECT d.id, count(m.id) AS messages, avg(f.score) AS rating
FROM dialogs d
JOIN messages m ON m.dialog_id = d.id
LEFT JOIN feedback f ON f.message_id = m.id
WHERE d.created_at > now() - interval '7 days'
GROUP BY d.id
ORDER BY rating NULLS LAST;

Что важно знать

  • SELECT, JOIN (INNER, LEFT), GROUP BY, подзапросы, оконные функции.
  • Первичные и внешние ключи, нормализация без фанатизма.
  • Индексы: когда помогают, когда мешают, как читать EXPLAIN.
  • Транзакции и изоляция: два запроса меняют одну запись одновременно.
  • Только параметризованные запросы — никакой склейки строк.
  • pgvector превращает PostgreSQL в векторную базу — часто это лучший старт для RAG.

Критерии освоения

Junior ≈ 16 ч

  • Пишет запросы с фильтрами, сортировкой, JOIN и GROUP BY
  • Проектирует таблицы для пользователей, диалогов и сообщений с внешними ключами
  • Использует параметризованные запросы и объясняет, как они защищают от SQL-инъекций

Практика. Спроектировать схему БД для чат-ассистента (пользователи, диалоги, сообщения, оценки ответов) и написать 5 запросов для аналитики диалогов.

Middle ≈ 12 ч

  • Находит медленный запрос через EXPLAIN и ускоряет его индексом
  • Объясняет транзакции и выбирает уровень изоляции для конкурентных обновлений
  • Хранит эмбеддинги в PostgreSQL с pgvector рядом с обычными данными

Практика. Добавить в схему pgvector-таблицу фрагментов документов с фильтром по правам доступа, замерить время поиска до и после индекса HNSW.

Проверка знаний

Войдите, чтобы пройти тест: сданный тест отмечает тему пройденной на карте и в ИПР.

Вопросы с собеседований

Смотреть все
Что обеспечивает foreign key?Junior

Внешний ключ гарантирует ссылочную целостность: нельзя сослаться на несуществующую строку и нельзя удалить строку, на которую ссылаются (если не задано иное).

Полный разбор
Почему индексы в базах данных устроены как B-дерево?Middle

B-дерево — сбалансированное дерево с широкими узлами: в узле сотни ключей, узел = страница на диске (8–16 КБ). Высота 3–4 даже для миллиардов строк — значит, 3–4 чтения страницы.

Полный разбор
Что такое SQL-инъекция и как от неё защититься?Junior

Инъекция — данные пользователя попадают в текст запроса и меняют его смысл: ' OR '1'='1 превращает проверку пароля в «всегда истина».

Полный разбор
Какой JOIN вернёт все строки левой таблицы и совпавшие из правой (NULL там, где совпадений нет)?Junior

LEFT JOIN возвращает все строки левой таблицы и совпавшие из правой; где совпадений нет — в колонках правой NULL.

Полный разбор
Чем HAVING отличается от WHERE?Junior

WHERE фильтрует строки до группировки, HAVING — группы после агрегации. Условие на count() или sum() — только в HAVING.

Полный разбор
Чем INNER JOIN отличается от LEFT JOIN?Junior

INNER JOIN оставляет только совпавшие пары; LEFT JOIN сохраняет все строки левой таблицы и дополняет их NULL, если пары нет.

Полный разбор
Чем PreparedStatement безопаснее обычного Statement?Junior

PreparedStatement передаёт текст запроса и значения раздельно: значение никогда не разбирается как SQL — инъекция невозможна. Statement склеивает строку и выполняет как есть.

Полный разбор
Что делает EXPLAIN для SQL-запроса?Middle

EXPLAIN показывает план, который выбрал оптимизатор: способы чтения таблиц, порядок и алгоритмы соединений, оценки числа строк и стоимости. EXPLAIN ANALYZE ещё и выполняет запрос и показывает фактическое время и строки.

Полный разбор
Что означает аббревиатура ACID?Junior

ACID — гарантии транзакции: атомарность (всё или ничего), согласованность (инварианты не нарушаются), изоляция (параллельные транзакции не мешают друг другу), долговечность (подтверждённое переживёт сбой).

Полный разбор
Зачем тестировщику SQL и какие запросы нужно уметь писать?Junior

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

Полный разбор

Документация

← Вся карта «ИИ-инженер»

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования