Урок № 0.   SQL, СУБД, Postgre.

SQL - это язык, который используется для работы с данными в базах данных.

Как расшифровывается SQL?

Structured Query Language - структурированный язык запросов

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

Какая информация может быть внутри?

В базах данных SQL можно хранить разнообразную информацию. Вот несколько примеров:

  • Числа: Это могут быть цены товаров, количество товаров на складе, результаты измерений и т.д.
  • Текст: Имена, адреса, описания товаров, комментарии пользователей и т.д.
  • Даты и время: Даты рождения, даты заказов, время начала и окончания событий и т.д.
  • Логические значения: Например, да/нет, истина/ложь, активен/неактивен и т.д.
  • Изображения и файлы: Можно хранить изображения, документы, отчеты и т.д.
  • Географические данные: Координаты GPS, адреса, маршруты.
  • В общем проще сказать, что всё и всякое :)

Но для того, чтобы эти данные где-то хранились, организовывались и обрабатывались, нужна система управления базами данных (СУБД).

Характеристики и виды СУБД.

СУБД принято разделять на несколько классификаций:

По расположению баз данных

  • Локальные – установлены на локальном компьютере и работают только на нем. ?
  • Централизованные – находятся на сервере и обслуживают клиентские приложения, установленные на других ПК. ?
  • Распределенные – состоят из нескольких серверов, расположенных в разных местах, и обрабатывают данные, которые были разделены между устройствами. ?

По хранению и обработке данных и запросов

  • Клиент-серверные – разделяют работу между клиентской и серверной частями. Первая отвечает за пользовательский интерфейс и запросы к серверу, вторая – за хранение и обработку данных. ?
  • [В силу небезопасности не особо распространены] Файл-серверные – хранят базу данных на сервере, но обработка запросов происходит на устройствах пользователей через сетевые пути.
  • Встраиваемые – предназначены для использования внутри приложений. Обеспечивают быстрое (данные уже у тебя в приложении) и экономичное (не нужны серверы) хранение данных. ?

По языку запросов

  • SQL – используют язык SQL для запросов к базе данных. ?
  • NoSQL – используют различные языки запросов, не связанные с SQL. ?

По структуре и организации данных

  • Реляционные – содержат информацию в виде таблиц, которые могут быть связаны между собой. ?
  • Ключ-значение – разновидность NoSQL-ориентированных СУБД, которые используют пары ключ-значение для хранения данных. ?
  • Документные – еще одна разновидность NoSQL. Она использует документы, содержащие различные поля и их значения для хранения данных. ?
  • Графовые – относятся к NoSQL, используют граф для хранения и организации данных, где каждый узел представляет собой объект, а ребра между узлами – отношения между объектами. ?
  • Колоночные – разновидность реляционных СУБД, где данные хранятся в виде колонок, а не строк. ?

🤯 Зачем вообще столько характеристик?

Простейшие примеры:

  • SQLite и Postgre, обе реляционные, но SQLite является встраиваемой, а Postgre невозможен без серверной части.
  • MySQL и Vertica оба SQL, но первая классическая реляционная, вторая же колоночная.
  • Хочешь быструю аналитику на больших данных? Взгляни на колоночные СУБД.
  • Нужно эффективно находить сложные взаимосвязи между объектами? Вероятнее тебе пригодится графовая СУБД.

PostgreSQL - это мощная, надежная и расширяемая реляционная? СУБД, использующая SQL для управления данными, работающая по клиент-серверной модели?, поддерживающая сложные типы данных и транзакции с ACID-свойствами.

Что такое ACID и транзакции?

Транзакция — это последовательность операций, которые выполняются как единое целое.
Например вы планируете перевод денег другу, но ведь это как минимум несколько операций: вычесть средства с вашего баланса; зачесть их в баланс друга.

