Урок № 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 — это стандарт для взаимодействия с реляционными базами данных. Этот стандарт разрабатывается и обновляется международными организациями по стандартизации:.
- ISO? — международный орган стандартизации;
- ANSI? — американский орган, ответственный за стандартизацию.
Обновления 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.