Бесплатные материалы

Как устроены базы данных: PostgreSQL, SQL, индексы и транзакции на примере Go

Как устроены базы данных: PostgreSQL, SQL, индексы и транзакции на примере Go

Почему AI-код и наивные in-memory хранилища теряют данные после рестарта? Чтобы ответить на этот вопрос, недостаточно просто подключить PostgreSQL: нужно понимать, как устроены реляционная модель, SQL, индексы и транзакции.
В этом уроке пройдём путь от хранения данных в JSON-файле и Excel до полноценной схемы PostgreSQL. На практике подключим базу к Go через pgx и sqlc, настроим миграции с goose и разберём решения, которые не теряют данные в продакшене.
В этом уроке:
  • Почему in-memory хранилища теряют данные: разберём рестарты, выкладку новых версий, ограничения оперативной памяти и хранение на диске.
  • Как развивались базы данных: от JSON, Excel, иерархических и сетевых моделей до реляционных и нереляционных СУБД.
  • На чём основана реляционная модель: реляционная алгебра, реляционное исчисление, SQL и понятие реляционно полного языка.
  • Как проектировать схему PostgreSQL: таблицы, кортежи, атрибуты, домены, UUIDv7, NULL, TIMESTAMP и TIMESTAMPTZ.
  • Как защищать инварианты данных: PRIMARY KEY, FOREIGN KEY, CHECK CONSTRAINT и нормальные формы.
  • Как управлять миграциями: goose, Up и Down, StatementBegin, go:embed и таблица goose_db_version.
  • Как работать с PostgreSQL из Go: pgx, sqlc и реализация repository без лишней магии ORM.
  • Как писать SQL-запросы: UPDATE, DELETE, JOIN, GROUP BY, ORDER BY, LIMIT и важные граничные случаи.
  • Как выбирать индексы: селективность, B-Tree, Hash, GiST, GIN, BRIN, покрывающие и кластерные индексы.
  • Что происходит под капотом СУБД: хранение строк, bloat, VACUUM, внутренние оптимизации и отличие TRUNCATE от DELETE.
  • Как строить транзакционную бизнес-логику: SELECT FOR UPDATE, конкурентные изменения и паттерн outbox.
В итоге ты получишь цельную инженерную модель работы с базами данных: от математического фундамента и проектирования схемы до индексов и транзакций в Go. Это поможет находить ошибки в AI-сгенерированном коде и принимать осознанные решения для продакшена.

Дополнительные материалы к видео

Исходный код
https://github.com/IgorWalther/videos/tree/master/0022_database_1
Мигратор goose
https://github.com/pressly/goose
SQL-тренажер
https://sql-academy.org/ru/trainer
A Relational Model of Data for Large Shared Data Banks
https://www.engineering.upenn.edu/~zives/03f/cis550/codd.pdf
Relational Completeness of Data Base Sublanguages
https://www.inf.unibz.it/~franconi/teaching/2006/kbdb/Codd72a.pdf
Выбор индексов в базах данных для highload-систем
https://habr.com/ru/articles/897766/
System Design