В прошлой главе мы научились проверять API напрямую — но даже API показывает не саму базу данных, а только то, что сервер РЕШИЛ отдать в ответе. Если нужно узнать, что реально ЗАПИСАЛОСЬ в базу, — на один уровень глубже, чем API, — тестировщику нужен SQL: язык запросов к базе данных.
Чему научишься за этот урок:
— объяснять, зачем тестировщику вообще нужен SQL;
— называть, что такое таблица, первичный и внешний ключ;
— читать простую схему из нескольких связанных таблиц;
— называть основные типы данных в базе.
Зачем тестировщику SQL
Интерфейс может показать одно, API — другое, а реально в базе данных может быть третье. Например: пользователь нажал «Записаться на курс», интерфейс показал успех, API вернул код 201 — но если в самой базе данных запись так и не появилась (например, из-за ошибки в транзакции), ни интерфейс, ни API об этом уже не расскажут. SQL позволяет тестировщику проверить факт напрямую — заглянуть в саму базу, а не доверять тому, что о ней рассказывают промежуточные слои.
Таблицы
Таблица — основная структура хранения данных в базе. У таблицы есть столбцы (поля, например «имя», «email») и строки (записи, каждая строка — один конкретный пользователь, курс, заказ и так далее).
Первичный и внешний ключи
Первичный ключ (primary key) — поле, которое уникально определяет строку в таблице: у каждой строки своё, ни у одной другой строки такого же значения нет. Чаще всего это поле id.
Внешний ключ (foreign key) — поле в одной таблице, которое ссылается на первичный ключ ДРУГОЙ таблицы. Именно внешние ключи связывают таблицы между собой.
Таблица users Таблица enrollments Таблица courses +----+-------+ +----+---------+-----------+ +----+----------------------+ | id | name | | id | user_id | course_id | | id | title | +----+-------+ +----+---------+-----------+ +----+----------------------+ | 1 | Иван | | 1 | 1 | 5 | | 5 | Ручное тестирование | | 2 | Мария | | 2 | 2 | 5 | | 7 | SQL для тестировщика | +----+-------+ +----+---------+-----------+ +----+----------------------+ enrollments.user_id -> users.id (внешний ключ) enrollments.course_id -> courses.id (внешний ключ)
На схеме выше таблица enrollments (записи на курсы) связывает users и courses: строка с id=1 означает «пользователь Иван (user_id=1) записан на курс «Ручное тестирование» (course_id=5)».
Чтобы попробовать запросы этой главы самому (не обязательно для прохождения контрольных вопросов, но полезно для практики): подойдёт любая бесплатная SQL-песочница в браузере без установки, например sqliteonline.com. Там можно создать свои же таблицы users, enrollments и courses по схеме выше, добавить в них пару строк с такими же данными, что в примерах урока, и проверять запросы прямо по ходу чтения. Если заводить свою копию схемы пока не хочется — не страшно: контрольные вопросы и задания этой главы проверяются рассуждением по приведённым в уроках данным, а практика в песочнице — дополнительная тренировка, а не обязательное условие для прохождения.
Типы данных
У каждого столбца таблицы есть тип данных, который определяет, что именно в нём может храниться:
INTEGER -> целое число (id, возраст, количество) VARCHAR/TEXT -> текстовая строка (имя, email, название) DATE/DATETIME -> дата или дата+время (дата регистрации) BOOLEAN -> да/нет, true/false (активен ли аккаунт) DECIMAL -> дробное число (цена курса)
Итог:
— SQL нужен тестировщику, чтобы проверить факт напрямую в базе данных, а не доверять тому, что показывает интерфейс или API;
— таблица состоит из столбцов (полей) и строк (записей);
— первичный ключ уникально определяет строку в своей таблице (чаще всего id);
— внешний ключ — поле, ссылающееся на первичный ключ ДРУГОЙ таблицы, связывает таблицы между собой;
— основные типы данных: INTEGER, VARCHAR/TEXT, DATE/DATETIME, BOOLEAN, DECIMAL.
Контрольный вопрос. Зачем тестировщику может понадобиться SQL, если уже есть интерфейс и API?
Подсказка: В начале урока прямо описан пример, где интерфейс и API «врут» независимо от базы — вспомни его.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Контрольный вопрос. Что такое таблица в базе данных?
Подсказка: В уроке прямо дано определение — это про столбцы и строки, а не про сеть.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Контрольный вопрос. Что такое первичный ключ таблицы?
Подсказка: Чаще всего это поле id — подумай, что его делает особенным для каждой строки.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Контрольный вопрос. Что делает внешний ключ?
Подсказка: Ключевое слово — «внешний»: подумай, на что он смотрит — внутрь своей таблицы или наружу, в другую.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Контрольный вопрос. На схеме урока таблица enrollments содержит поля user_id и course_id. Какие из утверждений про эту схему верны (выбери все подходящие)?
Выберите все верные варианты.
Подсказка: Сверь каждое утверждение со схемой из урока — одно из четырёх путает первичный и внешний ключ местами.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Контрольный вопрос. Как называется тип данных для хранения дробного числа, например цены курса? Ответь одним словом по-английски, как в уроке.
Подсказка: Посмотри на список типов данных в уроке — какой из них назван именно для цены.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Задание. В таблице courses столбец id уникально определяет каждую строку — ни у одного другого курса такого же id нет. Как называется такой ключ? Ответь двумя словами по-русски.
Подсказка: Это ключ, уникальный внутри СВОЕЙ таблицы, а не ссылающийся на другую.
✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Задание. По схеме урока: таблица enrollments содержит строку с user_id=2 и course_id=5. Пользователь с id=2 — Мария. На какой курс записана Мария по этой строке? Ответь названием курса.
Подсказка: Найди в таблице courses строку с id, равным course_id из этой записи enrollments.
✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.
Проверить ответ →
Реальная проверка — на нашей платформе, бесплатно и без регистрации. Открыть задачу и ввести ответ →
Задание. Объясни в 2-3 предложениях: почему тестировщику мало проверить, что API вернул код 201 (успех) при записи на курс, и стоит дополнительно посмотреть в саму базу данных?
Критерий приёмки: объяснено, что код 201 говорит только о том, что СЕРВЕР ОТВЕТИЛ успехом, но не гарантирует, что запись реально СОХРАНИЛАСЬ в базе (например, могла произойти ошибка уже после формирования ответа, до записи в БД); SQL-запрос к таблице напрямую подтверждает или опровергает факт независимо от того, что сообщил API.
Подсказка: Вспомни пример из начала урока — там API и интерфейс могут «соврать» про базу данных, даже не желая этого.
✅ Готово, если: ответ раскрывает то, что просит критерий приёмки в задании выше.
Онлайн-проверка ответа появится позже
Задание. Тестировщик видит новую таблицу payments со столбцами: id, user_id, amount, status, paid_at. По одним только НАЗВАНИЯМ столбцов и без документации предположи: (а) какой столбец — первичный ключ; (б) какой столбец, вероятнее всего, внешний ключ и на какую таблицу он может ссылаться; (в) какой тип данных подходит столбцу amount. Обоснуй каждый пункт в одном предложении.
Критерий приёмки: (а) назван id как первичный ключ (по аналогии со схемой урока, где id — стандартное имя первичного ключа); (б) назван user_id как вероятный внешний ключ, ссылающийся на таблицу users (по аналогии с enrollments.user_id из урока); (в) назван DECIMAL (или другой дробный числовой тип) для amount, с обоснованием, что сумма платежа обычно дробное число (аналогия с price в курсах).
Подсказка: Проведи прямую аналогию с уже разобранной схемой users/enrollments/courses — там были такие же по смыслу столбцы.
✅ Готово, если: ответ раскрывает то, что просит критерий приёмки в задании выше.
Онлайн-проверка ответа появится позже
Что дальше
Теперь вы понимаете структуру таблиц и связи между ними. В следующем уроке начнём писать первые настоящие SQL-запросы: SELECT, WHERE, LIKE, ORDER BY и LIMIT — чтобы не просто читать схему, а реально доставать из базы нужные данные.
