Базы данных

Базы данных #

Документ посвящен знаниям по базам данных, необходимых для реализации проектов. Базы данных - один из ключевых навыков для бэкенд разработчиков.

SQL #

Что нужно знать:

  • SQL синтаксис - SELECT, INSERT, UPDATE/DELETE, GROUP BY, JOIN
  • Создание таблиц
  • Индексы и первичный ключ
  • Внешние ключи
  • RDBMS - MySQL, Postgres. Различные книги/курсы, как правило, учат SQL в контексте в одной из этих двух систем управления баз данных. Для джуниров разница между ними не принципиальна
  • Embedded SQL databases - SQLite, H2

Избранные курсы и учебные ресурсы #

Python SQL connectors #

Базовые инструменты для работы с SQL из Python.

Что нужно уметь:

  • Подключать библиотеки для работы с SQL, используя системы управления зависимостями
  • Создавать таблицы
  • Читать данные из таблиц в ассоциативные массивы или в экземпляры классов-моделей

Примеры:

Избранные курсы и учебные ресурсы #

ORM #

ORM - инструмент для стирания границ между записями в базе и Python объектами. Таблицы в базе данных, как правило, описывают некоторые сущности - пользователей, заказы, товары. ORM позволяют описать эти сущности с помощью классов и совершать действия над таблицами (чтение, вставку, и прочие) без написания SQL синтаксиса - ORM это берёт на себя.

Сфокусируемся на SQLAlchemy и Django ORM.

Что нужно уметь:

  • Подключать ORM к проекту, используя системы управления зависимостями
  • Писать классы, описывающие хранящиеся в таблицах сущности
  • CRUD операции (create, read, update, delete)
  • Кастомные запросы

Избранные курсы и учебные ресурсы #

  • Руководство по SQLAlchemy
  • Плейлист от Артёма Шумейко
  • Урок по Alembic в контексте фреймворка Flask
  • Плейлист по SQLAlchemy и Alembic в контексте FastAPI от Сурена Хореняна
  • Практика - проекты с 4 по 7

Инструменты миграций #

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

Конкретный инструмент зависит от используемого в проекте фреймворка. Для Django это Django Migrations, для FastAPI + SQLAlechemy - Alembic.

Что нужно уметь:

  • Интегрировать инструмент миграций в приложения на фреймворках
  • Понимать взаимодействия инструментов миграций и ORM
  • Писать миграции, меняющие схему БД и данные внутри таблиц
  • Применять новые миграции к уже задеплоенному проекту

Избранные курсы и учебные ресурсы #

  • Раздел про Django Migrations в курсе Добрый, добрый Django от Сергея Балакирева
  • Видео из плейлиста по SQLAlchemy и Alembic в контексте FastAPI от Сурена Хореняна
  • Практика - проекты с 5 по 7

NoSQL базы данных #

SQL - самая нужная для джуниора технология для хранения, но кроме SQL существуют десятки инструментов для хранения данных, созданных под ситуации, где SQL излишен, либо неудобен. Знать все типы баз данных на практике - невозможно, их слишком много. Достаточно иметь представление о том, какие из них и в каких ситуациях используются.

В рамках проектов, на практике поработаем с S3/Minio - хранилищем файлов, и Redis - хранилищем кэша/сессий.

Избранные курсы и учебные ресурсы #

  • Практика - проекты 6 и 7

Что дальше #

Перечисленные выше знания и инструменты - база для Junior (кроме NoSQL). Если есть желание и необходимость углубиться в Backend технологии, советую обратить внимание на:

  • Инструменты миграций - Alembic, Django migrations
  • Document-oriented DB - MongoDB
  • Key-value storage - Redis
  • Интеграции хранилищ кэша