← Назад к вопросам

Что такое БД?

1.6 Junior🔥 191 комментариев
#Базы данных и SQL#Теория тестирования

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

База данных: полное объяснение для QA инженера

Определение и сущность

База данных (БД) — это организованное хранилище структурированной информации, которое обеспечивает быстрый поиск, добавление, обновление и удаление данных. Это не просто файл на диске, а система управления данными с определёнными правилами, индексами и механизмами контроля.

Для QA инженера база данных — это одна из критических компонент, которую мы должны понимать. Невозможно полностью протестировать приложение, не понимая, как оно хранит и манипулирует данными.

Основные компоненты БД

1. Таблицы и Записи

Таблица — это двумерная структура данных с колонками (поля) и строками (записи).

Пример: таблица "Пользователи"

id  | имя      | email            | возраст
----+----------+------------------+--------
1   | Иван     | ivan@example.com | 28
2   | Мария    | maria@example.com| 32
3   | Пётр     | petr@example.com | 25
  • Колонка (поле) — хранит определённый тип данных (текст, число, дата)
  • Строка (запись) — одна единица информации о сущности
  • Первичный ключ (Primary Key) — уникальный идентификатор записи (обычно id)

2. Типы данных

БД поддерживает различные типы данных:

  • VARCHAR(255) — текст переменной длины (строка)
  • INTEGER — целое число
  • DECIMAL(10,2) — число с плавающей точкой (цена, координаты)
  • DATETIME — дата и время
  • BOOLEAN — логическое значение (да/нет)
  • TEXT — большой текст
  • JSON — структурированные данные

3. Отношения между таблицами

Внешний ключ (Foreign Key) — связь между таблицами.

Пример:

Таблица: Комментарии
id | текст              | user_id | post_id
---+--------------------+---------+--------
1  | Отличная статья!   | 1       | 5
2  | Не согласен        | 3       | 5

Здесь user_id и post_id — это внешние ключи, которые ссылаются на id в других таблицах.

4. Индексы

Индекс — это структура данных для ускорения поиска.

Без индекса: БД сканирует все миллионы строк (долго) С индексом: БД находит строку по id за микросекунды

Тестирование производительности часто выявляет проблемы с отсутствующими индексами.

Типы баз данных

1. Реляционные БД (RDBMS)

Примеры: PostgreSQL, MySQL, Oracle, SQL Server

Характеристики:

  • Данные организованы в таблицы
  • Строгая структура (схема)
  • ACID гарантии (транзакции надёжны)
  • Язык: SQL

Для QA: это самый частый тип БД, который мы тестируем. Нужно уметь писать SQL запросы для проверки данных.

2. NoSQL БД

Примеры: MongoDB, Redis, Elasticsearch, DynamoDB

Характеристики:

  • Гибкая структура (JSON документы)
  • Горизонтальное масштабирование
  • BASE гарантии (итоговая согласованность)

Для QA: всё более популярны, требуют другого подхода к тестированию. Вместо SQL используются специфичные запросы.

3. Графовые БД

Пример: Neo4j

Для QA: редко встречаются, используются для социальных сетей, рекомендаций.

Операции с БД (CRUD)

CREATE (Создание)

INSERT INTO users (имя, email, возраст) 
VALUES ('Алексей', 'alex@example.com', 30);

READ (Чтение)

SELECT * FROM users WHERE возраст > 25;

UPDATE (Обновление)

UPDATE users SET email = 'newemail@example.com' WHERE id = 1;

DELETE (Удаление)

DELETE FROM users WHERE id = 1;

Почему QA инженер должен знать БД

1. Проверка целостности данных

Пример: пользователь удалил аккаунт

  • Все его комментарии должны быть удалены (CASCADE delete)
  • Его лайки должны быть удалены
  • Статистика постов должна обновиться

Это проверяется прямо в БД SQL запросами:

SELECT COUNT(*) FROM comments WHERE user_id = 123;
-- Должно вернуть 0 после удаления пользователя

2. Проверка консистентности

Пример: заказ в статусе "оплачено", но сумма в таблице платежей не совпадает с суммой заказа. Это ловится при прямой проверке БД.

3. Производительность и оптимизация

Если запрос в БД выполняется 30 секунд вместо 0.3 — это баг. Мы можем анализировать slow query logs и выявлять проблемы.

4. Безопасность

SQL Injection — вторая по частоте уязвимость после XSS. QA должен знать, как тестировать приложение на SQL injection.

Пример потенциально опасного кода:

-- Опасно!
query = "SELECT * FROM users WHERE email = '" + user_input + "'";

-- Если user вводит: ' OR '1'='1
-- То запрос становится:
-- SELECT * FROM users WHERE email = '' OR '1'='1'
-- Это вернёт ВСЕ пользователей!

5. Откат данных (Rollback)

После тестирования нужно привести БД в исходное состояние. Мы используем транзакции и откаты:

BEGIN TRANSACTION;
-- Создаём тестовые данные
INSERT INTO users ...
ROLLBACK; -- Отменяем всё

Практические навыки для QA

1. Написание SQL запросов

-- Найти всех пользователей с более чем 10 комментариями
SELECT u.*, COUNT(c.id) as comment_count
FROM users u
LEFT JOIN comments c ON u.id = c.user_id
GROUP BY u.id
HAVING COUNT(c.id) > 10;

2. Проверка после операций

  • После создания записи: проверить, что она в БД с правильными данными
  • После обновления: убедиться, что старые данные перезаписаны
  • После удаления: проверить, что записей действительно нет

3. Работа с фреймворками для БД тестов

  • DBUnit (Java)
  • Databases (Python)
  • Sequelize (Node.js)

4. Инструменты для работы с БД

  • PostgreSQL Client — psql
  • MySQL Client — mysql
  • DBeaver — GUI для просмотра БД
  • Adminer — веб-интерфейс для БД

Ошибки, которые часто ловим при тестировании БД

  1. Дублирование записей — при создании заказа создаются две записи вместо одной
  2. Orphaned records — осиротелые записи, когда удалена родительская запись, но дочерние остались
  3. Race conditions — две операции одновременно обновляют одну запись
  4. Data migration issues — при обновлении версии БД данные повреждаются
  5. Неправильный cascading — при удалении пользователя остаются его заказы/комментарии

Заключение

База данных — это сердце приложения. Без понимания её структуры и операций невозможно проводить глубокое тестирование. За 10+ лет работы я видел, как баги в БД ломали приложение даже когда frontend и backend выглядели корректно.

Каждый уважающий себя QA инженер должен уметь:

  • Написать базовый SQL запрос
  • Проверить целостность данных в БД
  • Найти и проанализировать медленные запросы
  • Понимать схему БД приложения

Это не означает, что QA должен быть DBA, но базовые навыки критичны.

Что такое БД? | PrepBro