Тестирование реляционных баз данных |
27.02.2020 01:00 | |||||||||||||||||||||||||||||||||||||||||||||||||
Автор: Кристин Джеквони (Kristin Jackvony) В прошлый раз я рассказывала о различных способах тестирования базы данных вашего приложения. Чтобы убедиться, что ваши данные правильно сохраняются, нужно осуществить запрос к БД. Способ создания запроса зависит от типа вашей базы данных. Раньше большая часть баз данных была реляционной, однако в последнее время есть тенденция к использованию нереляционных БД. Сегодня мы поговорим о реляционных базах данных, а в следующий раз я расскажу про нереляционные. Реляционные БД, например, MySQL и Microsoft SQL Server, основаны на таблицах. Каждая таблица опирается на схему, определяющую, какие колонки будут находиться в таблице, какой у них будет тип данных, и какие колонки будут принимать null-значения. Вот пример типичной SQL-таблицы:
Заметьте, что в ней семь разных колонок. Первая колонка, contactId – это первичный ключ таблица. Его значение уникально, двух одинаковых contactId в таблице быть не может. В реляционных БД схема не меняется, поэтому при добавлении в таблицу Джо без телефона или города соответствующие поля таблицы должны заполняться NULL-значениями. Таблицы в реляционных БД могут соединяться между собой. Вот таблица в той же базе данных, показывающая любимую еду контактов:
Первичный ключ этой таблицы – это foodId. Заметьте, что contactId тут тоже присутствует. Он аналогичен contactId первой таблицы. В результате мы можем видеть, что у Прюнеллы два вида любимой еды – пицца и мороженое, а Джо предпочитает суши. Тестируя реляционную базу данных, можно пользоваться языком запросов SQL для удостоверения, что нужные значения присутствуют в базе. К примеру, если вы только что добавили новый контакт по имени Эми Смит в таблицу контактов, вы можете запросить БД и проверить, действительно ли контакт добавился. select * from Contacts where lastName = 'Smith' and firstName = 'Amy' Этот запрос вернет строку из таблицы:
В вышеприведенном запросе звездочка (*) говорит SQL, что мы хотим увидеть все колонки в ответной записи. Так как это реляционная БД, запрос может содержать и объединение. SQL-объединение совмещает данные из двух таблиц, объединяя их по общей колонке. В примере выше у обеих таблиц есть колонка contactId. Допустим, вы добавили любимую еду Эми (шоколад) и хотите убедиться, что она правильно сохранилась в БД, однако вы не знаете contactId для Эми. Вы не можете просто запросить таблицу Food в поисках Эми Смит, потому что ее имени и фамилии там нет. Таблицу Contacts для еды вы тоже запросить не можете – еда там отсутствует. Однако можно запросить таблицу Contacts, получить contactId, и затем использовать его для запроса к таблице Food. Вот так будет выглядеть этот запрос: select food from Foods Запрос вернет вот какой ответ:
Давайте разберемся, что происходит в запросе. 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, что нас интересует только запись, где имя – Эми, а фамилия – Смит. Существуют и более сложные способы запросить реляционную базу данных, но эти два типа запросов позволяют максимально протестировать валида |