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>