Базы данных
Базы данных для тестировщика: БД и СУБД, ключи, связи, нормальные формы
База данных – это набор сведений, которые хранятся в упорядоченном виде. СУБД управляет этими данными как программа: создаёт, меняет, удаляет, выдаёт их и защищает. Чаще всего тестировщик работает с реляционными базами: данные в них лежат в таблицах, строку однозначно определяет первичный ключ, а таблицы связывает внешний ключ. Нормальные формы задают правила, по которым строят таблицы, и на собеседовании junior-тестировщика обычно спрашивают первые две.
- БД и СУБД
- данные и программа для них, разницу часто спрашивают на собеседовании
- 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 учит мой отдельный курс.
- Урок курсаЭтот урок с заданиями – бесплатно
- Мой видеоурокбазы данных для тестировщиков и QA
- ПесочницаПопробовать запросы прямо в браузере, без регистрации
- Шпаргалкабазы данных, как устроены
- ШпаргалкаMongoDB для тестировщика
- ТренажёрSQL-запросы
- ПесочницаSQL для тестировщика: таблицы и основные команды
- СтатьяЗапросы SELECT: WHERE, ORDER BY, LIMIT
Курсы по теме
Вопросы и ответы
Чем база данных отличается от СУБД?
База данных – это сами данные, набор сведений в упорядоченном виде. СУБД – программа, которая эти данные создаёт, меняет, удаляет, выдаёт и защищает, например MySQL или PostgreSQL. Вопрос часто задают на собеседовании junior-тестировщика.
Что такое первичный и внешний ключ?
Первичный ключ однозначно определяет строку таблицы: он обязателен и не повторяется, обычно это поле id. Внешний ключ хранит в одной таблице идентификатор строки из другой и так связывает таблицы, например поле customer_id в таблице заказов указывает на покупателя.
Что такое нормальные формы простыми словами?
Правила, по которым строят таблицы реляционной базы, чтобы данные не повторялись и СУБД работала с ними корректно. В первой нормальной форме каждое поле хранит одно значение. Во второй, кроме того, каждое поле зависит от всего первичного ключа целиком. В третьей поля вне ключа ещё и не зависят друг от друга.
Какие бывают связи между таблицами?
Один к одному, один ко многим (со стороны второй таблицы её называют многие к одному) и многие ко многим. Покупатель и его заказы связаны как один ко многим, студенты и курсы как многие ко многим.
Что такое денормализация?
Намеренное отступление от нормальных форм ради скорости. Таблицы объединяют или добавляют в них избыточное поле, чтобы запросу не приходилось соединять много таблиц, и за целостностью данных после этого следят отдельно.
Зачем тестировщику знать базы данных?
Почти всё, что пользователь вводит в приложение, записывается в базу. Запросом тестировщик проверяет, что данные сохранились верно, и находит расхождения, которых не видно в интерфейсе. На собеседовании спрашивают теорию баз данных и просят написать SELECT.
Посмотреть программы курсов
Программа каждого курса открыта целиком: видны все модули, уроки и число шагов.
