Введение в базы данных

В этом разделе мы будем с вами говорить о базах данных, в частности о СУБД Postgresql, с которой и будем работать.

Что такое база данных и СУБД?

Как всегда обратимся к Википедии и увидем что-то такое:

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

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

Как видно из определения база данных - это просто совокупность данных организованных по какой-то схеме. А значит нам надо еще одно понятие(которое только что было упомянуто) - СУБД.

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

Так что инструмент с которым мы будем работать(Postgresql) является Системой Управления Базами Данных.

Типы баз данных

В своих проектах вы будете хранить данные разных видов и по разному работать с этими данными. Для того чтобы удобнее работать с данными в различных представлениях есть соответствующие СУБД.

Time series databases

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

Представители таких баз: InfluxDB, ClickHouse, Riak

Search engines

Подобный тип баз данных вы будете использовать очень часто. Название говорит само за себя, подобный тип баз данных используется для хранения значений по которым мы будем производить поиск. Почему для поиска требуется отдельный тип БД? Вот список требований которые мы можем такой базе данных выдвинуть:

  • Поиск должен происходить быстро
  • База должна иметь представления о натуральном языке, значит, что при поиске мы можем искать вхождения по словоформам. Например при поиске слова собака будут найдены документы содержащие слово собачий или синонимы, но они будут находиться в результатах ниже полного соответсвия.
  • Мы бы хотели искать документы по множеству параметров и управлять приоритетами этих параметров. Совершенно естественно, что при вхождении слова в заголовок документ должен находиться выше чем документы содержащие это слово в теле документа. Или еще один пример - при поиске фамилии автора документа, вы в первую очередь ищете документы под его авторством, а уже только потом документы содержащие фамилию в теле документа(например книги)

Многие поисковые движки могут покрыть подобные потребности.

Представители таких баз: Elasticsearch, Sphinx

Key-value databases

Достаточно часто вам так-же потребуется хранить пары ключ:значение, использовать вы такие базы будете при кешировании каких-то результатов, общения программ между собой. Их простота хорошо сказывается на производительности.

Представители таких баз: Redis, memcached, tarantool

Document-oriented databases

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

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

У подобных баз есть весомые плюсы:

  • Производительность
  • Можно добавлять данные в произвольной форме
  • Способны горизонтально масштабироваться

Представители таких баз: MongoDB, CouchDB

Реляционные базы данных

Вам чаще всего понадобиться хранить иерархические/связанные данные, с помощью которых вы будете представлять бизнесс-сущности. Получать вы из такой базы будете как записи по отдельности, так и сразу по несколько связанных между собой записей.

Иерархические это как? Представьте, что у вас есть дерево категорий, когда категория имеет подкатегории, в таком случае мы имеем дело с иерархическими данными. Вот пример:

Перед вами представлено дерево категорий, все элементы дерева называются узлами, узлы у которых нет потомков называются листьями.

Иерархическая модель данных — это модель данных, где используется представление базы данных в виде древовидной (иерархической) структуры, состоящей из объектов (данных) различных уровней.

Реляционная база данных — база данных, основанная на реляционной модели данных.

Реляционная база данных представляет собой набор таблиц (сущностей). Таблицы состоят из колонок и строк (кортежей). Внутри таблиц могут быть определены ограничения, между таблицами существуют отношения. При помощи SQL можно выполнять запросы, которые возвращают наборы данных, получаемых из одной или нескольких таблиц. В рамках одного запроса данные получаются из нескольких таблиц путем их соединения (JOIN), чаще всего для соединения используются те же колонки, которые определяют отношения между таблицами.

Представители таких баз: PostgreSQL, MySQL, Oracle, MsSQL...