Понятие базы данных: от реляционных до нереляционных
Решает эту задачу база данных. Разберём, что это такое простыми словами, чем реляционные базы отличаются от нереляционных и как выбрать подходящий тип под конкретную задачу.
Открываешь приложение банка — и за секунду видишь баланс, историю платежей и кешбэк за месяц. Пишешь в мессенджер — сообщение сохраняется, доходит до собеседника и не пропадает после перезагрузки телефона. За всем этим стоит одна и та же задача: данные нужно где-то хранить, быстро находить и надёжно обновлять, причём для тысяч людей одновременно. Если данные потеряются или перепутаются, пострадают сразу все пользователи сервиса.
Что такое база данных простыми словами
Что такое база данных? Это хранилище, где данные разложены по понятным правилам, чтобы их было удобно добавлять, искать, менять и удалять.
Определение. База данных (БД, от англ. data base) — совокупность данных, организованных по определённым правилам и хранящихся так, чтобы с ними могли работать программы и пользователи.
Это и есть база данных определение из учебника. Если совсем коротко, что такое БД: умный склад для информации, так понятие базы данных запомнить проще всего. Что значит БД, теперь ясно, а что такое db? То же самое по-английски: database. Видишь в вакансии «DB», это что-то про базы данных. Короткое БД определение для шпаргалки: хранилище данных с правилами доступа.
Чем база отличается от файла или таблицы Excel? Тремя вещами:
- многопользовательский доступ — тысячи людей работают с базой одновременно, не затирая изменения друг друга;
- целостность данных — в поле «возраст» не запишут слово, а заказ не сошлётся на несуществующего покупателя;
- скорость поиска — нужная строка среди миллионов находится за доли секунды.
Для чего нужны базы данных? Магазины хранят в них заказы, соцсети — посты, школы — электронный журнал. База данных, это в информатике один из главных инструментов любого крупного сервиса.
Зачем нужна СУБД (система управления базами данных)
Сама по себе база — это просто данные на диске. Чтобы с ними работать, нужна СУБД — программа-посредник между приложением и хранилищем. Приложение не лезет в файлы напрямую: оно отправляет СУБД запрос к базе данных, а та находит нужное и возвращает результат.
Что берёт на себя СУБД:
- хранение и поиск данных по запросам;
- защиту: кто из пользователей что может читать и менять;
- резервное копирование, чтобы данные не пропали при сбое;
- одновременную работу многих пользователей без конфликтов.
Удобная аналогия — библиотека. Книги на полках — это данные, а библиотекарь — СУБД. Тебе не нужно самому бегать между стеллажами: называешь, что ищешь, и библиотекарь приносит нужную книгу, записывает, кто её взял, и не выдаст её второму читателю одновременно.
Реляционные базы данных: как устроены
Реляционная база данных — это база, где данные хранятся в виде связанных таблиц со строками и столбцами. Название идёт от английского relation — «отношение»: так в математике называют таблицу.
Структура реляционной базы данных задаётся заранее, её называют схемой данных: сначала описывают таблицы и столбцы, потом база принимает записи. Пример из интернет-магазина. Реляционная таблица базы данных «Покупатели» может выглядеть так: столбцы «id», «имя», «город». Каждая строка — это запись реляционной базы данных, то есть один конкретный покупатель. Столбцы задают поля реляционной базы данных: что именно мы о покупателе храним.
Чтобы таблицы работали вместе, используются ключи:
- первичный ключ — уникальный номер записи, по которому её нельзя спутать с другой (например, id покупателя);
- внешний ключ — поле, которое ссылается на первичный ключ другой таблицы (в таблице «Заказы» поле «id_покупателя» указывает, кто сделал заказ).
Данные достают с помощью языка SQL. Запрос «покажи все заказы покупателей из Казани» выглядит примерно так:
SELECT orders.id, customers.name FROM orders JOIN customers ON orders.customer_id = customers.id WHERE customers.city = 'Казань';
Самые популярные реляционные СУБД — MySQL (часто стоит за сайтами), PostgreSQL (выбор многих сложных сервисов) и Oracle (крупные банки и корпорации).
С реляционными базами ты встретишься и на ЕГЭ по информатике: в задании 3 нужно найти ответ по нескольким связанным таблицам, по сути выполнив запрос вручную или в электронных таблицах.
Нереляционные базы данных (NoSQL): как устроены
Нереляционные базы данных, их ещё называют NoSQL, отказываются от жёсткой табличной схемы. Структуру данных можно менять прямо в процессе разработки: добавить новому пользователю поле «никнейм» и не переделывать ради этого всю базу.
Такие базы появились под задачи, где реляционным тесно: большие данные, миллионы запросов в секунду, данные без постоянной структуры. Основных видов четыре.
Документная база данных хранит записи в виде документов, похожих на JSON: у каждого документа свой набор полей. Например, в карточке одного товара есть «размер», а в карточке другого — «объём памяти». Самый известный пример — MongoDB.
Ключ-значение — самый простой вид. Каждой записи соответствует уникальный ключ, а по ключу лежит значение. Похоже на гардероб: сдаёшь куртку, получаешь номерок, по номерку быстро забираешь. Так работает Redis, его часто используют как быстрый кеш, например для хранения сессий пользователей на сайте.
Колоночная база данных хранит данные по столбцам, а не по строкам. Это удобно, когда нужно быстро считать статистику по огромным объёмам: сколько было просмотров за месяц, какая средняя сумма заказа. Пример — Cassandra, которая умеет распределять данные по сотням серверов.
Графовая база данных хранит объекты и связи между ними. Подходит для соцсетей и рекомендаций: «друзья твоих друзей, которые слушают ту же музыку». Пример — Neo4j.
Общее у всех видов одно: они жертвуют частью строгости ради гибкости и скорости на больших нагрузках.
Реляционные и нереляционные базы данных: в чём разница
Главные различия удобно свести в таблицу:
- Модель данных: Реляционные (SQL) — Связанные таблицы из строк и столбцов; Нереляционные (NoSQL) — Документы, пары «ключ-значение», колонки, графы
- Схема: Реляционные (SQL) — Жёсткая, задаётся заранее; Нереляционные (NoSQL) — Гибкая, может меняться на ходу
- Принцип надёжности: Реляционные (SQL) — ACID; Нереляционные (NoSQL) — Чаще BASE
- Масштабирование: Реляционные (SQL) — В основном вертикальное; Нереляционные (NoSQL) — В основном горизонтальное
- Где применяют: Реляционные (SQL) — Банки, бухгалтерия, учёт, заказы; Нереляционные (NoSQL) — Соцсети, аналитика, кеш, большие данные
Две строки таблицы стоит расшифровать.
ACID — набор гарантий: операция выполняется целиком или не выполняется вовсе, данные остаются корректными, параллельные операции не мешают друг другу, а записанное не теряется при сбое. Если при переводе денег деньги списались, но не зачислились, вся операция откатится. BASE — подход мягче: база всегда отвечает на запросы, а данные на всех серверах выравниваются спустя короткое время.
Масштабирование — рост под нагрузкой. Вертикальное масштабирование — купить сервер мощнее, горизонтальное масштабирование — добавить серверов и распределить данные. NoSQL-базы изначально заточены под второй путь.
Как выбрать тип базы данных для задачи
Универсального ответа нет, но есть понятный ориентир.
Реляционная база подходит, когда важны строгая структура и точность. Финансы, учёт товаров на складе, электронный журнал, запись к врачу — везде, где данные связаны между собой и ошибка стоит дорого. Здесь нужны ACID-гарантии и проверка целостности данных на уровне самой базы.
Нереляционные базы данных выигрывают там, где данных очень много, они быстро меняются и заранее неизвестно, какие поля понадобятся. Лента соцсети, логи приложения, каталог с тысячами разных товаров, кеш для ускорения сайта. Плюс горизонтальный рост: если завтра пользователей станет в десять раз больше, можно просто добавить серверы.
Совет от Сотки: если только начинаешь, бери реляционную базу и SQL. Табличная логика понятнее, а навык составлять запросы пригодится и на ЕГЭ, и почти в любой IT-профессии.
Заключение
Выбор между реляционной и нереляционной базой данных — вопрос соответствия задаче, а не спор, что лучше. Многие крупные сервисы используют оба подхода сразу: заказы и платежи хранят в PostgreSQL, а корзину и сессии — в Redis. Лучший способ почувствовать разницу — создать маленькую базу самому: например, таблицу своих оценок по предметам и пару SQL-запросов к ней.
Задания по базам данных есть и в экзамене: попробуй бесплатное занятие по подготовке к ЕГЭ по информатике на платформе Сотка. А про саму информацию читай в статьях о свойствах и видах информации и кодировании и декодировании информации.
Частые вопросы о базах данных (FAQ)
Можно ли использовать и реляционную, и нереляционную базу данных в одном проекте?
Да, и так делают очень часто. Подход называют polyglot persistence: каждая часть проекта получает подходящую базу. Например, данные о пользователях и оплатах лежат в реляционной СУБД, а кеш и уведомления — в Redis или MongoDB.
Какая база данных подходит новичку для первого знакомства?
Удобнее всего начать с SQLite или PostgreSQL. SQLite не требует установки сервера: вся база хранится в одном файле, а в Python для работы с ней есть встроенный модуль sqlite3. Это самый быстрый путь к первым SQL-запросам на своём компьютере.
Правда ли, что NoSQL всегда быстрее реляционных баз данных?
Нет. NoSQL выигрывает на определённых задачах: простые запросы по ключу, огромные потоки записей, горизонтальный рост. На сложных выборках со связями между таблицами реляционная база с хорошими индексами часто работает быстрее и при этом надёжнее.
Нужно ли знать SQL, если работаешь только с нереляционными базами?
Желательно. SQL остаётся стандартом индустрии, и его спрашивают почти на любом собеседовании разработчика. К тому же у многих NoSQL-баз язык запросов похож на SQL, например CQL в Cassandra, так что знание пригодится в любом случае.
Проверь себя
1. Что такое первичный ключ в реляционной базе данных?
- а) Пароль администратора базы — нет, к доступу это не относится, ключ описывает данные.
- б) Уникальный идентификатор записи в таблице — верно, по нему запись нельзя спутать с другой.
- в) Первый столбец любой таблицы — нет, первичным ключом может быть любой столбец или их сочетание, главное — уникальность.
2. Сервису нужно хранить карточки товаров, у которых наборы характеристик сильно различаются. Какой вид базы подойдёт лучше всего?
- а) Документная база данных — верно, у каждого документа может быть свой набор полей.
- б) Графовая база данных — нет, она нужна, когда главное в данных — связи между объектами.
- в) Колоночная база данных — нет, её сила в быстрой аналитике по огромным объёмам, а не в гибких карточках.
3. Банк переводит деньги со счёта на счёт. Во время операции сервер отключился: деньги списались, но не зачислились. Какое свойство ACID не даст этому случиться?
- а) Масштабируемость — нет, это вообще не свойство ACID, а способность базы расти под нагрузкой.
- б) Атомарность — верно, операция выполняется целиком или откатывается полностью.
- в) Гибкость схемы — нет, это черта NoSQL-баз, к надёжности транзакций она не относится.