Rusau LearnВойти

Базы данных

Базы данных для тестировщика: БД и СУБД, ключи, связи, нормальные формы

База данных – это набор сведений, которые хранятся в упорядоченном виде. СУБД управляет этими данными как программа: создаёт, меняет, удаляет, выдаёт их и защищает. Чаще всего тестировщик работает с реляционными базами: данные в них лежат в таблицах, строку однозначно определяет первичный ключ, а таблицы связывает внешний ключ. Нормальные формы задают правила, по которым строят таблицы, и на собеседовании junior-тестировщика обычно спрашивают первые две.

Мой видеоурок: Урок 19. Базы данных для тестировщиков и QAОткрыть на YouTube
БД и СУБД
данные и программа для них, разницу часто спрашивают на собеседовании
1НФ и 2НФ
нормальные формы, которые стоит знать
Бесплатно
урок с заданиями в моём базовом курсе

Зачем тестировщику базы данных

Я начинаю урок с задачи, которую часто дают на собеседовании. На экране знакомая форма входа, и нужно рассказать, как бы вы её протестировали. Обычно кандидат сразу перечисляет проверки полей: максимальную длину логина, недопустимые символы в пароле. Такие проверки нужны, но начинать стоит с другого.

Логины, пароли и всё, что ещё вводят в форму, хранятся в базе данных. Клиент отправляет на сервер запрос с логином и паролем, сервер спрашивает у базы, есть ли такой пользователь и совпадает ли пароль, и возвращает ответ клиенту. Поэтому проверку входа начинают с базы: запросом убеждаются, что нужный пользователь в ней есть и данные о нём записаны верно. Только потом переходят к допустимым и недопустимым значениям в полях формы.

Данные любого приложения с пользователями, заказами или платежами лежат в базе, потому что в документе вёрстки или файле стилей их не сохранить. С базами работают не только тестировщики, они нужны и разработчикам, и бизнес-аналитикам.

БД и СУБД: в чём разница

База данных (БД) – набор сведений, хранящихся в упорядоченном виде. Система управления базами данных (СУБД) – совокупность языковых и программных средств, которая позволяет создавать, изменять и удалять данные, даёт к ним доступ и отвечает за их безопасность.

Чем БД отличается от СУБД, спрашивают часто, и вопрос нередко ставит в тупик. Я предлагаю запомнить так. База данных – это объект, просто набор данных. СУБД – программа, которая этими данными управляет.

Реляционные СУБД понимают язык запросов SQL (Structured Query Language). Основа у него общая, но у каждой системы свой диалект, и один и тот же запрос в разных СУБД иногда ведёт себя по-разному. На собеседовании обычно спрашивают, с какими СУБД вы работали, и просят написать запрос SELECT, а иногда и JOIN. Различия СУБД подробно разобраны в книге Святослава Куликова, ссылку на которую я оставил под роликом, но новичку она даётся тяжело, и для начала хватит запросов из следующих уроков курса.

  • MySQL

    На ней я показываю запросы в следующих уроках курса. Версия MySQL Community Server бесплатная.

  • PostgreSQL

    Свободная СУБД. Основные запросы в ней пишутся так же, как в MySQL, а различия начинаются в функциях, типах данных и сравнении строк.

  • Microsoft SQL Server и Oracle

    СУБД двух крупных компаний, у каждой свой диалект SQL.

  • MongoDB

    Документная СУБД из семейства NoSQL. Таблиц в ней нет: данные лежат в документах, а запросы пишут в собственном синтаксисе, без SQL.

Реляционная база: таблицы, ключи и связи

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

Строки таблицы называют записями, а столбцы полями. Первичный ключ (primary key) однозначно определяет строку, он обязателен и не повторяется. Имя на эту роль не годится: людей с одинаковым именем в таблице может оказаться несколько, и запрос по имени вернёт их всех. Поэтому у каждой строки есть свой номер, обычно в поле id.

Внешний ключ (foreign key) связывает две таблицы. В одной таблице хранят идентификатор строки из другой и по нему находят связанные данные, например поле customer_id в таблице заказов указывает на покупателя из таблицы покупателей. Внешний ключ не обязателен и появляется там, где таблиц несколько и между ними есть связь. Типов связи три, и один из них называют двумя способами.

  • Один к одному

    Каждой записи в одной таблице соответствует ровно одна запись в другой, как у пользователя и его единственного профиля.

  • Один ко многим и многие к одному

    Каждой записи в одной таблице соответствует одна или несколько записей в другой: у одного покупателя много заказов. Многие к одному – та же связь, если смотреть со стороны заказов.

  • Многие ко многим

    Каждой записи в одной таблице соответствует ноль, одна или несколько записей в другой, и наоборот. Студент записан на несколько курсов, а на каждом курсе учится много студентов. Такую связь обычно хранят через третью, промежуточную таблицу.

Нормальные формы, нормализация и денормализация

