Разделы портала

Онлайн-тренинги

.
Тестирование реляционных баз данных
27.02.2020 01:00

Автор: Кристин Джеквони (Kristin Jackvony)
Оригинал статьи
Перевод: Ольга Алифанова

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


Реляционные БД, например, MySQL и Microsoft SQL Server, основаны на таблицах. Каждая таблица опирается на схему, определяющую, какие колонки будут находиться в таблице, какой у них будет тип данных, и какие колонки будут принимать null-значения. Вот пример типичной SQL-таблицы:

contactId

firstName

lastName

email

phone

city

state

10000

Prunella

Prunewhip

Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript

8005551000

Phoenix

AZ

10001

Joe

Schmoe

Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript

NULL

NULL

RI

Заметьте, что в ней семь разных колонок. Первая колонка, contactId – это первичный ключ таблица. Его значение уникально, двух одинаковых contactId в таблице быть не может.

В реляционных БД схема не меняется, поэтому при добавлении в таблицу Джо без телефона или города соответствующие поля таблицы должны заполняться NULL-значениями.

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

foodId

contactId

food

1

10000

Pizza

2

10000

Ice cream

3

10001

Sushi

Первичный ключ этой таблицы – это foodId. Заметьте, что contactId тут тоже присутствует. Он аналогичен contactId первой таблицы. В результате мы можем видеть, что у Прюнеллы два вида любимой еды – пицца и мороженое, а Джо предпочитает суши.

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

select * from Contacts where lastName = 'Smith' and firstName = 'Amy'

Этот запрос вернет строку из таблицы:

contactId

firstName

lastName

email

phone

city

state

10003

Amy

Smith

Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript

8885551001

Boise

ID

В вышеприведенном запросе звездочка (*) говорит SQL, что мы хотим увидеть все колонки в ответной записи.

Так как это реляционная БД, запрос может содержать и объединение. SQL-объединение совмещает данные из двух таблиц, объединяя их по общей колонке.

В примере выше у обеих таблиц есть колонка contactId. Допустим, вы добавили любимую еду Эми (шоколад) и хотите убедиться, что она правильно сохранилась в БД, однако вы не знаете contactId для Эми. Вы не можете просто запросить таблицу Food в поисках Эми Смит, потому что ее имени и фамилии там нет. Таблицу Contacts для еды вы тоже запросить не можете – еда там отсутствует. Однако можно запросить таблицу Contacts, получить contactId, и затем использовать его для запроса к таблице Food.

Вот так будет выглядеть этот запрос:

select food from Foods
inner join on Contacts
where Foods.contactId = Contacts.contactId
and Contacts.firstName  = 'Amy'
and Contacts.lastName = 'Smith'

Запрос вернет вот какой ответ:

food

Chocolate

Давайте разберемся, что происходит в запросе.

select food from Foods – тут мы говорим SQL вернуть только колонку Food из таблицы Foods.

inner join on Contacts – тут мы говорим SQL, что запрос будет объединять информацию из таблицы Foods с информацией из таблицы Contacts.

where Foods.contactId = Contacts.contactId – просим SQL найти contactId в таблице Foods и сопоставить их с contactId в таблице Contacts.

and Contacts.firstName  = 'Amy' and Contacts.lastName = 'Smith' – последние две строчки говорят SQL, что нас интересует только запись, где имя – Эми, а фамилия – Смит.

Существуют и более сложные способы запросить реляционную базу данных, но эти два типа запросов позволяют максимально протестировать валида

Обсудить в форуме