ACID — это набор требований к транзакциям в базе данных, которые обеспечивают сохранность ваших данных.

  • Atomicity — Атомарность гарантирует, что каждая транзакция будет выполнена полностью или не будет выполнена совсем. Не допускаются промежуточные состояния.
  • Consistency — Согласованность гарантирует, что после выполнения транзакции, правила и ограничения, установленные для данных, будут соблюдены.
  • Isolation — Изолированность гарантирует, что параллельные транзакции не будут мешать друг другу.
  • Durability — Надёжность гарантирует, что результаты транзакции будут сохранены навсегда, даже в случае сбоя системы..

Конечно, можно бесконечно углубляться в дебри, например почему MariaDB это форк MySQL, или как например ArangoDB поддерживает сразу три модели данных: (графовую), (документную), (ключ-значение)...

Но пожалуй последнее что мы рассмотрим детальнее, это сам SQL.

SQL — это язык для работы с базами данных, который действительно развивается, но не так, как языки программирования вроде Python или JavaScript.

В то же время, SQL — это стандарт для взаимодействия с реляционными базами данных. Этот стандарт разрабатывается и обновляется международными организациями по стандартизации:.

Обновления SQL стандарта проходят через длительный процесс утверждения

Краткая история обновлений SQL

SQL был впервые стандартизирован в 1986 году ANSI, а затем ISO в 1987. С тех пор были выпущены новые версии SQL стандарта с разной периодичностью:.

  • SQL-86 (1986) — самая первая версия стандарта.
  • SQL-89 — обновления касались исправления ошибок.
  • SQL-92 — одна из крупных ревизий, включавшая много новых возможностей.
  • SQL:1999 — добавление объектно-ориентированных функций.
  • SQL:2003 — расширение с поддержкой XML.
  • SQL:2006 — поддержка управления XML-данными.
  • SQL:2008 — оптимизация и расширение функционала.
  • SQL:2011 — добавление оконных функций.
  • SQL:2016 — поддержка JSON и временных таблиц.
  • SQL:2019 — Property Graph Queries (SQL/PGQ), улучшения JSON.
  • SQL:2023 — Расширение SQL/PGQ, улучшения JSON, мелкие изменения.

Каждый новый стандарт определяет, как должен работать SQL и что он должен поддерживать.

При этом конкретные реализации SQL (PostgreSQL, MySQL, Oracle и т.д.) могут реализовывать стандарт частично или добавлять свои расширения, что приводит к появлению диалектов SQL. То есть каждая база данных может поддерживать разные наборы возможностей SQL.

Обязаны ли СУБД реализовывать новые версии SQL?

Реализация новых версий SQL в системах управления базами данных (СУБД) — пожелание, а не жесткое требование. Постепенное внедрение новых возможностей зависит от разработчиков конкретных СУБД. Например, одна СУБД может быстро внедрить поддержку нового стандарта, другая — медленнее или выборочно.

Разные системы управления базами данных внедряют стандарты по-разному:

  • PostgreSQL и Oracle обычно наиболее близки к последним стандартам SQL.
  • MySQL известен своими упрощениями и отсутствием некоторых возможностей, присутствующих в стандартном SQL.
  • Microsoft SQL Server поддерживает большинство стандартных функций, но также добавляет свои уникальные расширения.

Почему сайт посвящён именно PostgreSQL?

Автор понял, что удобных и понятных интерактивных учебников и тренажеров для Postgresql не хватает несмотря на мощность, популярность и крутость СУБД.

  • Приближен к чистому SQL.
  • Богаче набор функций и лучше поддержка при работе с json в сравнении с MySQL.
  • Бесплатно, в отличии, например, от Oracle.
  • Открытый и кроссплатформенный, в отличии, например, от Microsoft SQL Server.
  • PostgreSQL имеет российские корни, что может быть дополнительным плюсом для тех, кто ищет отечественные решения.

Также автор понял, что тренироваться с серверным СУБД в целом удовольствие сомнительное - настроить его и подтянуть данные это тяжкий челлендж для новичка. А на собеседовании уже считается базой понимание JOIN и UNION.

Продолжить