HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Любая нетривиальная программная система состоит минимум из двух компонентов:</p>
1 <p>Любая нетривиальная программная система состоит минимум из двух компонентов:</p>
2 <ul><li>Программного кода, отвечающего за логику работы</li>
2 <ul><li>Программного кода, отвечающего за логику работы</li>
3 <li>Хранилища, в котором содержатся данные, необходимые для работы</li>
3 <li>Хранилища, в котором содержатся данные, необходимые для работы</li>
4 </ul><p>Возьмем для примера Хекслет. Это большой контентный проект, внутри которого есть данные: например, курсы и их содержимое.</p>
4 </ul><p>Возьмем для примера Хекслет. Это большой контентный проект, внутри которого есть данные: например, курсы и их содержимое.</p>
5 <p>Более того, довольно много контента создается самими пользователями: они вводят данные при регистрации, создают и заполняют профили, описывают свои решения и переписываются с поддержкой через топики. Все эти данные непрерывно добавляются на сайт и только увеличиваются в объемах.</p>
5 <p>Более того, довольно много контента создается самими пользователями: они вводят данные при регистрации, создают и заполняют профили, описывают свои решения и переписываются с поддержкой через топики. Все эти данные непрерывно добавляются на сайт и только увеличиваются в объемах.</p>
6 <p>При этом данные нужно не только хранить, но и непрерывно считывать и показывать пользователям. Причем иногда в довольно хитрых формах, например: "Показать на странице испытания три последних код-ревью по этому испытанию, исключая код-ревью пользователя, который прямо сейчас смотрит на эту страницу".</p>
6 <p>При этом данные нужно не только хранить, но и непрерывно считывать и показывать пользователям. Причем иногда в довольно хитрых формах, например: "Показать на странице испытания три последних код-ревью по этому испытанию, исключая код-ревью пользователя, который прямо сейчас смотрит на эту страницу".</p>
7 <p>Подобные сложные запросы к системе хранения делаются ежесекундно, и многие из них значительно сложнее приведенного примера.</p>
7 <p>Подобные сложные запросы к системе хранения делаются ежесекундно, и многие из них значительно сложнее приведенного примера.</p>
8 <p>Кроме того, пользователи на сайтах работают независимо друг от друга, что создает конкуренцию при обращении к одним и тем же данным. А что, если один пользователь читает данные, которые в это время модифицируются другим пользователем?</p>
8 <p>Кроме того, пользователи на сайтах работают независимо друг от друга, что создает конкуренцию при обращении к одним и тем же данным. А что, если один пользователь читает данные, которые в это время модифицируются другим пользователем?</p>
9 <p>За реализацию всех этих возможностей отвечают<strong>системы управления базами данных (СУБД)</strong>. Как правило, они отвязаны от того языка программирования, на котором идет разработка. СУБД - это отдельная программа, которая умеет эффективно сохранять и читать то, что ее попросят.</p>
9 <p>За реализацию всех этих возможностей отвечают<strong>системы управления базами данных (СУБД)</strong>. Как правило, они отвязаны от того языка программирования, на котором идет разработка. СУБД - это отдельная программа, которая умеет эффективно сохранять и читать то, что ее попросят.</p>
10 <p>Таких систем существует довольно много, но это не значит, что все они абсолютно разные. Схожие системы делят на классы - множества систем со схожими характеристиками.</p>
10 <p>Таких систем существует довольно много, но это не значит, что все они абсолютно разные. Схожие системы делят на классы - множества систем со схожими характеристиками.</p>
11 <p>Чаще всего используются<strong>реляционные СУБД (РСУБД)</strong>- системы, работа которых основана на<strong>реляционной модели данных</strong>. С технической точки зрения такие базы данных основаны на табличном представлении данных.</p>
11 <p>Чаще всего используются<strong>реляционные СУБД (РСУБД)</strong>- системы, работа которых основана на<strong>реляционной модели данных</strong>. С технической точки зрения такие базы данных основаны на табличном представлении данных.</p>
12 <p>Для работы с ними нужно понимать две основные вещи:</p>
12 <p>Для работы с ними нужно понимать две основные вещи:</p>
13 <ul><li>Реляционная модель данных - звучит страшно, но в итоге все сводится к таблицам</li>
13 <ul><li>Реляционная модель данных - звучит страшно, но в итоге все сводится к таблицам</li>
14 <li>SQL - специализированный язык для управления базой данных и данными внутри нее</li>
14 <li>SQL - специализированный язык для управления базой данных и данными внутри нее</li>
15 </ul><p>Оба пункта практически не зависят от реализации конкретной РСУБД. Изучив одну СУБД, вы крайне легко сможете переключиться на другую. В этом курсе мы рассмотрим популярную СУБД PostgreSQL. Она поставляется со специальной программой<em>psql</em>, которая представляет собой интерактивную оболочку - REPL. Через нее можно управлять PostgreSQL и взаимодействовать с базами данных, набирая команды в реальном времени.</p>
15 </ul><p>Оба пункта практически не зависят от реализации конкретной РСУБД. Изучив одну СУБД, вы крайне легко сможете переключиться на другую. В этом курсе мы рассмотрим популярную СУБД PostgreSQL. Она поставляется со специальной программой<em>psql</em>, которая представляет собой интерактивную оболочку - REPL. Через нее можно управлять PostgreSQL и взаимодействовать с базами данных, набирая команды в реальном времени.</p>
16 <h2>Основные темы курса</h2>
16 <h2>Основные темы курса</h2>
17 <p>В этом курсе мы затронем такие основные темы:</p>
17 <p>В этом курсе мы затронем такие основные темы:</p>
18 <ul><li>Установка и настройка</li>
18 <ul><li>Установка и настройка</li>
19 <li>Создание и модификация базы данных (DDL)</li>
19 <li>Создание и модификация базы данных (DDL)</li>
20 <li>Наполнение базы данных (DML)</li>
20 <li>Наполнение базы данных (DML)</li>
21 <li>Выборка данных (SELECT, WHERE, ORDER, LIMIT, DISTINCT, GROUP, HAVING)</li>
21 <li>Выборка данных (SELECT, WHERE, ORDER, LIMIT, DISTINCT, GROUP, HAVING)</li>
22 <li>Агрегирующие функции (COUNT)</li>
22 <li>Агрегирующие функции (COUNT)</li>
23 <li>Соединения (JOIN, LEFT JOIN)</li>
23 <li>Соединения (JOIN, LEFT JOIN)</li>
24 <li>Транзакции (уровни изоляции)</li>
24 <li>Транзакции (уровни изоляции)</li>
25 <li>Реляционная алгебра (основы теории множеств)</li>
25 <li>Реляционная алгебра (основы теории множеств)</li>
26 <li>Ключи (первичные, внешние)</li>
26 <li>Ключи (первичные, внешние)</li>
27 <li>Нормализация данных</li>
27 <li>Нормализация данных</li>
28 <li>Связи (один-к-одному, один-ко-многим, многие-ко-многим)</li>
28 <li>Связи (один-к-одному, один-ко-многим, многие-ко-многим)</li>
29 <li>Производительность (индексы)</li>
29 <li>Производительность (индексы)</li>
30 </ul><p>Вся практика в этом курсе выполняется в нашей среде, но если вы разработчик или вам это необходимо, то настройте базу данных локально для экспериментов. Эффективное обучение невозможно без повторения примеров из уроков в своей среде. Поэтому в начале курса необходимо установить PostgreSQL локально. Сделайте это по<a>инструкции</a>.</p>
30 </ul><p>Вся практика в этом курсе выполняется в нашей среде, но если вы разработчик или вам это необходимо, то настройте базу данных локально для экспериментов. Эффективное обучение невозможно без повторения примеров из уроков в своей среде. Поэтому в начале курса необходимо установить PostgreSQL локально. Сделайте это по<a>инструкции</a>.</p>