> For the complete documentation index, see [llms.txt](https://sallyit.gitbook.io/akademiait/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://sallyit.gitbook.io/akademiait/hard-skills/bazy-dannykh/relyacionnye.md).

# Реляционные

**Реляционная база данных** (англ. *relation* — отсюда и название модели) — это составленная по реляционной модели база данных, в которой данные, занесенные в таблицы, имеют изначально заданные отношения. Сами таблицы в такой базе данных также соотносятся друг с другом строго определенным образом. Реляционные базы данных используют целый комплекс инструментов, которые обеспечивают целостность данных, т. е. их точность, полноту и единообразие.

### **Транзакция. ACID.** <a href="#tranzakciya.-acid" id="tranzakciya.-acid"></a>

**Транзакция** — это комплекс последовательных операций с применением операторов SQL, имеющих определенную цель. Все транзакции должны отвечать четырем требованиям ACID:

* **Атомарность** (англ. *atomicity*) — транзакция является неделимым блоком и выполняется или полностью, или никак.
* **Согласованность** (англ. *consistency*) — завершенная транзакция сохраняет согласованность базы данных.
* **Изолированность** (англ. *isolation*) — параллельные транзакции не могут влиять друг на друга.
* **Устойчивость** (англ. *durability*) — никакой сбой в системе не может влиять на результат завершенной транзакции.

Подробнее в главе:

[Транзакции](https://3558955033-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbZKWe747D7DUg6CC8XPy%2Fuploads%2F69K8AF9HY6eyuhtnzL0m%2Ftranzakcii?alt=media)

### SQL <a href="#sql" id="sql"></a>

Для взаимодействия с любой реляционной базой данных используется SQL (Structured Query Language) — язык структурированных запросов. Это основа интерфейса систем управления базами данных. Он стандартизирован с 1986 года и поддерживается всеми известными ядрами реляционных баз данных. SQL позволяет работать со строками таблиц, а также извлекать нужные блоки информации и производить транзакции.

Подробнее в главе:

[SQL](https://3558955033-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbZKWe747D7DUg6CC8XPy%2Fuploads%2FwmqysV7XLMZHl9igq0jD%2Fsql?alt=media)

### Констрейты <a href="#parameters" id="parameters"></a>

* NOT NULL
* UNIQUE
* CHECK
* DEFAULT
* PRIMARY KEY (ПК, Первичный ключ)
* FOREIGN KEY (ВК, Внешний ключ)

Подробнее в главе:

[Констрейты](https://3558955033-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FbZKWe747D7DUg6CC8XPy%2Fuploads%2FWL7fVQSDvEecwf4GfZ7d%2Fkonstreity?alt=media)

### Основные характеристики реляционных баз данных <a href="#parameters-1" id="parameters-1"></a>

| Признак                                    | Пояснение                                                                                                                                                                                                                                                                                                                               |
| ------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Множество сущностей**                    | Объекты со строго определенным набором атрибутов, с помощью которых они связываются между собой, формируют понятную и простую для восприятия структуру.                                                                                                                                                                                 |
| **Табличный формат**                       | Такой формат гарантирует высокий уровень структурированности с жесткими логическими взаимосвязями, минимальный уровень избыточности данных, их согласованность и целостность.                                                                                                                                                           |
| **Язык SQL**                               | SQL является стандартизированным средством общения пользователя с базой данных. Он очень формальный, что делает его удобным и простым в изучении. SQL гарантирует точный результат даже при сложном многоуровневом запросе.                                                                                                             |
| **Масштабирование по вертикали**           | Реляционные базы данных хорошо масштабируются по вертикали. Но это значит, что по мере накопления информации в какой-то момент ее обработка потребует больших аппаратных ресурсов и финансовых затрат.                                                                                                                                  |
| **Масштабирование по горизонтали**         | Горизонтальное масштабирование, подразумевающее распределение таблиц данных по множеству серверов, является слабой стороной реляционных баз данных. С разрастанием системы появляются задержки в обновлении данных. В какие-то моменты нарушается принцип целостности данных, что может негативно отразиться на пользовательском опыте. |
| **Наличие требований к параметрам данных** | Реляционные базы данных умеют работать только со структурированными данными. Но современный цифровой мир полон неструктурированных данных (например, фото и видео), к которым нельзя применять принципы реляционной модели.                                                                                                             |

### Примеры <a href="#primery" id="primery"></a>

#### MySQL <a href="#mysql" id="mysql"></a>

Это открытая СУБД, купленная Oracle. С ней работают (41,09%) всех разработчиков (по [результатам](https://survey.stackoverflow.co/2023/#section-most-popular-technologies-databases) опроса, который в 2023 году провёл сайт StackOverflow\.com).

Главные её преимущества — бесплатность и высокая скорость работы с данными. MySQL создавалась для обработки огромных массивов информации в промышленных масштабах, но благодаря доступности и быстродействию оккупировала Всемирную паутину, заслужив звание «СУБД всея интернета». И сегодня MySQL всё ещё самая удобная СУБД для работы с интернет-страницами и веб-приложениями.

#### SQLite <a href="#sqlite" id="sqlite"></a>

Основным ее достоинством считается встраиваемость, которая обусловлена тем, что SQlight в отличие от остальных СУБД является не приложением на подобие «клиент-сервер», а подключаемой библиотекой.

#### PostgreSQL <a href="#postgresql" id="postgresql"></a>

Её можно назвать самой продвинутой. Это не просто реляционная, а объектно-реляционная свободная СУБД.

PostgreSQL поддерживает не только типы данных, которые есть в других реляционных СУБД. Помимо числовых, текстовых, булевых и других стандартных типов, в ней можно хранить и обрабатывать геометрические и денежные данные, сетевые адреса, JSON, XML, массивы, а также создавать собственные типы данных.

Источники:
