Что такое реляционная база данных - Академия Selectel

Что такое реляционная база данных

Тирекс
Тирекс Самый зубастый автор
9 июля 2024

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

Изображение записи

Что такое реляционные БД

Реляционная база данных — это тип БД, в которой данные организованы в виде связанных таблиц, также называемых отношениями. «Отношение» переводится на английский язык как relation, отсюда и появилось название «реляционная база данных».

Эти таблицы состоят из строк и столбцов, где каждая строка представляет запись (набор связанных данных), а каждый столбец – атрибут (характеристику) данных. Эту модель предложил Эдгар Кодд в 1970 году, она стала стандартом благодаря поддержке целостности данных.

Структура реляционных баз данных

Основными понятиями в реляционных БД являются:

  • таблицы (отношения),
  • строки (кортежи),
  • столбцы (атрибуты),
  • первичные ключи,
  • внешние ключи.
Отношение, кортеж и атрибут.

Таблицы

Таблицы — основной элемент представления реляционной базы данных.

Они используются для хранения данных о конкретных объектах, например, клиентах, заказах или продуктах. Каждая таблица имеет уникальное имя и может содержать любое количество записей.

Таблица Servers

ServerIDNameProcessorMemoryCost_per_day
1PL65-NVMe-10GE2 x Intel Xeon Silver 4314 2.4 GHz 32 cores256 GB DDR4 ECC Reg3390
2GL2-A100-NVLink-25GE2 x Intel Xeon Gold 6240R 2.4 GHz, 48 cores128 GB DDR4 ECC Reg 14167
3EL10-SSDIntel Xeon E3-1230v5 3.4 GHz, 4 Cores32 GB DDR4 ECC420

Таблица 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

ClientIDNameEmailPhone
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

OrderIDDateServerIDClientID
1012024-06-0121
1022024-06-0232
1032024-06-0511

В этом примере атрибуты 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 — это набор требований, которые делают транзакции в реляционных базах данных надежными.

  • Атомарность (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 полностью забирает на себя ответственность за работу БД. На вас остается только настройка подключения к БД и построение запросов.

Подробнее об услуге — на странице Облачных баз данных.

Заключение

Реляционные базы данных популярны во многих сферах деятельности благодаря надежности, структурированности и поддержке транзакций. Однако некоторые проекты могут требовать дополнительных свойств. Например, работу с типами данных, которые не поддерживаются традиционными таблицами реляционных БД.

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