Данный репозиторий является базой знаний об открытом программном обеспечении PostgreSQL - системе управления базами данных. Вся информация взята из общедоступных источников и несет исключительно образовательную цель.
Реляционная модель данных - это математическая модель, которая описывает способ организации и хранения данных в базе данных. Она основана на понятии "таблицы" или "реляции", которая состоит из строк и столбцов.
В реляционной модели каждая таблица имеет набор атрибутов (столбцов), которые определяют тип данных, содержащихся в каждой ячейке столбца. Каждая строка таблицы представляет собой конкретную запись или кортеж данных.
Главная идея реляционной модели заключается в том, что связи между таблицами (реляциями) осуществляются через общие атрибуты, так называемые "внешние ключи". Внешний ключ в таблице ссылается на первичный ключ другой таблицы, что позволяет связывать данные между разными таблицами.
Преимущества реляционной модели данных:
- Простота структуры и понятность модели,
- Гибкость и возможность создания сложных запросов для извлечения данных,
- Независимость от физической реализации данных,
- Высокая надежность и целостность данных,
- Поддержка множества операций, таких как сортировка, поиск, фильтрация и соединение данных.
Транзакция в базе данных представляет собой последовательность операций базы данных, которые выполняются как единое целое. Транзакция обладает следующими свойствами, известными как ACID-свойства:
-
Атомарность (Atomicity): (Всё или ничего) Транзакция либо выполняется полностью, либо не выполняется вообще. Если одна из операций внутри транзакции не может быть выполнена, то вся транзакция откатывается, и все изменения, сделанные до этого, отменяются.
-
Согласованность (Consistency): (Ограничения целостности и пользовательские ограничения) Транзакция должна приводить базу данных из одного согласованного состояния в другое согласованное состояние. Это означает, что после завершения транзакции должны быть выполнены все правила целостности БД.
-
Изолированность (Isolation): (Влияние параллельных процессов) Каждая транзакция должна выполняться изолированно от других транзакций. Изменения, внесенные одной транзакцией, должны быть видимы только после успешного завершения этой транзакции. Изолированность обеспечивается с помощью уровней изоляции транзакций. PostgreSQL поддерживает несколько уровней изоляции транзакций, которые позволяют контролировать видимость изменений, выполняемых другими транзакциями. Это позволяет избежать конфликтов одновременного доступа к данным и обеспечивает изоляцию транзакций друг от друга.
-
Долговечность (Durability): (Сохранность данных даже после сбоя) После успешного завершения, изменения, сделанные в транзакции, должны быть сохранены и доступны даже в случае сбоя системы или отключения питания. Это обеспечивается с помощью журнала предзаписи (WAL). Все изменения данных записываются сначала в журнал предзаписи перед тем, как они будут применены к реальной базе данных. Это позволяет восстановить данные в случае сбоя, воссоздавая состояние базы данных до сбоя с помощью журнала предзаписи.
Транзакционность в базах данных означает, что операции, выполняемые в рамках транзакции, являются неделимыми и отражают только либо полное выполнение, либо отмену всех изменений. Это обеспечивает надежность и целостность данных.
-- Начало транзакции
BEGIN;
-- Выполнение операций внутри транзакции
UPDATE users
SET balance = balance - 100
WHERE user_id = 1;
UPDATE products
SET quantity = quantity - 1
WHERE product_id = 100;
-- Проверка результатов операций
SELECT * FROM users WHERE user_id = 1;
SELECT * FROM products WHERE product_id = 100;
-- Если все операции выполнены успешно, фиксируем транзакцию
COMMIT;
-- Если произошла ошибка или нужно отменить изменения, откатываем транзакцию
ROLLBACK;