Что такое реляционные базы данных
Любая база данных — это много разной информации, которая собрана в одном месте.
Реляционные базы данных собирают информацию в таблицах. В каждой ячейке таблицы — одна запись, один кусочек информации. В столбцах указаны типы, их еще называют полями: например, имя, фамилия, email, номер телефона клиента. В строках лежат записи для каждого конкретного типа.
Структура таких таблиц обычно фиксирована. Вы заранее задаете столбцы и их типы. Если нужно добавить новый тип данных — придется изменить таблицу или создать еще одну и связать ее с остальными.
Таблицы можно связать через общие данные, которые называются внешними ключами.
Внешний ключ — это особый столбец таблицы. Он ссылается на первичный ключ в другой таблице. Первичный ключ — это уникальный идентификатор группы записей в таблице. Чаще всего его роль выполняет id.
Например, есть таблица «Заказы» и таблица «Покупатели». В «Заказах» есть столбец «customer_id» — он связан со столбцом «id» в «Покупателях». В результате каждая строка с данными о заказе связана со строкой, где есть все данные о покупателе.
Если хотите узнать, кто оформил заказ № 7594 и какой у заказчика номер телефона, достаточно сделать запрос к базе данных. Она сама сопоставит «customer_id» в таблице «Заказы» с «id» в таблице «Покупатели», а потом найдет номер телефона в строке с нужным покупателем.
В результате у нас две таблицы, данные которых связаны, но при этом они не хранят ничего лишнего: в «Заказах» нет номера телефона покупателя — он хранится в таблице «Покупатели», но всё равно доступен.
Данные из реляционных баз обычно получают путем запросов. Запросы пишут на языке SQL — Structured Query Language. В запросе нужно указать:
- столбец, то есть тип данных, который вам нужен;
- таблицу, где этот тип данных хранится;
- условие, по которому будут отфильтрованы значения нужных строк.
Представим, как мог бы выглядеть SQL-запрос, который получает номер телефона по id заказа. Мы хотим вывести конкретные данные, поэтому используем оператор SELECT:
SELECT c.phone
Дальше используем оператор FROM, чтобы выбрать таблицу «Orders» («Заказы»), и оператор AS, чтобы дать этой таблице псевдоним «o»:
FROM orders AS o
С помощью JOIN присоединяем таблицу «Customers» («Покупатели») и даем ей псевдоним «c»:
JOIN customers AS c ON o.customer_id = c.id
ON o.customer_id = c.id — это фраза, которая указывает условие для соединения таблиц: столбец «customer_id» из «Orders» связан со столбцом «id» из «Customers».
Осталось отфильтровать нужную строку — ищем по заказу с id 7594:
WHERE o.order_id = 7594;
SQL — очень понятный язык. Все ключевые слова в нём — это обычные слова английского языка, которые расположены так, как если бы вы писали обычное предложение. Полностью запрос выглядит так:
Кроме того, у реляционных баз данных есть свойство согласованности.
Согласованность означает, что после любой операции с данными база учитывает все заданные ограничения и логические правила. Если система требует, чтобы сумма двух полей всегда совпадала с третьим, то после транзакции это условие всё равно выполнится.
Такие базы данных точнее и надежнее нереляционных, и потому их любят организации, которые связаны с финансами.
Что такое нереляционные базы данных
Нереляционные базы данных хранят данные не в таблицах. Вместо этого они упорядочивают данные более гибким способом: в виде документов, графов, пар «ключ — значение» и других форматов. Всё будет зависеть только от типа базы.
В таких базах данных поля можно удалять и добавлять «на лету».
Но у нереляционных (NoSQL) баз данных есть недостатки:
- Мало готовых решений и инструментов.
- NoSQL-системы доступны, их легко масштабировать, но нет согласованности.
- К нереляционным базам тоже нужно писать запросы, но единого способа нет: как писать запросы, зависит от типа базы данных.
Например, в MongoDB, которая хранит информацию в формате документов, можно использовать методы, которые похожи на JSON:
db.customers.find({ city: 'Москва' });
В Redis и Riak данные хранятся в парах «ключ — значение». В этих базах обычно достаточно обратиться к записи методами GET или SET по уникальному ключу и в ответ получить значение или заменить его.
В графовых базах — Neo4j, Amazon Neptune — свои языки запросов: Cypher или Gremlin. Они ищут связи между вершинами (записями) и ребрами (связями). Представьте, что у вас есть схема отношений между пятью людьми: каждый человек — это точка, а соединяющие их линии — это типы их отношений. Вот к такому формату и делают запросы языки Cypher или Gremlin.
Чем они различаются
Реляционные базы данных хранят информацию в таблицах, структура которых жестко определена, а нереляционные — в разных форматах, структуру которых можно менять в любое время.
Реляционные базы масштабируют «вертикально»: наращивают мощность сервера. Чем больше объем таблицы, тем медленнее будет работать база данных. Нереляционные базы масштабируют «горизонтально». Поэтому они работают быстрее, даже если информации очень много.
Как можно масштабировать нереляционные базы данных:
- Распределить данные и нагрузку по разным узлам.
- Распределить архитектуру базы на разные кластеры серверов.
- Использовать шардовые фрагменты.
- Оптимизировать параллельную обработку.
- Создавать отдельные копии данных на других серверах, чтобы с них можно было быстрее читать данные.
Реляционные БД используют там, где важна точность: например, в финтехе. Нереляционные БД хороши для проектов с быстрым ростом и динамикой. Например, для соцсетей, онлайн-игр или приложений, где данные разнородны и часто меняются.
С базами данных работают аналитики. Они могут взаимодействовать с разными типами БД, но почти всегда должны разбираться в реляционных базах данных, с которыми обычно работают финансовые организации и отделы. Чтобы изучить работу с базами данных и язык запросов SQL, поступайте на курс «Аналитик данных» в Skypro. Эксперты и наставники, специалисты в области аналитики данных научат вас анализировать структуру баз данных, формулировать и создавать запросы к ним.
Какую базу данных выбрать
Реляционные и нереляционные базы данных подходят под разные проекты. Чтобы выбрать — убедитесь, что вы в курсе потребностей своего проекта:
- Для начала определите тип данных, с которыми работаете. Если данные похожи на таблицы с четкими полями, например «клиенты», «заказы», выбирайте реляционную базу данных. Если структура данных часто меняется или записи сильно отличаются друг от друга, выбирайте нереляционную БД.
- Оцените объем данных. Реляционные базы хорошо справляются с небольшими и средними объемами данных, а нереляционные — с большими. Еще надо оценить скорость, с которой к вам приходят новые данные: реляционные базы трудно масштабировать на новых серверах, а нереляционные — просто.
- Для транзакций, когда данные должны быть точными, лучше подходят реляционные базы данных, которые используют SQL: MySQL, PostgreSQL, Microsoft SQL Server. В NoSQL-хранилищах — MongoDB, Redis, Cassandra, Neo4j — нет строгих связей, а скорость операций часто выше. Нереляционные БД подходят для проектов, где главное — быстрое чтение и быстрая запись.
- Ответьте на вопрос, потребуется ли доработка того решения, которое рассматриваете. У популярных реляционных решений много документации, простых инструментов для бэкапов и мониторинга. У NoSQL-проектов обычно есть своя экосистема. Найти для нее готовые решения будет сложнее — возможно, придется платить за доработку.
Не стоит выбирать тип БД просто с учетом того, что он новее или, наоборот, проверен временем: убедитесь, что тип базы данных подходит под формат вашего проекта.
Главное о реляционных и нереляционных базах данных
- Реляционные и нереляционные базы данных выполняют одну функцию: хранят данные. Реляционные базы данных больше подходят финтеху и другим областям, где важна точность связей между данными. Нереляционные — соцсетям и приложениям, где есть много разных данных.
- У реляционных БД один формат — таблицы. У нереляционных — несколько разных форматов: документы, «ключ — значение», графы.
- Нереляционные БД удобны, потому что в них можно менять структуру данных «на лету». В реляционной базе данных структура продумывается раз и навсегда. Если потом требуется структуру изменить, приходится создавать новую базу данных и переносить информацию. А в нереляционной базе можно добавлять и удалять поля данных.
- Реляционные БД используют SQL. Вы формируете запросы с ключевыми словами SELECT, FROM, JOIN, WHERE. У нереляционных БД нет единого формата запросов: всё зависит от типа базы и формата данных.
- Нереляционные базы данных гибче, но жертвуют жестким соблюдением заданных правил. И наоборот — реляционные базы данных не такие гибкие, но следят за точностью данных при обновлении БД.
Добавить комментарий