Нормализация – это приведение таблиц к нормальной форме. Нормальные формы – требования к таблицам в теории реляционных баз данных: правила, по которым таблицы строят, чтобы СУБД обрабатывала их корректно и данные в них не повторялись. Знать стоит как минимум первые две, третью на собеседованиях спрашивают реже.

  • Первая нормальная форма (1НФ)

    Каждое поле хранит одно значение, то есть значения атомарны. Строка, где в поле "Телефон" через запятую записаны два номера, первой нормальной форме не отвечает. Её делят так, чтобы в каждом поле осталось одно значение и с ним можно было работать отдельно. На практике такое поле ломает поиск: оператор службы доставки ищет клиента по номеру телефона, и точный поиск не находит того, у кого в поле записаны два номера через запятую.

  • Вторая нормальная форма (2НФ)

    Таблица уже в первой нормальной форме, и каждое поле зависит от всего первичного ключа целиком. Пример из урока: ключ составлен из отдела и должности, зарплата зависит от обоих, а то, нужен ли сотруднику компьютер, зависит только от должности. Это поле выносят в отдельную таблицу должностей, а зарплата остаётся на месте.

  • Третья нормальная форма (3НФ)

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

  • Денормализация

    Обратный процесс. В запросах к полностью нормализованной базе нередко приходится соединять десяток таблиц и больше, а каждое соединение отнимает ресурсы сервера и время. Тогда небольшие, редко меняющиеся и тесно связанные таблицы объединяют в одну или добавляют в таблицу избыточное поле, и за целостностью данных потом следят отдельно. Решают это те, кто хорошо знает базу и её нагрузку, а начинающему тестировщику достаточно знать, что нормальные формы иногда нарушают нарочно, ради скорости.

Пример: ключи и связи в учебной базе магазина

Связи удобнее всего разглядеть на живых данных. В SQL-песочнице лежит база интернет-магазина из курса SQL: покупатели в таблице customers, заказы в orders, платежи в payments. Запросы ниже выполняются там как есть, без установки и регистрации.

  • 1. Посмотреть заказы

    SELECT id, customer_id, status, amount FROM orders ORDER BY id LIMIT 5; выведет первые пять заказов. Поле id – первичный ключ заказа, а customer_id указывает на покупателя из customers. У одного покупателя бывает несколько заказов, и это связь один ко многим.

  • 2. Найти платежи заказа

    SELECT * FROM payments WHERE order_id = 111; вернёт две строки. Поле order_id связывает платёж с заказом, и у заказа 111 платежей два.

  • 3. Найти заказ без платежа

    Заказ 109 стоит в таблице orders в статусе paid, а запрос SELECT * FROM payments WHERE order_id = 109; не находит ни одной строки.

  • 4. Решить, что это значит

    Таблицы расходятся: один заказ оплачен дважды, другой считается оплаченным без платежа. В интерфейсе магазина этого не видно, а в базе расхождение находится двумя запросами. Это повод для баг-репорта, и какая из таблиц права, выясняют с аналитиком или разработчиком.

Видеоурок, шпаргалки и задания

Базы данных я разбираю в девятнадцатом уроке курса "Тестировщик с нуля" на YouTube. Этим уроком открывается блок о базах данных, следом идут уроки о таблицах в MySQL, о SELECT и о JOIN. В бесплатном базовом курсе по тестированию тема идёт уроком "Что такое БД и СУБД? Нормальные формы", и после теории в нём есть задания.

Шпаргалка о базах данных собирает таблицы, ключи, связи, нормализацию и выбор между SQL и NoSQL, а шпаргалка о MongoDB показывает документную базу рядом с привычными таблицами. В тренажёре SQL запросы пишут к учебной базе библиотеки и сразу видят результат. Дальше, на задачах из рабочего дня тестировщика, SQL учит мой отдельный курс.

Курсы по теме

Вопросы и ответы

Чем база данных отличается от СУБД?

База данных – это сами данные, набор сведений в упорядоченном виде. СУБД – программа, которая эти данные создаёт, меняет, удаляет, выдаёт и защищает, например MySQL или PostgreSQL. Вопрос часто задают на собеседовании junior-тестировщика.

Что такое первичный и внешний ключ?

Первичный ключ однозначно определяет строку таблицы: он обязателен и не повторяется, обычно это поле id. Внешний ключ хранит в одной таблице идентификатор строки из другой и так связывает таблицы, например поле customer_id в таблице заказов указывает на покупателя.

Что такое нормальные формы простыми словами?

Правила, по которым строят таблицы реляционной базы, чтобы данные не повторялись и СУБД работала с ними корректно. В первой нормальной форме каждое поле хранит одно значение. Во второй, кроме того, каждое поле зависит от всего первичного ключа целиком. В третьей поля вне ключа ещё и не зависят друг от друга.

Какие бывают связи между таблицами?

Один к одному, один ко многим (со стороны второй таблицы её называют многие к одному) и многие ко многим. Покупатель и его заказы связаны как один ко многим, студенты и курсы как многие ко многим.

Что такое денормализация?

Намеренное отступление от нормальных форм ради скорости. Таблицы объединяют или добавляют в них избыточное поле, чтобы запросу не приходилось соединять много таблиц, и за целостностью данных после этого следят отдельно.

Зачем тестировщику знать базы данных?

Почти всё, что пользователь вводит в приложение, записывается в базу. Запросом тестировщик проверяет, что данные сохранились верно, и находит расхождения, которых не видно в интерфейсе. На собеседовании спрашивают теорию баз данных и просят написать SELECT.

Посмотреть программы курсов

Программа каждого курса открыта целиком: видны все модули, уроки и число шагов.

Все курсы

Здесь используются cookies: без них сайт не работает, и по ним видно, откуда о платформе узнают.Cookies нужны для входа и учёта переходов. Подробнее