Что такое реляционные БД
Реляционная база данных — это тип БД, в которой данные организованы в виде связанных таблиц, также называемых отношениями. «Отношение» переводится на английский язык как relation, отсюда и появилось название «реляционная база данных».
Эти таблицы состоят из строк и столбцов, где каждая строка представляет запись (набор связанных данных), а каждый столбец – атрибут (характеристику) данных. Эту модель предложил Эдгар Кодд в 1970 году, она стала стандартом благодаря поддержке целостности данных.
Структура реляционных баз данных
Основными понятиями в реляционных БД являются:
- таблицы (отношения),
- строки (кортежи),
- столбцы (атрибуты),
- первичные ключи,
- внешние ключи.
Таблицы
Таблицы — основной элемент представления реляционной базы данных.
Они используются для хранения данных о конкретных объектах, например, клиентах, заказах или продуктах. Каждая таблица имеет уникальное имя и может содержать любое количество записей.
Таблица Servers
ServerID | Name | Processor | Memory | Cost_per_day |
1 | PL65-NVMe-10GE | 2 x Intel Xeon Silver 4314 2.4 GHz 32 cores | 256 GB DDR4 ECC Reg | 3390 |
2 | GL2-A100-NVLink-25GE | 2 x Intel Xeon Gold 6240R 2.4 GHz, 48 cores | 128 GB DDR4 ECC Reg | 14167 |
3 | EL10-SSD | Intel Xeon E3-1230v5 3.4 GHz, 4 Cores | 32 GB DDR4 ECC | 420 |
Таблица Servers содержит информацию:
- ServerID — идентификатор сервера или строки;
- Name — наименование;
- Processor — конфигурация процессора;
- Memory — конфигурация оперативной памяти;
- Cost_per_day — стоимость аренды за сутки.
На языке SQL создание таблицы с такими атрибутами выглядит следующим образом:
CREATE TABLE Servers(
ServerID INT PRIMARY KEY,
Name VARCHAR(50),
Processor VARCHAR(50),
Memory VARCHAR(50),
Cost_per_day INT
);
Кортежи
Кортежи в контексте реляционных баз данных — это термин, который используется для обозначения строки или записи в таблице.
Каждый кортеж является отдельным экземпляром данных, который содержит значения для каждого атрибута (столбца).
Давайте заполним таблицу Servers тремя кортежами. Каждый состоит из набора атрибутов: ServerID, Name, Processor, Memory, Cost_per_day.
INSERT INTO Servers (ServerID, Name, Processor, Memory, Cost_per_day) VALUES
(1, 'PL65-NVMe-10GE', '2 x Intel Xeon Silver 4314 2.4 GHz 32 cores', '256 GB DDR4 ECC Reg', 3390),
(2, 'GL2-A100-NVLink-25GE', '2 x Intel Xeon Gold 6240R 2.4 GHz, 48 cores', '128 GB DDR4 ECC Reg', 14167),
(3, 'EL10-SSD', 'Intel Xeon E3-1230v5 3.4 GHz, 4 Cores', '32 GB DDR4 ECC', 420);
Атрибуты
Столбцы представляют собой отдельные атрибуты данных в таблице. У каждого есть уникальное имя и тип данных, который определяет допустимые значения ячеек.
Например, в таблице Servers атрибут Name может содержать текстовые данные, а Cost_per_day — целые числа.
Основные типы данных:
- INTEGER — целые числа;
- VARCHAR — текстовые строки переменной длины;
- DATE — даты;
- BOOLEAN — логические значения, истина или ложь.
Тип данных атрибута также определяет операции, которые можно выполнить над конкретной ячейкой. Например, для INTEGER это арифметические операции, а для VARCHAR — операции по работе с текстом.
Первичные ключи
Кортежи — отдельные экземпляры сущности. Каждая запись в таблице должна быть уникально идентифицирована. Для этого и существуют первичные ключи.
Первичный ключ — это один или несколько атрибутов, значения которых уникальны для каждой записи. Например, в ранее созданной таблице Servers первичным ключом служит атрибут ServerID.
Для создания первичного ключа используется ограничение PRIMARY KEY.
Давайте создадим таблицу Clients, в которой атрибут ClientID будет являться первичным ключом, а также заполним ее тремя кортежами. Сделаем это с помощью SQL-запроса:
CREATE TABLE Clients(
ClientID INT PRIMARY KEY,
Name VARCHAR(50),
Email VARCHAR(50),
Phone VARCHAR(20)
);
INSERT INTO Clients (ClientID, Name, Email, Phone) VALUES
(1, 'Дмитрий Гордеев', 'd.gord@selectel.ru', '+71234567890'),
(2, 'Николай Смирнов', 'n.smirnov@selectel.ru', '+71112223344'),
(3, 'Олег Кузнецов', 'olegkuzn@selectel.ru', '+79998887766');
Таблица Clients
ClientID | Name | Phone | |
1 | Дмитрий Гордеев | d.gord@selectel.ru | +71234567890 |
2 | Николай Смирнов | n.smirnov@selectel.ru | +71112223344 |
3 | Олег Кузнецов | olegkuzn@selectel.ru | +79998887766 |
Внешние ключи
Отношения между таблицами устанавливаются с помощью внешних ключей.
Внешний ключ — это атрибут или их набор в одной таблице, которые ссылаются на первичный ключ или любой другой столбец с уникальными значениями второй таблицы. Это позволяет связывать данные и поддерживать их целостность.
Рассмотрим пример создания таблицы с внешним ключом, а также заполним ее тремя кортежами:
CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
Date DATE,
ServerID INT,
ClientID INT,
FOREIGN KEY (ServerID) REFERENCES Servers(ServerID),
FOREIGN KEY (ClientID) REFERENCES Clients(ClientID)
);
INSERT INTO Orders (OrderID, Date, ServerID, ClientID) VALUES
(101, '2024-06-01', 2, 1),
(102, '2024-06-02', 3, 2),
(103, '2024-06-05', 1, 1);
Таблица Orders
OrderID | Date | ServerID | ClientID |
101 | 2024-06-01 | 2 | 1 |
102 | 2024-06-02 | 3 | 2 |
103 | 2024-06-05 | 1 | 1 |
В этом примере атрибуты ServerID и ClientID в таблице Orders является внешними ключами, которые ссылаются на первичные в таблицах Servers и Clients соответственно. Это позволяет связать заказы с конкретными клиентами и арендованными ими серверами.
Принципы работы реляционных БД
Принципы работы реляционных баз данных основаны на стандартизированных подходах к управлению данными, обеспечению их целостности и высокому уровню надежности выполнения операций.
Принципы реляционных БД:
- использование языка SQL;
- обеспечение целостности данных;
- соблюдение требований ACID.
SQL
Structured Query Language (SQL) — стандартный язык для управления реляционными базами данных. Он используется для создания, изменения и удаления сущностей, а также выполнения запросов к данным, включая фильтрацию, сортировку и агрегирование.
Пример SQL-запроса с условием:
SELECT * FROM Servers WHERE Processor LIKE '%2.4 GHz%';
Этот запрос выбирает все строки (SELECT *) из таблицы Servers (FROM Servers), где значение атрибута Processor (WHERE Processor) содержит выражение 2.4 GHz с любым количеством символов до и после него (LIKE ‘%2.4 GHz%’). Другими словами, находит все серверы, в которых процессор работает на частоте 2.4 ГГц.
Целостность данных
Целостность данных в реляционных БД поддерживается с помощью ограничений (constraints), которые гарантируют, что данные остаются корректными и согласованными.
Основные типы ограничений:
- первичный ключ (Primary Key) обеспечивает уникальность каждой записи в таблице;
- внешний ключ (Foreign Key) устанавливает связь между значением в одном столбце и уникальным значением в другом — обычно в иной таблице;
- уникальность (Unique) гарантирует, что все значения в столбце или комбинации столбцов будут уникальными;
- NOT NULL запрещает пустые значения атрибута.
Пример создания таблицы с ограничениями:
CREATE TABLE Products (
ProductsID INT PRIMARY KEY,
Name VARCHAR(100) NOT NULL,
Cost DECIMAL(10, 2) NOT NULL,
CategoryID INT,
FOREIGN KEY (CategoryID) REFERENCES Categories(CategoryID)
);
Транзакции и ACID
Транзакция — это последовательность операций, которые выполняются как единое целое.
Если одна из операций в транзакции не удается, все изменения отменяются, чтобы база данных осталась в согласованном состоянии. Это свойство обеспечивает атомарность операций и предотвращает некорректные изменения данных.
Пример транзакции:
BEGIN;
UPDATE Accounts SET Balance = Balance - 100 WHERE AccountID = 1;
UPDATE Accounts SET Balance = Баланс + 100 WHERE AccountID = 2;
COMMIT;
Эта транзакция переводит 100 у.е. с одного счета на другой. Если одна из операций не удается, изменения не сохраняются.
ACID — это набор требований, которые делают транзакции в реляционных базах данных надежными.
- Атомарность (Atomicity) — все операции выполняются полностью или не выполняются вовсе.
- Согласованность (Consistency) — транзакция переводит базу данных из одного согласованного состояния в другое.
- Изолированность (Isolation) — результаты выполнения транзакции не видны другим транзакциям до ее завершения.
- Долговечность (Durability) — после завершения транзакции все изменения сохраняются и остаются неизменными, даже в случае сбоя системы.
ACID-свойства автоматически выполняются в реляционных СУБД для стабильности системы и целостности транзакций. Администраторы могут управлять транзакциями и задавать ограничения, но не обязаны контролировать низкоуровневые механизмы. СУБД самостоятельно берет на себя выполнение требований ACID.
Преимущества реляционной модели
Согласованность данных
Реляционная модель данных упрощает работу, организуя данные в таблицы. Соблюдение свойств нормализации данных снижает дублирование и уменьшает объем хранимой информации. Это делает БД более эффективной.
Реляционные базы данных используют строгие правила и ограничения, гарантируя целостность и согласованность данных.
Хранимые процедуры
Хранимые процедуры — это заранее подготовленные SQL-запросы, которые хранятся на сервере базы данных и могут вызываться многократно без необходимости повторного написания SQL-запроса.
Такие запросы могут выполнять сложные операции, снижая нагрузку на клиентские приложения. Они улучшают производительность и безопасность, так как все вычисления происходят сразу на сервере, минимизируя возможность атак с помощью SQL-инъекций.
Пример хранимой процедуры добавления нового пользователя в таблицу Clients:
CREATE PROCEDURE AddClient (
IN p_ClientID INT,
IN p_Name VARCHAR(50),
IN p_Email VARCHAR(50),
IN p_Phone VARCHAR(20)
)
BEGIN
INSERT INTO Clients (ClientID, Name, Email, Phone)
VALUES (p_ClientID, p_Name, p_Email, p_Phone);
END
Вызов хранимой процедуры AddClient:
CALL AddClient(4, 'Иван Иванов', 'ivanivan@selectel.ru', '+74567891200');
Блокировка и контроль параллелизма
Реляционные БД используют механизмы блокировки и контроля параллелизма, чтобы избежать конфликтов при одновременном доступе к данным.
Блокировка ограничивает доступ к данным. Когда одна транзакция блокирует данные, другие транзакции не могут их изменять, пока блокировка не будет снята.
Контроль параллелизма управляет одновременным выполнением транзакций в базе данных в соответствии с политиками контроля, не нарушая целостность БД.
Простота использования
Реляционные базы данных предлагают простой и интуитивно понятный способ организации данных, а язык SQL прост в изучении. Это позволяет пользователям легко работать с таблицами и делает реляционные БД удобными в обслуживании и доступными для широкого круга пользователей.
Недостатки реляционной модели
Несмотря на свои преимущества, реляционные базы данных имеют и некоторые недостатки.
Работа только со структурированными данными
Реляционные БД лучше всего подходят для работы с четко структурированными данными. Это ограничивает их гибкость при работе с неструктурированными данными или данными с изменяющейся схемой, например, документами, изображениями или другими типами, которые не вписываются в традиционную таблицу.
Горизонтальное масштабирование и задержки
Каждая база данных размещается на физическом сервере с ограниченными ресурсами (CPU, оперативная память, объем дисков). Со временем, когда объем данных и нагрузка на БД увеличиваются, ресурсы одного сервера могут стать недостаточными для удовлетворения этих потребностей.
В такой ситуации появляется необходимость в горизонтальном масштабировании, например, шардировании, при котором данные распределяются по нескольким серверам или узлам в кластере. Это позволяет распределить нагрузку и повысить производительность, но также добавляет ряд сложностей.
Увеличение числа пользователей и объема данных приводит к задержкам при обработке запросов, что связано с необходимостью поддержания целостности данных и выполнения сложных операций синхронизации между несколькими узлами.
Сравнение с NoSQL и другими нереляционными БД
Реляционные БД отличаются от NoSQL-баз данных по структуре, принципам работы и областям применения.
NoSQL базы данных, например, MongoDB и Redis, предлагают более гибкие модели и лучше подходят для работы с неструктурированными данными и большими объемами. В отличие от реляционных, такие системы часто более гибки в плане масштабирования и обработки распределенных данных.
Реляционные БД часто используются для хранения финансовых данных, управления заказами и другими задачами, требующими строгой целостности и согласованности. NoSQL-базы данных, в свою очередь, подходят для проектов, требующих гибкости, например, веб-приложений или систем управления контентом.
Популярные реляционные СУБД
К популярным RBDMS относятся MySQL, PostgreSQL, Microsoft SQL Server, Oracle Database и SQLite. Каждая из них имеет свои уникальные особенности.
RDMS (Relational Database Management System) — система управления реляционными базами данных.
MySQL
MySQL — одна из самых популярных бесплатных и широко используемых СУБД. Она известна высокой производительностью, надежностью и легкостью в использовании.
Особенности MySQL:
- открытый исходный код и активное сообщество разработчиков;
- поддержка различных типов данных и индексов;
- репликация и сегментирование для улучшения масштабируемости;
- поддержка транзакций и ACID-свойств (с использованием InnoDB);
- интеграция с различными языками программирования и веб-фреймворками.
PostgreSQL
PostgreSQL — реляционная СУБД с открытым исходным кодом, известная своей расширяемостью и соответствием стандартам SQL.
Особенности PostgreSQL:
- открытый исходный код и активное сообщество;
- возможность разработки собственных типов данных, функций и операторов;
- поддержка сложных запросов, транзакций и ACID-свойств;
- мощные инструменты репликации и высокой доступности;
- поддержка форматов JSON и JSONB для работы с документами.
Microsoft SQL Server
Microsoft SQL Server — коммерческая реляционная СУБД от Microsoft, широко используемая в корпоративных приложениях.
Особенности Microsoft SQL Server:
- глубокая интеграция с экосистемой Microsoft, включая .NET и Windows Server;
- инструменты для анализа данных и бизнес-аналитики, например SQL Server Analysis Services;
- поддержка транзакций, ACID-свойств и многоверсионного контроля параллелизма (MVCC);
- встроенные функции безопасности и шифрования;
- инструменты для резервного копирования и восстановления, а также для настройки и управления базами данных.
Oracle Database
Oracle Database — одна из самых мощных и функциональных реляционных СУБД, используемая в крупных предприятиях для управления критически важными данными.
Особенности Oracle Database:
- высокая скорость работы и масштабируемость;
- поддержка сложных транзакций и ACID-свойств;
- инструменты для резервного копирования, восстановления и обеспечения высокой доступности;
- встроенные функции безопасности, шифрования и аудита;
- расширенная поддержка аналитических функций и обработки больших данных.
SQLite
SQLite — легковесная встраиваемая реляционная СУБД, известная своей простотой и небольшим размером.
Особенности SQLite:
- встраиваемая система управления базами данных, которая хранит всю БД в одном файле;
- не требует настройки и администрирования;
- поддержка большинства стандартных SQL-функций;
- высокая производительность для небольших и средних приложений;
- открытый исходный код и простая интеграция с различными языками программирования.
Сферы применения реляционных баз данных
Финансовые системы
Реляционные базы данных используются в банковском секторе, страховании и других финансовых учреждениях благодаря поддержке транзакций и соблюдению свойств ACID.
Бизнес-приложения
Системы управления заказами, CRM и ERP-системы используют реляционные базы данных для хранения и управления данными о клиентах, заказах и товарах.
Здравоохранение
В сфере здравоохранения реляционные базы данных применяют для управления данными пациентов, медицинскими записями и назначениями.
Образование
В образовательных учреждениях реляционные базы данных используют для управления данными студентов, учебными планами, оценками и другими образовательными процессами.
Облачные базы данных Selectel
Selectel предоставляет мощные и удобные решения для управления базами данных.
Безопасность на всех уровнях. Использование IAM-системы позволяет разграничивать доступ к ресурсам и данным, а также определять роли пользователей. С ее помощью можно также настроить федерации удостоверений для входа в Selectel через SSO. Кроме того, облачные базы данных соответствуют российским и международным стандартам — закону 152-ФЗ (УЗ-1), приказу ФСТЭК № 21, PCI DSS, ISO 27001, 27017, 27018.
Бесперебойная работа. Репликация данных между кластерами обеспечивает высокую доступность и отказоустойчивость. При сбое одного узла данные остаются доступными на других узлах, что минимизирует риск простоев.
Быстрое масштабирование. Selectel позволяет легко масштабировать базы данных в зависимости от потребностей бизнеса, не прерывая их работу.
Высокая производительность. Selectel использует современное и мощное оборудование. Это позволяет обрабатывать большие объемы данных и поддерживать высокую скорость работы приложений. Также у нас есть отдельное решение для требовательных к производительности проектов – базы данных для высоконагруженных систем.
Selectel полностью забирает на себя ответственность за работу БД. На вас остается только настройка подключения к БД и построение запросов.
Подробнее об услуге — на странице Облачных баз данных.
Заключение
Реляционные базы данных популярны во многих сферах деятельности благодаря надежности, структурированности и поддержке транзакций. Однако некоторые проекты могут требовать дополнительных свойств. Например, работу с типами данных, которые не поддерживаются традиционными таблицами реляционных БД.
Прежде чем выбрать тип базы данных для проектов, изучите принципы работы и оцените преимущества и недостатки каждой из них.