Базы данных и компоненты



База данных
- любое собрание связанных данных. Коллекция аниме, телефонный справочник, каталог выпусков playboy, реестр windows, файлы на диске - примеры баз данных.



СУБД (система управления базами данных) - специальное ПО, обеспечивающее работу самой базы данных, предоставляющее доступ к данным и управление самими базами.



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



Во-вторых, по способу взаимодействия с ними:



Встраиваемые - когда код, обслуживающий БД, работает полностью внутри нашего процесса

Клиент-серверные - когда наше приложение обращается с помощью удаленных вызовов (например, по сети) к отдельному серверу баз данных

Облачные - развитие идеи клиент-серверных БД, когда сервер баз данных расположен вне нашего контроля под управлением провайдера



Структурно при работе с БД можно выделить следующие компоненты:



СУБД - отдельный сервер или библиотека (в случае встраиваемых БД). В случае сетевых клиент-серверных баз данных, взаимодействие с ним идет с помощью специализированного протокола, который отличается для разных СУБД. Так же обычно отдельно имеется язык запросов, благодаря которому можно оперировать данными. Для реляционных БД этот язык - SQL. Примеры: серверы PostgreSQL, MongoDB, Redis.

Клиентская библиотека - служебный код, который позволяет скрыть детали реализации сетевого взаимодействия с СУБД и оперировать вызовами в терминах языках программирования. Как правило, она не работает с языком запросов сама, а передает его серверу СУБД. Для встраиваемых баз неотделим от самой СУБД. Примеры: psycopg, asyncpg.

Query builder - специальный набор функций или классов, помогающих строить запросы на языке СУБД. Для реляционных БД это обычно часть ORM.

ORM (Object Relation mapping) - библиотека, предоставляющая доступ к реляционной СУБД в объектно-ориентированном стиле, позволяющая оперировать классами и их атрибутами вместо сырых кортежей и языка SQL. ORM среди прочего часто имеет возможности по отслеживанию изменений в моделях для прозрачного сохранения их в базу данных, а так же умеет подгружать связанные данные без детального конструирования необходимого запроса. ORM часто делят на Active Record и Data mapper в зависимости от подхода к работе с данными. Для документоориентированных СУБД используется термин object document mapping, хотя он несколько отличается по возможностям. Примеры: sqlalchemy.

Gateway, DAO, Repository - ваши компоненты, изолирующие работу с базой данных и предоставляющие к ней доступ в терминах бизнес логики. Термины могут отличаться в зависимости от используемого подхода к разработке.



Дополнительные материалы:

https://ru.wikipedia.org/wiki/Система_управления_базами_данных

https://www.sqlite.org/whentouse.html

https://www.martinfowler.com/eaaCatalog/repository.html

https://stepik.org/course/63054/promo