Тестирование нереляционных баз данных |
13.03.2020 01:00 |
Автор: Кристин Джеквони (Kristin Jackvony) В прошлый раз я разбирала запросы к реляционным базам данных, необходимые для тестирования. Сегодня я рассмотрю нереляционные базы данных, расскажу, чем они отличаются от реляционных, и мы обсудим, как создавать к ним запросы в процессе тестирования. Нереляционные базы данных, например, MongoDB и DynamoDB, иногда называются базами данных "без SQL", и их популярность стремительно нарастает. Основное различие между реляционными и нереляционными базами данных в том, что реляционные БД используют таблицы для хранения данных, а нереляционные используют документы. Эти документы часто имеют формат JSON. Давайте посмотрим, как записи из таблицы Contacts (см. статью про реляционные БД) будут выглядеть, будучи перенесенными в нереляционную базу.
Заметьте, что у Джо нет значений для телефона или города, и поэтому они не включены в документ. Тут есть разница с реляционными базами, которые требуют значений для каждого поля. Вместо того, чтобы вставлять значение NULL для телефона и города, как в SQL-таблице, эти поля просто не приводятся. Другое ключевое различие между реляционными и нереляционными БД в возможности добавления в таблицу нового поля без добавления его в каждый документ. Допустим, мы добавляем в таблицу запись, и мы хотим, чтобы она содержала имя супруга/и. После добавления этой записи она будет выглядеть так: { Оригинальные записи, 10000 и 10001, не должны иметь значение в поле "имя супруга". В реляционной БД при добавлении нового поля меняется вся схема таблицы, и у Прюнеллы и Джо появятся значения имен супругов (или NULL). В нереляционных БД нельзя пользоваться объединениями табличных данных, как мы делали в прошлый раз. Каждая запись должна восприниматься как абсолютно самостоятельный документ, и можно создавать запросы для поиска нужных документов. Вид языка запросов зависит от типа используемой базы данных. Примеры ниже приведены для языка запросов MongoDB, основанного на JavaScript, и запрашивают вышеперечисленные документы. db.contacts.find() – такой запрос вернет все контакты в таблице. db.contacts.find( { contactId: "10001" } ) – такой вопрос вернет документ с данными Джо. Чтобы ответы было проще читать, можно добавить команду .pretty() – тогда результат будет приведен к формату JSON, а не выдаваться единой строкой значений. Вы также можете запросить конкретное поле каждого документа. db.contacts.find({}, {firstName:1, _id:0}) – такой запрос вернет имена для каждого контакта. Так как документы в нереляционной БД имеют JSON-структуру, можно создавать документы с массивами. К примеру, в нашей таблице Contacts может находиться документ с перечислением любимой еды каждого контакта: { Массивы даже могут содержать объекты: { Можно заметить, почему такой тип хранения данных может быть полезен вашему приложению. Такая вложенность данных упрощает их чтение по сравнению с реляционными базами, где домашние животные могут находиться в отдельной таблице. Чтобы запросить контакты всех владельцев кошек, можно просто сделать так: db.contacts.find( {"pets.type":"cat"} ) Чтобы запросить контакты всех владельцев кошек по имени Флаффи, так: db.contacts.find( {$and: [{"pets.type":"cat"},{"pets.name":"fluffy"}]} ) Я привела всего несколько простых примеров запросов к нереляционной БД, и этого должно быть достаточно для старта. Чтобы узнать больше, изучите документацию используемой базы данных. Так как такие БД набирают популярность, это знание вам очень пригодится. |