Базы данных и СУБД
Реляционные базы данных
Реляционные базы данных — самый распространённый тип баз для приложений. Реляционная БД приложения выглядит как набор таблиц, в которых размещаются данные.
Строка таблицы — это набор связанных значений, которые относятся к одному объекту или сущности. Для каждой строки существует уникальный идентификатор записи — первичный ключ. Для связи таблиц друг с другом первичные ключи из одной таблицы добавляются к строкам другой, где они становятся внешними ключами.
Большинство СУБД для реляционных баз данных поддерживают ссылочную целостность. СУБД проверяют значения, связывающие таблицы вместе через первичный и внешний ключ, и подтверждают, что они действительны и правильно синхронизированы. Например, если в таблице Order вы попытаетесь создать заказ с ID user, которого нет в таблице User, СУБД вернёт ошибку. Она не позволит добавить такую запись, поскольку при таком запросе внешний ключ будет недействительным и нарушится ссылочная целостность. Ссылочная целостность нужна для того, чтобы поддерживать логические связи между группами данных.
Для управления реляционными базами данных используется язык запросов SQL, с которым вы уже знакомы.
Примеры СУБД для реляционных баз данных: Microsoft Access, Oracle, Microsoft SQL Server, MySQL и PostgreSQL.
Нереляционные базы данных
В нереляционных БД (их ещё называют NoSQL-базами данных, поскольку в них почти не используется SQL) данные могут храниться не только в таблицах (например при типе «ключ-значение»), но и в документах (формата JSON или в графах).
Среди основных типов нереляционных БД:
- Хранилища документов.
- Столбчатые хранилища данных.
- «Ключ-значение».
- Графовые базы данных.
Хранилища документов
В отличие от реляционной БД, где данные одного объекта могут распределяться по разным таблицам, здесь все данные этого объекта хранятся в полях одного документа. При этом структура документов в хранилище может быть разной, что даёт бОльшую гибкость. Например, в реляционной базе данных все заданные поля нужно заполнить каким-то значением, иначе она покажет ошибку. В хранилище документов можно загрузить документы с разным количеством и значением атрибутов — это удобно, если в БД загружаются документы из разных источников.
Чтобы получить конкретный документ из базы, понадобится его уникальный идентификатор. С полями документов, в которых хранятся атрибуты, может работать СУБД. Приложение выполняет запросы к полям документа и применяет фильтры для сортировки их значений.
Примеры СУБД данного типа: CouchDB, Couchbase, MongoDB, Berkeley DB XML.
Столбчатые хранилища данных
Столбчатые хранилища данных похожи на реляционную базу тем, что тоже представляют данные в таблицах. Ключевая особенность таких БД в том, что столбцы этих таблиц подразделяются на группы или семейства столбцов.
В каждом семействе содержатся логически связанные данные об объекте. Обычно они извлекаются или управляются как единое целое. В семейство столбцов можно добавить новые столбцы. У строк со столбцами, которые содержат разные данные об одном объекте, — одинаковый ключ.
Примеры СУБД: Apache HBase, Apache Cassandra, ScyllaDB.
«Ключ-значение»
При таком типе нереляционной БД данные находятся в большой таблице. У каждого набора данных есть уникальный ключ. Большинство хранилищ пар «ключ-значение» поддерживают только самые простые операции: запросить, вставить, удалить. Чтобы частично или полностью изменить значение, приложение всегда перезаписывает существующее значение целиком (то есть удаляет старое значение и записывает новое). Такие системы используются для хранения изображений или создания специализированных файловых систем (например для хранения PDF-файлов).
Графовая база данных
Граф — это геометрическая фигура, которая состоит из точек и соединяющих их линий. Точки называют вершинами графа или «узлами», линии — «рёбрами».
Так выглядит граф с шестью вершинами и семью рёбрами.
В графовой базе данных узлы представляют сущности, а рёбра иллюстрируют связи между ними. У рёбер может быть разное направление, указывающее на характер связи.
Хранилища данных графов позволяют приложениям эффективно выполнять запросы, которые проходят через сеть узлов и рёбер, а также анализировать связи между сущностями. Такие хранилища широко применяются для приложений с большим количеством связей, например для социальных сетей.
Примеры СУБД: Neo4j, OrientDB, AllegroGraph, Blazegraph.