# SQL

------

База данных — это набор данных, хранящихся в структурированном виде

Система управления базами данных — это совокупность языковых и программных средств, которая осуществляет доступ к данным, позволяет их создавать, менять и удалять, обеспечивает безопасность данных и т.д.


Типы баз данных

- Реляционные базы данных
- Key-value базы данных
- Документоориентированные базы данных


Основные СУБД:

- Oracle - реляционная СУБД
- MySQL - реляционная СУБД
- Microsoft SQL Server - реляционная СУБД
- PostgreSQL - реляционная СУБД
- MongoDB - документоориентированная СУБД
- Redis - хранилище по типу «ключ-значение»
- Snowflake - облачная реляционная СУБД
- Elasticsearch - поисковой движок
- IBM Db2 - реляционная СУБД
- SQLite - реляционная СУБД

***Реляционные базы данных***

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

Пример реляционной базы данных:

![SQL_Example1](/pictures/DataBase/SQL_Example1.jpeg?raw=true)


Особенности реляционных БД

- Модель данных в реляционных БД определена заранее и является строго типизированной
- Данные хранятся в таблицах, состоящих из столбцов и строк
- На пересечении каждого столбца и строчки допускается только одно значение
- Каждый столбец проименован и имеет определённый тип, которому следуют значения со всех строк в данном столбце
- Столбцы располагаются в определённом порядке, который определяется при создании таблицы
- В таблице может не быть ни одной строчки, но обязательно должен быть хотя бы один столбец
- Запросы к базе данных возвращают результат в виде таблиц

***Key-value базы данных***

Key-value базы данных – это тип баз данных, которые хранят данные как совокупность пар «ключ-значение», в которых ключ служит уникальным идентификатором.

Пример: 

![SQL_example_2](/pictures/DataBase/SQL_example_2.png?raw=true)

Преимущества
- Скорость работы
- Простота модели хранения данных
- Гибкость: значения могут быть любыми, включая JSON

Недостатки
- Плохо масштабируются по мере усложнения моделей данных
- Неэффективность при работе с группой записей

***Документоориентированные базы данных*** 

Документоориентированные базы данных – это тип баз данных, направленный на хранение и запрос данных в виде документов, подобным JSON.

Пример данных: 

![SQL_example_3](/pictures/DataBase/SQL_example_3.png?raw=true)


В реляционных базах данных структура записей строго определена и каждая запись содержит одни и те же поля. Даже если поле не используется, оно присутствует, хоть и пустое.

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

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

В реляционных базах данных информация хранится в связанных друг с другом таблицах. Сами же таблицы состоят из:

- строк, которые называют «записями»
- столбцов, которые называют «полями» или же «атрибутами»

Приимер: 

![SQL_example_4](/pictures/DataBase/SQL_example_4.png?raw=true)

В каждой таблице каждый столбец имеет заранее определённый тип данных. Например, такими типами могут выступать:

- VARCHAR (строковый тип данных)
- INTEGER (числовой тип данных)
- DATETIME (тип данных для даты и времени) и прочие

И каждая строка таблицы должна иметь соответствующий тип для каждого столбца. СУБД не допустит попытку добавления в поле с типом DATETIME произвольной строки.

Для того чтобы узнать типы данных атрибутов, можно выполнить SQL команду DESCRIBE и указать название таблицы:

```
DESCRIBE FamilyMembers
```

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

Внешний ключ – это поле (или набор полей) в одной таблице, которое ссылается на первичный ключ в другой таблице. Наличие внешнего ключа – это такое же необязательное требование, как и в случае с первичным ключом.


